Python 如何在收到特定消息时停止telethon对话
我使用telethon库制作了一个电报机器人,它使用Python 如何在收到特定消息时停止telethon对话,python,telethon,Python,Telethon,我使用telethon库制作了一个电报机器人,它使用按钮.inline和按钮.text方法接收用户的响应。但我想在用户输入特定消息(如bye)后立即停止对话 @bot.on(events.NewMessage(incoming=True, pattern='Hi')) async def main(event): global SENDER MSG = event.raw_text SENDER=event.chat_id async with bot.conv
按钮.inline
和按钮.text
方法接收用户的响应。但我想在用户输入特定消息(如bye)后立即停止对话
@bot.on(events.NewMessage(incoming=True, pattern='Hi'))
async def main(event):
global SENDER
MSG = event.raw_text
SENDER=event.chat_id
async with bot.conversation(SENDER) as conv:
await conv.send_message('choose', buttons=[[Button.inline('Yes'), Button.inline('No')] ])
await conv.send_message('<b> Want More ? </b>', parse_mode='html', buttons=[ [Button.text('Yes', resize=True,single_use=True), Button.text('No', resize=True,single_use=True)], [Button.text('More', resize=True,single_use=True)] ] )
...
...
@bot.on(events.NewMessage(incoming=True,pattern='Hi'))
异步def主(事件):
全局发送方
MSG=event.raw_text
发件人=event.chat\u id
将bot.conversation(发送方)作为conv进行异步:
等待conv.send_消息('choose',buttons=[[Button.inline('Yes'),Button.inline('No')]))
等待conv.send_message('Want More',parse_mode='html',buttons=[[Button.text('Yes',resize=True,single_use=True]),Button.text('No',resize=True,single_use=True)],[Button.text('More',resize=True,single_use=True)])
...
...
每当用户发送“Hi”时,bot就开始使用按钮进行查询
在中,提供了,
cancel()
和cancel\u all()
方法。但是我如何实现它们,以便在收到“再见”消息时结束对话?根据文档,conv.cancel\u all()
取消该聊天的所有对话。我注意到我无法打开多个对话,因为设置了默认值exclusive=True
。所以,我所做的是:
@client.on(events.NewMessage(func=lambda e: e.is_private))
async def handler(event):
try:
rawmsg = event.message.message
if rawmsg == "/cancel":
# set exclusive=False so we can still create a conversation, even when there's an existing (exclusive) one.
async with client.conversation(await event.get_chat(), exclusive=False) as conv:
await conv.cancel_all()
await event.respond("Operation is cancelled.")
return
async with client.conversation(await event.get_chat(), exclusive=True) as conv:
await conv.send_message("Hey, I'll send you back whatever you write! To cancel, do /cancel")
while True:
resp = (await conv.get_response()).raw_text
await conv.send_message(resp)
# except telethon.errors.common.AlreadyInConversationError:
# pass
except:
traceback.print_exc()
当有一条新消息的文本为“/取消”时,它将打开一个对话,并调用
.cancel\u all()
取消旧对话。根据文档,conv.cancel\u all()
取消该聊天的所有对话。我注意到我无法打开多个对话,因为设置了默认值exclusive=True
。所以,我所做的是:
@client.on(events.NewMessage(func=lambda e: e.is_private))
async def handler(event):
try:
rawmsg = event.message.message
if rawmsg == "/cancel":
# set exclusive=False so we can still create a conversation, even when there's an existing (exclusive) one.
async with client.conversation(await event.get_chat(), exclusive=False) as conv:
await conv.cancel_all()
await event.respond("Operation is cancelled.")
return
async with client.conversation(await event.get_chat(), exclusive=True) as conv:
await conv.send_message("Hey, I'll send you back whatever you write! To cancel, do /cancel")
while True:
resp = (await conv.get_response()).raw_text
await conv.send_message(resp)
# except telethon.errors.common.AlreadyInConversationError:
# pass
except:
traceback.print_exc()
当有一条新消息的文本为“/取消”时,它将打开一个对话,并调用
.cancel\u all()
来取消旧的对话。您将有一个'Bye'
模式,该模式创建一个机器人对话(发送方)
,并在其上调用cancel\u all()
。除了非常简单的场景之外,对话并不是真正为任何事情而进行的,如果您继续使用它们,您将遇到更多类似这样的限制。我使用对话
,因为很容易从用户那里获得最新的消息/响应,然后根据它采取行动。到目前为止,我从telethon文档中读到并理解到,我知道如果我使用了事件,就不可能在与用户的聊天中继续进行下去。因为在收到新消息时,我要么进入event NewMessage
功能的开始,要么移动到新事件NewMessage
。你能告诉我如何在函数/代码中间得到最新的消息/响应而不使用<代码>对话< /代码>吗?你将有一个模式,用于<代码>再见>代码>,创建一个<代码> BOT.Talk(发送者),并在上面调用<代码> CopyLelAL()/<代码>。除了非常简单的场景之外,对话并不是真正为任何事情而进行的,如果您继续使用它们,您将遇到更多类似这样的限制。我使用对话
,因为很容易从用户那里获得最新的消息/响应,然后根据它采取行动。到目前为止,我从telethon文档中读到并理解到,我知道如果我使用了事件,就不可能在与用户的聊天中继续进行下去。因为在收到新消息时,我要么进入event NewMessage
功能的开始,要么移动到新事件NewMessage
。你能告诉我,如果不使用<代码>会话< /代码>,在函数/代码中间怎么得到最新的消息/响应?