Add Bot API 3.3 (#806)

* Bot API 3.3

* simpler helper methods (accept only custom names now)
attempt to fix circular import (not sure if its the correct way tho)
added helper methods into User object

* fix User objects in tests to contain is_bot required value

* fix User objects in tests to contain is_bot required value

* delete extra line that caused flake8 error

* fix swapped arguments
This commit is contained in:
Jeff 2017-09-01 14:40:05 +08:00 committed by Eldinnie
parent 16a49ec659
commit b6a0853896
30 changed files with 198 additions and 113 deletions

View file

@ -37,6 +37,8 @@ class Chat(TelegramObject):
photo (:class:`telegram.ChatPhoto`): Optional. Chat photo.
description (:obj:`str`): Optional. Description, for supergroups and channel chats.
invite_link (:obj:`str`): Optional. Chat invite link, for supergroups and channel chats.
pinned_message (:class:`telegram.Message`): Optional. Pinned message, for supergroups.
Returned only in get_chat.
Args:
id (:obj:`int`): Unique identifier for this chat. This number may be greater than 32 bits
@ -57,6 +59,8 @@ class Chat(TelegramObject):
Returned only in get_chat.
invite_link (:obj:`str`, optional): Chat invite link, for supergroups and channel chats.
Returned only in get_chat.
pinned_message (:class:`telegram.Message`, optional): Pinned message, for supergroups.
Returned only in get_chat.
bot (:class:`telegram.Bot`, optional): The Bot to use for instance methods.
**kwargs (:obj:`dict`): Arbitrary keyword arguments.
@ -83,6 +87,7 @@ class Chat(TelegramObject):
photo=None,
description=None,
invite_link=None,
pinned_message=None,
**kwargs):
# Required
self.id = int(id)
@ -96,6 +101,7 @@ class Chat(TelegramObject):
self.photo = photo
self.description = description
self.invite_link = invite_link
self.pinned_message = pinned_message
self.bot = bot
self._id_attrs = (self.id,)
@ -106,6 +112,8 @@ class Chat(TelegramObject):
return None
data['photo'] = ChatPhoto.de_json(data.get('photo'), bot)
from telegram import Message
data['pinned_message'] = Message.de_json(data.get('pinned_message'), bot)
return cls(bot=bot, **data)

View file

@ -86,6 +86,10 @@ class Message(TelegramObject):
invoice (:class:`telegram.Invoice`): Optional. Information about the invoice.
successful_payment (:class:`telegram.SuccessfulPayment`): Optional. Information about the
payment.
forward_signature (:obj:`str`): Optional. Signature of the post author for messages
forwarded from channels.
author_signature (:obj:`str`): Optional. Signature of the post author for messages
in channels.
bot (:class:`telegram.Bot`): Optional. The Bot to use for instance methods.
Deprecated: 6.0
@ -172,6 +176,10 @@ class Message(TelegramObject):
information about the invoice.
successful_payment (:class:`telegram.SuccessfulPayment`, optional): Message is a service
message about a successful payment, information about the payment.
forward_signature (:obj:`str`, optional): Signature of the post author for messages
forwarded from channels.
author_signature (:obj:`str`, optional): Signature of the post author for messages
in channels.
"""
_effective_attachment = _UNDEFINED
@ -214,6 +222,8 @@ class Message(TelegramObject):
pinned_message=None,
invoice=None,
successful_payment=None,
forward_signature=None,
author_signature=None,
bot=None,
**kwargs):
# Required
@ -256,6 +266,8 @@ class Message(TelegramObject):
self.forward_from_message_id = forward_from_message_id
self.invoice = invoice
self.successful_payment = successful_payment
self.forward_signature = forward_signature
self.author_signature = author_signature
self.bot = bot

View file

@ -20,6 +20,8 @@
"""This module contains an object that represents a Telegram User."""
from telegram import TelegramObject
from telegram.utils.helpers import mention_markdown as util_mention_markdown
from telegram.utils.helpers import mention_html as util_mention_html
class User(TelegramObject):
@ -28,6 +30,7 @@ class User(TelegramObject):
Attributes:
id (:obj:`int`): Unique identifier for this user or bot.
is_bot (:obj:`bool`): True, if this user is a bot
first_name (:obj:`str`): User's or bot's first name.
last_name (:obj:`str`): Optional. User's or bot's last name.
username (:obj:`str`): Optional. User's or bot's last name.
@ -36,6 +39,7 @@ class User(TelegramObject):
Args:
id (:obj:`int`): Unique identifier for this user or bot.
is_bot (:obj:`bool`): True, if this user is a bot
first_name (:obj:`str`): User's or bot's first name.
last_name (:obj:`str`, optional): User's or bot's last name.
username (:obj:`str`, optional): User's or bot's username.
@ -46,6 +50,7 @@ class User(TelegramObject):
def __init__(self,
id,
first_name,
is_bot,
last_name=None,
username=None,
language_code=None,
@ -54,6 +59,7 @@ class User(TelegramObject):
# Required
self.id = int(id)
self.first_name = first_name
self.is_bot = is_bot
# Optionals
self.last_name = last_name
self.username = username
@ -105,3 +111,29 @@ class User(TelegramObject):
users.append(cls.de_json(user, bot))
return users
def mention_markdown(self, name=None):
"""
Args:
name (:obj:`str`): If provided, will overwrite the user's name.
Returns:
:obj:`str`: The inline mention for the user as markdown.
"""
if not name:
return util_mention_markdown(self.id, self.name)
else:
return util_mention_markdown(self.id, name)
def mention_html(self, name=None):
"""
Args:
name (:obj:`str`): If provided, will overwrite the user's name.
Returns:
:obj:`str`: The inline mention for the user as HTML.
"""
if not name:
return util_mention_html(self.id, self.name)
else:
return util_mention_html(self.id, name)

View file

@ -72,3 +72,29 @@ def from_timestamp(unixtime):
return None
return datetime.fromtimestamp(unixtime)
def mention_html(user_id, name):
"""
Args:
user_id (:obj:`int`) The user's id which you want to mention.
name (:obj:`str`) The name the mention is showing.
Returns:
:obj:`str`: The inline mention for the user as html.
"""
if isinstance(user_id, int):
return '<a href="tg://user?id={}">{}</a>'.format(user_id, escape_html(name))
def mention_markdown(user_id, name):
"""
Args:
user_id (:obj:`int`) The user's id which you want to mention.
name (:obj:`str`) The name the mention is showing.
Returns:
:obj:`str`: The inline mention for the user as markdown.
"""
if isinstance(user_id, int):
return '[{}](tg://user?id={})'.format(escape_markdown(name), user_id)

View file

@ -39,9 +39,9 @@ def callback_query(bot, request):
class TestCallbackQuery(object):
id = 'id'
from_user = User(1, 'test_user')
from_user = User(1, 'test_user', False)
chat_instance = 'chat_instance'
message = Message(3, User(5, 'bot'), None, Chat(4, 'private'))
message = Message(3, User(5, 'bot', False), None, Chat(4, 'private'))
data = 'data'
inline_message_id = 'inline_message_id'
game_short_name = 'the_game'

View file

@ -22,17 +22,17 @@ from telegram import (Update, CallbackQuery, Bot, Message, User, Chat, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import CallbackQueryHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')}
]
ids = ('message', 'edited_message', 'channel_post',

View file

@ -122,7 +122,7 @@ class TestChat(object):
b = Chat(self.id, self.title, self.type)
c = Chat(self.id, '', '')
d = Chat(0, self.title, self.type)
e = User(self.id, '')
e = User(self.id, '', False)
assert a == b
assert hash(a) == hash(b)

View file

@ -26,7 +26,7 @@ from telegram.utils.helpers import to_timestamp
@pytest.fixture(scope='class')
def user():
return User(1, 'First name')
return User(1, 'First name', False)
@pytest.fixture(scope='class')
@ -89,10 +89,10 @@ class TestChatMember(object):
assert chat_member['status'] == chat_member.status
def test_equality(self):
a = ChatMember(User(1, ''), ChatMember.ADMINISTRATOR)
b = ChatMember(User(1, ''), ChatMember.ADMINISTRATOR)
d = ChatMember(User(2, ''), ChatMember.ADMINISTRATOR)
d2 = ChatMember(User(1, ''), ChatMember.CREATOR)
a = ChatMember(User(1, '', False), ChatMember.ADMINISTRATOR)
b = ChatMember(User(1, '', False), ChatMember.ADMINISTRATOR)
d = ChatMember(User(2, '', False), ChatMember.ADMINISTRATOR)
d2 = ChatMember(User(1, '', False), ChatMember.CREATOR)
assert a == b
assert hash(a) == hash(b)

View file

@ -24,7 +24,7 @@ from telegram import User, ChosenInlineResult, Location, Voice
@pytest.fixture(scope='class')
def user():
return User(1, 'First name')
return User(1, 'First name', False)
@pytest.fixture(scope='class')

View file

@ -23,18 +23,18 @@ from telegram import (Update, Chat, Bot, ChosenInlineResult, User, Message, Call
InlineQuery, ShippingQuery, PreCheckoutQuery)
from telegram.ext import ChosenInlineResultHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',
@ -50,7 +50,7 @@ def false_update(request):
@pytest.fixture(scope='class')
def chosen_inline_result():
return Update(1, chosen_inline_result=ChosenInlineResult('result_id',
User(1, 'test_user'),
User(1, 'test_user', False),
'query'))

View file

@ -23,17 +23,17 @@ from telegram import (Message, Update, Chat, Bot, User, CallbackQuery, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import CommandHandler, Filters
message = Message(1, User(1, ''), None, Chat(1, ''), text='test')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='test')
params = [
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('callback_query', 'channel_post', 'edited_channel_post', 'inline_query',

View file

@ -26,12 +26,12 @@ from telegram.ext import (ConversationHandler, CommandHandler, CallbackQueryHand
@pytest.fixture(scope='class')
def user1():
return User(first_name='Misses Test', id=123)
return User(first_name='Misses Test', id=123, is_bot=False)
@pytest.fixture(scope='class')
def user2():
return User(first_name='Mister Test', id=124)
return User(first_name='Mister Test', id=124, is_bot=False)
class TestConversationHandler(object):

View file

@ -35,7 +35,7 @@ def dp2(bot):
class TestDispatcher(object):
message_update = Update(1, message=Message(1, User(1, ''), None, Chat(1, ''), text='Text'))
message_update = Update(1, message=Message(1, User(1, '', False), None, Chat(1, ''), text='Text'))
received = None
count = 0

View file

@ -26,7 +26,7 @@ from telegram.ext import Filters, BaseFilter
@pytest.fixture(scope='function')
def message():
return Message(0, User(0, 'Testuser'), datetime.datetime.now(), Chat(0, 'private'))
return Message(0, User(0, 'Testuser', False), datetime.datetime.now(), Chat(0, 'private'))
@pytest.fixture(scope='function',
@ -52,7 +52,7 @@ class TestFilters(object):
assert Filters.command(message)
def test_filters_reply(self, message):
another_message = Message(1, User(1, 'TestOther'), datetime.datetime.now(),
another_message = Message(1, User(1, 'TestOther', False), datetime.datetime.now(),
Chat(0, 'private'))
message.text = 'test'
assert not Filters.reply(message)

View file

@ -31,7 +31,7 @@ def game_highscore():
class TestGameHighScore(object):
position = 12
user = User(2, 'test user')
user = User(2, 'test user', False)
score = 42
def test_de_json(self, bot):

View file

@ -30,7 +30,7 @@ def inline_query(bot):
class TestInlineQuery(object):
id = 1234
from_user = User(1, 'First name')
from_user = User(1, 'First name', False)
query = 'query text'
offset = 'offset'
location = Location(8.8, 53.1)
@ -69,10 +69,10 @@ class TestInlineQuery(object):
assert inline_query.answer()
def test_equality(self):
a = InlineQuery(self.id, User(1, ''), '', '')
b = InlineQuery(self.id, User(1, ''), '', '')
c = InlineQuery(self.id, User(0, ''), '', '')
d = InlineQuery(0, User(1, ''), '', '')
a = InlineQuery(self.id, User(1, '', False), '', '')
b = InlineQuery(self.id, User(1, '', False), '', '')
c = InlineQuery(self.id, User(0, '', False), '', '')
d = InlineQuery(0, User(1, '', False), '', '')
e = Update(self.id)
assert a == b

View file

@ -22,18 +22,18 @@ from telegram import (Update, CallbackQuery, Bot, Message, User, Chat, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery, Location)
from telegram.ext import InlineQueryHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',
@ -48,7 +48,7 @@ def false_update(request):
@pytest.fixture(scope='function')
def inline_query(bot):
return Update(0, inline_query=InlineQuery('id', User(2, 'test user'),
return Update(0, inline_query=InlineQuery('id', User(2, 'test user', False),
'test query', offset='22',
location=Location(latitude=-23.691288,
longitude=-46.788279)))

View file

@ -33,7 +33,7 @@ def message(bot):
@pytest.fixture(scope='function',
params=[
{'forward_from': User(99, 'forward_user'),
{'forward_from': User(99, 'forward_user', False),
'forward_date': datetime.now()},
{'forward_from_chat': Chat(-23, 'channel'),
'forward_from_message_id': 101,
@ -56,12 +56,12 @@ def message(bot):
'caption': 'video_file'},
{'voice': Voice('voice_id', 5)},
{'video_note': VideoNote('video_note_id', 20, 12)},
{'new_chat_members': [User(55, 'new_user')]},
{'new_chat_members': [User(55, 'new_user', False)]},
{'contact': Contact('phone_numner', 'contact_name')},
{'location': Location(-23.691288, 46.788279)},
{'venue': Venue(Location(-23.691288, 46.788279),
'some place', 'right here')},
{'left_chat_member': User(33, 'kicked')},
{'left_chat_member': User(33, 'kicked', False)},
{'new_chat_title': 'new title'},
{'new_chat_photo': [PhotoSize('photo_id', 50, 50)]},
{'delete_chat_photo': True},
@ -74,14 +74,16 @@ def message(bot):
{'invoice': Invoice('my invoice', 'invoice', 'start', 'EUR', 243)},
{'successful_payment': SuccessfulPayment('EUR', 243, 'payload',
'charge_id', 'provider_id',
order_info={})}
order_info={})},
{'forward_signature': 'some_forward_sign'},
{'author_signature': 'some_author_sign'}
],
ids=['forwarded_user', 'forwarded_channel', 'reply', 'edited', 'text', 'audio',
'document', 'game', 'photo', 'sticker', 'video', 'voice', 'video_note',
'new_members', 'contact', 'location', 'venue', 'left_member', 'new_title',
'new_photo', 'delete_photo', 'group_created', 'supergroup_created',
'channel_created', 'migrated_to', 'migrated_from', 'pinned', 'invoice',
'successful_payment'])
'successful_payment', 'forward_signature', 'author_signature'])
def message_params(bot, request):
return Message(message_id=TestMessage.id,
from_user=TestMessage.from_user,
@ -91,7 +93,7 @@ def message_params(bot, request):
class TestMessage(object):
id = 1
from_user = User(2, 'testuser')
from_user = User(2, 'testuser', False)
date = datetime.now()
chat = Chat(3, 'private')
test_entities = [{'length': 4, 'offset': 10, 'type': 'bold'},
@ -414,7 +416,7 @@ class TestMessage(object):
id = 1
a = Message(id, self.from_user, self.date, self.chat)
b = Message(id, self.from_user, self.date, self.chat)
c = Message(id, User(0, ''), self.date, self.chat)
c = Message(id, User(0, '', False), self.date, self.chat)
d = Message(0, self.from_user, self.date, self.chat)
e = Update(id)

View file

@ -31,7 +31,7 @@ def message_entity(request):
url = 't.me'
user = None
if type == MessageEntity.TEXT_MENTION:
user = User(1, 'test_user')
user = User(1, 'test_user', False)
return MessageEntity(type, 1, 3, url=url, user=user)

View file

@ -23,15 +23,15 @@ from telegram import (Message, Update, Chat, Bot, User, CallbackQuery, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import Filters, MessageHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('callback_query', 'inline_query', 'chosen_inline_result',

View file

@ -40,7 +40,7 @@ class TestPreCheckoutQuery(object):
shipping_option_id = 'shipping_option_id'
currency = 'EUR'
total_amount = 100
from_user = User(0, '')
from_user = User(0, '', False)
order_info = OrderInfo()
def test_de_json(self, bot):

View file

@ -23,18 +23,18 @@ from telegram import (Update, Chat, Bot, ChosenInlineResult, User, Message, Call
InlineQuery, ShippingQuery, PreCheckoutQuery)
from telegram.ext import PreCheckoutQueryHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',
@ -49,7 +49,7 @@ def false_update(request):
@pytest.fixture(scope='class')
def pre_checkout_query():
return Update(1, pre_checkout_query=PreCheckoutQuery('id', User(1, 'test user'), 'EUR', 223,
return Update(1, pre_checkout_query=PreCheckoutQuery('id', User(1, 'test user', False), 'EUR', 223,
'invoice_payload'))

View file

@ -23,15 +23,15 @@ from telegram import (Message, Update, Chat, Bot, User, CallbackQuery, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import RegexHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('callback_query', 'inline_query', 'chosen_inline_result',

View file

@ -34,7 +34,7 @@ def shipping_query(bot):
class TestShippingQuery(object):
id = 5
invoice_payload = 'invoice_payload'
from_user = User(0, '')
from_user = User(0, '', False)
shipping_address = ShippingAddress('GB', '', 'London', '12 Grimmauld Place', '', 'WC1')
def test_de_json(self, bot):

View file

@ -23,18 +23,18 @@ from telegram import (Update, Chat, Bot, ChosenInlineResult, User, Message, Call
InlineQuery, ShippingQuery, PreCheckoutQuery, ShippingAddress)
from telegram.ext import ShippingQueryHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',
@ -49,7 +49,7 @@ def false_update(request):
@pytest.fixture(scope='class')
def shiping_query():
return Update(1, shipping_query=ShippingQuery(42, User(1, 'test user'), 'invoice_payload',
return Update(1, shipping_query=ShippingQuery(42, User(1, 'test user', False), 'invoice_payload',
ShippingAddress('EN', 'my_state', 'my_city',
'steer_1', '', 'post_code')))

View file

@ -22,19 +22,19 @@ from telegram import (Bot, Update, Message, User, Chat, CallbackQuery, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import StringCommandHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',

View file

@ -22,19 +22,19 @@ from telegram import (Bot, Update, Message, User, Chat, CallbackQuery, InlineQue
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
from telegram.ext import StringRegexHandler
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
ids = ('message', 'edited_message', 'callback_query', 'channel_post',

View file

@ -22,19 +22,19 @@ import pytest
from telegram import (Message, User, Update, Chat, CallbackQuery, InlineQuery,
ChosenInlineResult, ShippingQuery, PreCheckoutQuery)
message = Message(1, User(1, ''), None, Chat(1, ''), text='Text')
message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')
params = [
{'message': message},
{'edited_message': message},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat', message=message)},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat', message=message)},
{'channel_post': message},
{'edited_channel_post': message},
{'inline_query': InlineQuery(1, User(1, ''), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, ''), '')},
{'shipping_query': ShippingQuery('id', User(1, ''), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, ''), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, ''), 'chat')}
{'inline_query': InlineQuery(1, User(1, '', False), '', '')},
{'chosen_inline_result': ChosenInlineResult('id', User(1, '', False), '')},
{'shipping_query': ShippingQuery('id', User(1, '', False), '', None)},
{'pre_checkout_query': PreCheckoutQuery('id', User(1, '', False), '', 0, '')},
{'callback_query': CallbackQuery(1, User(1, '', False), 'chat')}
]
all_types = ('message', 'edited_message', 'callback_query', 'channel_post',
@ -122,7 +122,7 @@ class TestUpdate(object):
b = Update(self.update_id, message=message)
c = Update(self.update_id)
d = Update(0, message=message)
e = User(self.update_id, '')
e = User(self.update_id, '', False)
assert a == b
assert hash(a) == hash(b)

View file

@ -103,7 +103,7 @@ class TestUpdater(object):
try:
# Now, we send an update to the server via urlopen
update = Update(1, message=Message(1, User(1, ''), None, Chat(1, ''), text='Webhook'))
update = Update(1, message=Message(1, User(1, '', False), None, Chat(1, ''), text='Webhook'))
self._send_webhook_msg(ip, port, update.to_json(), 'TOKEN')
sleep(.2)
assert q.get(False) == update
@ -136,7 +136,7 @@ class TestUpdater(object):
sleep(.2)
# Now, we send an update to the server via urlopen
update = Update(1, message=Message(1, User(1, ''), None, Chat(1, ''), text='Webhook 2'))
update = Update(1, message=Message(1, User(1, '', False), None, Chat(1, ''), text='Webhook 2'))
self._send_webhook_msg(ip, port, update.to_json())
sleep(.2)
assert q.get(False) == update

View file

@ -25,6 +25,7 @@ from telegram import User, Update
def json_dict():
return {
'id': TestUser.id,
'is_bot': TestUser.is_bot,
'first_name': TestUser.first_name,
'last_name': TestUser.last_name,
'username': TestUser.username,
@ -34,12 +35,13 @@ def json_dict():
@pytest.fixture(scope='function')
def user(bot):
return User(TestUser.id, TestUser.first_name, last_name=TestUser.last_name,
return User(TestUser.id, TestUser.first_name, TestUser.is_bot, last_name=TestUser.last_name,
username=TestUser.username, language_code=TestUser.language_code, bot=bot)
class TestUser(object):
id = 1
is_bot = True
first_name = 'first_name'
last_name = 'last_name'
username = 'username'
@ -49,6 +51,7 @@ class TestUser(object):
user = User.de_json(json_dict, bot)
assert user.id == self.id
assert user.is_bot == self.is_bot
assert user.first_name == self.first_name
assert user.last_name == self.last_name
assert user.username == self.username
@ -60,6 +63,7 @@ class TestUser(object):
user = User.de_json(json_dict, bot)
assert user.id == self.id
assert user.is_bot == self.is_bot
assert user.first_name == self.first_name
assert user.last_name == self.last_name
assert user.username is None
@ -72,6 +76,7 @@ class TestUser(object):
user = User.de_json(json_dict, bot)
assert user.id == self.id
assert user.is_bot == self.is_bot
assert user.first_name == self.first_name
assert user.last_name is None
assert user.username is None
@ -94,10 +99,10 @@ class TestUser(object):
assert user.get_profile_photos()
def test_equality(self):
a = User(self.id, self.first_name, self.last_name)
b = User(self.id, self.first_name, self.last_name)
c = User(self.id, self.first_name)
d = User(0, self.first_name, self.last_name)
a = User(self.id, self.first_name, self.is_bot, self.last_name)
b = User(self.id, self.first_name, self.is_bot, self.last_name)
c = User(self.id, self.first_name, self.is_bot)
d = User(0, self.first_name, self.is_bot, self.last_name)
e = Update(self.id)
assert a == b