大家好!我正在 Telethon 上编写一个电报机器人。我搜索了整个互联网,但仍然找不到方法来比较从用户收到的消息。 更多详细信息:我正在编写促销代码系统,即一个人按下“输入促销代码”按钮,因此这会捕获 NewMessage 事件(pattern =“输入促销代码”),机器人会等到该人写下一条消息,然后进行比较,但机器人不会等待下一条消息,而是执行一项功能,比较“输入促销代码”按钮的文本,当然什么都不起作用。问题:如何让按下“输入促销代码”按钮后,机器人等待包含此促销代码的消息,然后进行比较?我附上了我的版本:
我附上了我的版本:
@bot.on(events.NewMessage(incoming=True, pattern='Ввести промокод'))
async def answer2(event):
await event.respond("Ваш код:")
if event.text=="BIJO":
await event.respond("Правильно!")
else:
await event.respond("Неправильно!")
在 aiogram 中,如果我没有记错的话,有一个用于这些目的的状态机,我无法肯定地告诉你有关这个库的信息,但请寻找有关这个主题的信息。就我个人而言,在创建机器人时,我纯粹是在请求库上工作,并通过为具有此 ID 的用户创建临时状态来解决这些情况。也就是说,在用户数据中,创建一个变量状态并在其中简要地写上我的期望,在代码中我对其进行如下处理:如果状态为无,则它像以前一样工作,如果收到消息“促销代码”,则我们将状态分配给等待促销代码,如果状态=等待促销代码,则我们比较收到的消息的文本并将状态重置为无。我把所有这些都放入了 if、elif、else 结构中。一切都进展顺利,没有任何问题。
我找到了解决问题的方法。要比较一条消息,您必须等待它然后接收它。事实证明,Telethon 有一个 TelegramClient 类,它有一个辅助Conversation(),要等待任何事件(在我们的例子中是一条消息),您需要它的wait_event()方法。以下是示例代码: