Как получить кнопку CallbackQuery в разговорах библиотеки телетона - PullRequest
1 голос
/ 11 апреля 2020

Я изучаю asyncio, чтобы использовать telethon модуль. Я хочу использовать кнопки в разговорах и получить вывод выбранной пользователем кнопки.

@bot.on(events.NewMessage(incoming=True, pattern=r'start'))
async def chatbot(event):
   sender = await event.get_sender(); SENDER = sender.id
   async with bot.conversation(SENDER) as conv:
   await conv.send_message('Select a button :')
   await conv.send_message('Yes or no?', buttons=[
        Button.inline('Yes!', b'yes'),
        Button.inline('Nope', b'no')    ])

   if selected_button == 'yes' :
        # do something
   else:
       # do something

Использование callbackquery , как указано в документации, позволяет перейти к функции handler(event) events.CallbackQuery(). Но не go возвращается к функции conv из chatbot.

Как получить информацию о выбранной кнопке и продолжить работу в функции chatbot?

1 Ответ

2 голосов
/ 11 апреля 2020

Начиная с Telethon v1.11, вам нужно использовать Conversation.wait_event, что немного уродливо, но делает трюк:

# Defined somewhere
def press_event(user_id):
    return events.CallbackQuery(func=lambda e: e.sender_id == user_id)

...

# Later in your conversation
press = await conv.wait_event(press_event(SENDER))
...