如何在 telethon 库的对话中获取按钮 CallbackQuery
How to get button CallbackQuery in conversations of telethon library
我正在学习 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,跳转到 events.CallbackQuery()
的 handler(event)
函数。但不会回到chatbot
函数的conv
。
如何获取所选按钮的信息并在 chatbot
函数中进一步处理?
从 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))
我正在学习 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,跳转到 events.CallbackQuery()
的 handler(event)
函数。但不会回到chatbot
函数的conv
。
如何获取所选按钮的信息并在 chatbot
函数中进一步处理?
从 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))