Inline query handler refactored

This commit is contained in:
Davte 2019-07-12 12:39:55 +02:00
parent d692744b5b
commit 8919fc08a3

View File

@ -390,28 +390,25 @@ class Bot(TelegramBot, ObjectWithDatabase):
Answer it with results or log errors. Answer it with results or log errors.
""" """
query = update['query'] query = update['query']
answer, switch_pm_text, switch_pm_parameter = None, None, None results, switch_pm_text, switch_pm_parameter = None, None, None
for condition, handler in self.inline_query_handlers.items(): for condition, handler in self.inline_query_handlers.items():
if condition(query): if condition(query):
_function = handler['function'] _handler = handler['handler']
if asyncio.iscoroutinefunction(_function): results = await _handler(bot=self, update=update,
answer = await _function(update) user_record=user_record)
else:
answer = _function(update)
break break
if not answer: if not results:
answer = self.default_inline_query_answer results = self.default_inline_query_answer
if type(answer) is dict: if type(results) is dict:
if 'switch_pm_text' in answer: if 'switch_pm_text' in results:
switch_pm_text = answer['switch_pm_text'] switch_pm_text = results['switch_pm_text']
if 'switch_pm_parameter' in answer: if 'switch_pm_parameter' in results:
switch_pm_parameter = answer['switch_pm_parameter'] switch_pm_parameter = results['switch_pm_parameter']
answer = answer['answer'] results = results['answer']
answer = make_inline_query_answer(answer)
try: try:
await self.answerInlineQuery( await self.answerInlineQuery(
update['id'], update['id'],
answer, results=results,
cache_time=10, cache_time=10,
is_personal=True, is_personal=True,
switch_pm_text=switch_pm_text, switch_pm_text=switch_pm_text,
@ -1055,7 +1052,8 @@ class Bot(TelegramBot, ObjectWithDatabase):
is_personal=None, is_personal=None,
next_offset=None, next_offset=None,
switch_pm_text=None, switch_pm_text=None,
switch_pm_parameter=None): switch_pm_parameter=None,
update=None):
"""Answer inline queries. """Answer inline queries.
This method wraps lower-level `answerInlineQuery` method. This method wraps lower-level `answerInlineQuery` method.