コード例 #1
0
    def de_json(cls, data, bot):
        if not data:
            return None

        data = super(Update, cls).de_json(data, bot)

        message = data.get('message')
        if message:
            message['default_quote'] = data.get('default_quote')
        data['message'] = Message.de_json(message, bot)
        edited_message = data.get('edited_message')
        if edited_message:
            edited_message['default_quote'] = data.get('default_quote')
        data['edited_message'] = Message.de_json(edited_message, bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'), bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        callback_query = data.get('callback_query')
        if callback_query:
            callback_query['default_quote'] = data.get('default_quote')
        data['callback_query'] = CallbackQuery.de_json(callback_query, bot)
        data['shipping_query'] = ShippingQuery.de_json(data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(data.get('pre_checkout_query'), bot)
        channel_post = data.get('channel_post')
        if channel_post:
            channel_post['default_quote'] = data.get('default_quote')
        data['channel_post'] = Message.de_json(channel_post, bot)
        edited_channel_post = data.get('edited_channel_post')
        if edited_channel_post:
            edited_channel_post['default_quote'] = data.get('default_quote')
        data['edited_channel_post'] = Message.de_json(edited_channel_post, bot)
        data['poll'] = Poll.de_json(data.get('poll'), bot)

        return cls(**data)
コード例 #2
0
 def test_all_update_types(self, dp, bot, user1):
     handler = ConversationHandler(
         entry_points=[CommandHandler('start', self.start_end)],
         states={},
         fallbacks=[])
     message = Message(0, user1, None, self.group, text='ignore', bot=bot)
     callback_query = CallbackQuery(0,
                                    user1,
                                    None,
                                    message=message,
                                    data='data',
                                    bot=bot)
     chosen_inline_result = ChosenInlineResult(0, user1, 'query', bot=bot)
     inline_query = InlineQuery(0, user1, 'query', 0, bot=bot)
     pre_checkout_query = PreCheckoutQuery(0,
                                           user1,
                                           'USD',
                                           100, [],
                                           bot=bot)
     shipping_query = ShippingQuery(0, user1, [], None, bot=bot)
     assert not handler.check_update(
         Update(0, callback_query=callback_query))
     assert not handler.check_update(
         Update(0, chosen_inline_result=chosen_inline_result))
     assert not handler.check_update(Update(0, inline_query=inline_query))
     assert not handler.check_update(Update(0, message=message))
     assert not handler.check_update(
         Update(0, pre_checkout_query=pre_checkout_query))
     assert not handler.check_update(
         Update(0, shipping_query=shipping_query))
コード例 #3
0
def chosen_inline_result():
    return Update(
        1,
        chosen_inline_result=ChosenInlineResult('result_id',
                                                User(1, 'test_user', False),
                                                'query'),
    )
コード例 #4
0
ファイル: update.py プロジェクト: sgrb/python-telegram-bot
    def de_json(cls, data: Optional[JSONDict],
                bot: 'Bot') -> Optional['Update']:
        data = cls.parse_data(data)

        if not data:
            return None

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'),
                                                 bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'),
                                                   bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(
            data.get('callback_query'), bot)
        data['shipping_query'] = ShippingQuery.de_json(
            data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(
            data.get('pre_checkout_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(
            data.get('edited_channel_post'), bot)
        data['poll'] = Poll.de_json(data.get('poll'), bot)
        data['poll_answer'] = PollAnswer.de_json(data.get('poll_answer'), bot)

        return cls(**data)
コード例 #5
0
    def de_json(data, bot):
        """
        Args:
            data (dict):
            bot (telegram.Bot):

        Returns:
            telegram.Update:
        """
        if not data:
            return None

        data = super(Update, Update).de_json(data, bot)

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'), bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'), bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(data.get('callback_query'), bot)
        data['shipping_query'] = ShippingQuery.de_json(data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(data.get('pre_checkout_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(data.get('edited_channel_post'), bot)

        return Update(**data)
コード例 #6
0
def chosen_inline_result():
    return Update(
        1,
        chosen_inline_result=ChosenInlineResult("result_id",
                                                User(1, "test_user", False),
                                                "query"),
    )
コード例 #7
0
    def de_json(data, bot):
        """
        Args:
            data (dict):
            bot (telegram.Bot):

        Returns:
            telegram.Update:
        """
        if not data:
            return None

        data = super(Update, Update).de_json(data, bot)

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'),
                                                 bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'),
                                                   bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(
            data.get('callback_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(
            data.get('edited_channel_post'), bot)

        return Update(**data)
コード例 #8
0
    def de_json(cls, data: Optional[JSONDict],
                bot: 'Bot') -> Optional['Update']:
        """See :meth:`telegram.TelegramObject.de_json`."""
        data = cls._parse_data(data)

        if not data:
            return None

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'),
                                                 bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'),
                                                   bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(
            data.get('callback_query'), bot)
        data['shipping_query'] = ShippingQuery.de_json(
            data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(
            data.get('pre_checkout_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(
            data.get('edited_channel_post'), bot)
        data['poll'] = Poll.de_json(data.get('poll'), bot)
        data['poll_answer'] = PollAnswer.de_json(data.get('poll_answer'), bot)
        data['my_chat_member'] = ChatMemberUpdated.de_json(
            data.get('my_chat_member'), bot)
        data['chat_member'] = ChatMemberUpdated.de_json(
            data.get('chat_member'), bot)
        data['chat_join_request'] = ChatJoinRequest.de_json(
            data.get('chat_join_request'), bot)

        return cls(**data)
コード例 #9
0
    def test_de_json_required(self, bot, user):
        json_dict = {'result_id': self.result_id, 'from': user.to_dict(), 'query': self.query}
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
コード例 #10
0
def get_false_update_fixture_decorator_params():
    message = Message(1, User(1, '', False), DATE, Chat(1, ''), text='test')
    params = [{
        'callback_query':
        CallbackQuery(1, User(1, '', False), 'chat', message=message)
    }, {
        'channel_post': message
    }, {
        'edited_channel_post': 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 = tuple(key for kwargs in params for key in kwargs)
    return {'params': params, 'ids': ids}
コード例 #11
0
    def de_json(cls, data, bot):
        if not data:
            return None

        data = super(Update, cls).de_json(data, bot)

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'),
                                                 bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'),
                                                   bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(
            data.get('callback_query'), bot)
        data['shipping_query'] = ShippingQuery.de_json(
            data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(
            data.get('pre_checkout_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(
            data.get('edited_channel_post'), bot)
        data['poll'] = Poll.de_json(data.get('poll'), bot)

        return cls(**data)
コード例 #12
0
    def test_de_json_required(self, bot, user):
        json_dict = {'result_id': self.result_id,
                     'from': user.to_dict(),
                     'query': self.query}
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
コード例 #13
0
    def create_chosen_inline_result(self, json_obj):
        result_id = self._get_simple_field(json_obj, 'result_id')
        from_user = self.get_from(json_obj)
        location = self.get_location(json_obj)
        query = self._get_simple_field(json_obj, 'query')
        inline_message_id = self._get_simple_field(json_obj, 'inline_message_id')

        chosen_inline_result = ChosenInlineResult(
            id=result_id, from_user=from_user, query=query
        )

        if location:
            chosen_inline_result.location = location

        if inline_message_id:
            chosen_inline_result.inline_message_id = inline_message_id

        return chosen_inline_result
コード例 #14
0
    def test_equality(self, user):
        a = ChosenInlineResult(self.result_id, user, 'Query', '')
        b = ChosenInlineResult(self.result_id, user, 'Query', '')
        c = ChosenInlineResult(self.result_id, user, '', '')
        d = ChosenInlineResult('', user, 'Query', '')
        e = Voice(self.result_id, 'unique_id', 0)

        assert a == b
        assert hash(a) == hash(b)
        assert a is not b

        assert a == c
        assert hash(a) == hash(c)

        assert a != d
        assert hash(a) != hash(d)

        assert a != e
        assert hash(a) != hash(e)
コード例 #15
0
    def test_equality(self, user):
        a = ChosenInlineResult(self.result_id, user, "Query", "")
        b = ChosenInlineResult(self.result_id, user, "Query", "")
        c = ChosenInlineResult(self.result_id, user, "", "")
        d = ChosenInlineResult("", user, "Query", "")
        e = Voice(self.result_id, "unique_id", 0)

        assert a == b
        assert hash(a) == hash(b)
        assert a is not b

        assert a == c
        assert hash(a) == hash(c)

        assert a != d
        assert hash(a) != hash(d)

        assert a != e
        assert hash(a) != hash(e)
コード例 #16
0
    def test_de_json_required(self, bot, user):
        json_dict = {
            "result_id": self.result_id,
            "from": user.to_dict(),
            "query": self.query
        }
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
コード例 #17
0
    def get_chosen_inline_result(self,
                                 result_id=None,
                                 query=None,
                                 user=None,
                                 location=None,
                                 inline_message_id=None):
        """
        Returns a telegram.Update object containing a inline_query.

        Parameters:
            result_id (str): The result_id belonging to this chosen result
            inline_message_id (Optional[str]): Of omitted will be generated
            location (Optional[telegram.Location or True]): simulates a location
            query (Optional[str]): The query used to send this query
            user (Optional[telegram.User): If omitted will be randomly generated

        Returns:
            telegram.Update: an update containing a :py:class:`telegram.ChosenInlineResult`

        """
        if not result_id:
            raise AttributeError(
                "result_id must be present for chosen_inline_result")

        if user:
            if not isinstance(user, User):
                raise BadUserException
        else:
            user = self.ug.get_user()

        if not query:
            query = ""

        if location:
            if isinstance(location, Location):
                pass
            elif isinstance(location, bool):
                import random
                location = Location(random.uniform(-180, 180),
                                    random.uniform(-90, 90))
            else:
                raise AttributeError(
                    "Location must be either telegram.Location or True")

        if not inline_message_id:
            inline_message_id = self._gen_id()

        return ChosenInlineResult(result_id=result_id,
                                  from_user=user,
                                  query=query,
                                  location=location,
                                  inline_message_id=inline_message_id)
コード例 #18
0
    def test_de_json_all(self, bot, user):
        loc = Location(-42.003, 34.004)
        json_dict = {'result_id': self.result_id,
                     'from': user.to_dict(),
                     'query': self.query,
                     'location': loc.to_dict(),
                     'inline_message_id': 'a random id'}
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
        assert result.location == loc
        assert result.inline_message_id == 'a random id'
コード例 #19
0
    def test_de_json_all(self, bot, user):
        loc = Location(-42.003, 34.004)
        json_dict = {'result_id': self.result_id,
                     'from': user.to_dict(),
                     'query': self.query,
                     'location': loc.to_dict(),
                     'inline_message_id': 'a random id'}
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
        assert result.location == loc
        assert result.inline_message_id == 'a random id'
コード例 #20
0
    def test_de_json_all(self, bot, user):
        loc = Location(-42.003, 34.004)
        json_dict = {
            "result_id": self.result_id,
            "from": user.to_dict(),
            "query": self.query,
            "location": loc.to_dict(),
            "inline_message_id": "a random id",
        }
        result = ChosenInlineResult.de_json(json_dict, bot)

        assert result.result_id == self.result_id
        assert result.from_user == user
        assert result.query == self.query
        assert result.location == loc
        assert result.inline_message_id == "a random id"
コード例 #21
0
    def de_json(data):
        """
        Args:
            data (dict):

        Returns:
            telegram.Update:
        """
        if not data:
            return None

        data['message'] = Message.de_json(data.get('message'))
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'))
        data['chosen_inline_result'] = \
            ChosenInlineResult.de_json(data.get('chosen_inline_result'))

        return Update(**data)
コード例 #22
0
ファイル: update.py プロジェクト: BoSicle/python-telegram-bot
    def de_json(data):
        """
        Args:
            data (dict):

        Returns:
            telegram.Update:
        """
        if not data:
            return None

        data['message'] = Message.de_json(data.get('message'))
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'))
        data['chosen_inline_result'] = \
            ChosenInlineResult.de_json(data.get('chosen_inline_result'))

        return Update(**data)
コード例 #23
0
    def de_json(cls, data, bot):
        if not data:
            return None

        data = super(Update, cls).de_json(data, bot)

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'), bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'), bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(data.get('callback_query'), bot)
        data['shipping_query'] = ShippingQuery.de_json(data.get('shipping_query'), bot)
        data['pre_checkout_query'] = PreCheckoutQuery.de_json(data.get('pre_checkout_query'), bot)
        data['channel_post'] = Message.de_json(data.get('channel_post'), bot)
        data['edited_channel_post'] = Message.de_json(data.get('edited_channel_post'), bot)

        return cls(**data)
コード例 #24
0
    def de_json(data, bot):
        """
        Args:
            data (dict):
            bot (telegram.Bot):

        Returns:
            telegram.Update:
        """
        if not data:
            return None

        data['message'] = Message.de_json(data.get('message'), bot)
        data['edited_message'] = Message.de_json(data.get('edited_message'), bot)
        data['inline_query'] = InlineQuery.de_json(data.get('inline_query'), bot)
        data['chosen_inline_result'] = ChosenInlineResult.de_json(
            data.get('chosen_inline_result'), bot)
        data['callback_query'] = CallbackQuery.de_json(data.get('callback_query'), bot)

        return Update(**data)
コード例 #25
0
def get_false_update_fixture_decorator_params():
    message = Message(1,
                      DATE,
                      Chat(1, ""),
                      from_user=User(1, "", False),
                      text="test")
    params = [
        {
            "callback_query":
            CallbackQuery(1, User(1, "", False), "chat", message=message)
        },
        {
            "channel_post": message
        },
        {
            "edited_channel_post": 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 = tuple(key for kwargs in params for key in kwargs)
    return {"params": params, "ids": ids}
コード例 #26
0
import pytest

from telegram import (Update, CallbackQuery, Bot, Message, User, Chat, InlineQuery,
                      ChosenInlineResult, ShippingQuery, PreCheckoutQuery, Location)
from telegram.ext import InlineQueryHandler, CallbackContext, JobQueue

message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')

params = [
    {'message': message},
    {'edited_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, '', 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',
       'edited_channel_post', 'chosen_inline_result',
       'shipping_query', 'pre_checkout_query', 'callback_query_without_message')


@pytest.fixture(scope='class', params=params, ids=ids)
def false_update(request):
    return Update(update_id=2, **request.param)

コード例 #27
0
from telegram import (Message, Update, Chat, Bot, User, CallbackQuery,
                      InlineQuery, ChosenInlineResult, ShippingQuery,
                      PreCheckoutQuery)
from telegram.ext import Filters, MessageHandler

message = Message(1, User(1, '', False), None, Chat(1, ''), text='Text')

params = [{
    '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',
       'shipping_query', 'pre_checkout_query',
       'callback_query_without_message')


@pytest.fixture(scope='class', params=params, ids=ids)
コード例 #28
0
    },
    {
        "edited_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, "", 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",
コード例 #29
0
def chosen_inline_result(user):
    return ChosenInlineResult(TestChosenInlineResult.result_id, user,
                              TestChosenInlineResult.query)
コード例 #30
0
params = [{
    'message': message
}, {
    'edited_message': message
}, {
    'callback_query':
    CallbackQuery(1, User(1, ''), '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')
}]

ids = ('message', 'edited_message', 'callback_query', 'channel_post',
       'edited_channel_post', 'inline_query', 'chosen_inline_result',
       'shipping_query', 'pre_checkout_query',
       'callback_query_without_message')


@pytest.fixture(scope='class', params=params, ids=ids)