gpt4 book ai didi

python - 在 python 中处理 Telegram bot 的多个问题

转载 作者:太空狗 更新时间:2023-10-30 00:44:15 26 4
gpt4 key购买 nike

我正在使用 Telegram 机器人 API 在 Python 中编写一个 Telegram Bot 。我面临着管理需要用户回答的问题的问题。当程序正在等待一个用户的回答而另一个用户请求信息或在第一个用户响应之前提出另一个问题时,就会出现问题。

Telegram API 使用代码来处理请求。当您要求更新时,您会附上一个代码。如果您发送的代码高于请求代码,它将被标记为已处理并且 Telegram 将其删除并且不再出现在更新中。此代码是连续的,因此如果您将更新 3 标记为已处理,更新 1 和 2 也会被删除。

问题是为什么最好的植物/优雅方式来处理需要为用户提供答案的多个请求?

最佳答案

没有最Pythonic 的方式来做到这一点。这是一个您必须编程才能解决的问题。

基本上,您必须维护一些关于每个用户的状态变量。当新消息到达时,机器人会检查用户所处的状态,并做出相应的响应。

假设您有一个函数,handle(msg),它会为每条到达的消息调用:

user_states = {}

def handle(msg):
chat_id = msg['chat']['id']

if chat_id not in user_states:
user_states[chat_id] = some initial state ...

state = user_states[chat_id]

# respond according to `state`

这将适用于一个简单的程序。

对于更复杂的情况,我推荐使用 telepot ,我为 Telegram Bot API 创建的 Python 框架。它具有专门解决此类问题的功能。

例如,下面是一个计算单个用户发送了多少消息的机器人。如果 10 秒后没有收到消息,则重新开始(超时)。计数是每次聊天 - 这很重要。

import sys
import telepot
from telepot.delegate import per_chat_id, create_open

class MessageCounter(telepot.helper.ChatHandler):
def __init__(self, seed_tuple, timeout):
super(MessageCounter, self).__init__(seed_tuple, timeout)
self._count = 0

def on_message(self, msg):
self._count += 1
self.sender.sendMessage(self._count)

TOKEN = sys.argv[1] # get token from command-line

bot = telepot.DelegatorBot(TOKEN, [
(per_chat_id(), create_open(MessageCounter, timeout=10)),
])
bot.notifyOnMessage(run_forever=True)

通过以下方式运行程序:

python messagecounter.py <token>

Go to the project page如果您有兴趣了解更多信息。有很多文档和重要的示例。

关于python - 在 python 中处理 Telegram bot 的多个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com