我正在构建一个机器人,它必须从用户那里接收一个组作为输入,以便它知道用户想要执行某个 X 操作的组。怎么做?
我想过像poll-bot那样与一些回调数据进行深度链接,但问题是我不希望用户在组上写任何东西(是的,用户和机器人都在组中)。
我还考虑过将一个组(机器人所在的位置)中的所有用户提供给一个数据库,然后询问用户他想要哪个组,但仍然无法使用电报机器人 API 来做到这一点。
谢谢!
我正在构建一个机器人,它必须从用户那里接收一个组作为输入,以便它知道用户想要执行某个 X 操作的组。怎么做?
我想过像poll-bot那样与一些回调数据进行深度链接,但问题是我不希望用户在组上写任何东西(是的,用户和机器人都在组中)。
我还考虑过将一个组(机器人所在的位置)中的所有用户提供给一个数据库,然后询问用户他想要哪个组,但仍然无法使用电报机器人 API 来做到这一点。
谢谢!
您可以使用深层链接要求用户将您的机器人添加到组中;当用户选择一个组时,您将该组的chat_id 链接到您数据库上用户的chat_id;下次您的用户想要执行任务时,您只需显示所有链接的组。
每个群聊和单聊都有一个 chat_id。只要聊天存在,它就不会改变。要了解 chat_id,您可以使用像这样的机器人。它总是会用他收到消息的聊天的聊天 ID 来回答:
from telegram.ext import Updater
def echo(bot, update):
bot.sendMessage(chat_id=update.message.chat_id, text="Your chat ID is " + str(update.message.chat_id))
updater = Updater(token='BOT_TOKEN')
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.text, echo))
要执行一些 X 操作,您可以使用此 chat_id。它不会改变,因此您可以将它们作为变量存储在脚本中。
如果你想让用户选择他想在哪个组中做一些 X 动作,你首先需要知道用户所属的所有组。据我所知,没有办法通过电报接收这些信息。这是有道理的,否则机器人所有者可以知道所有用户组。我怀疑这是任何用户想要的。
在我看来,最好的方法是让用户指定组 ID。
def some_X_action(bot, update, args):
if (len(args) <= 0):
bot.sendMessage(chat_id=update.message.chat_id, text="usage: /Xaction groupID")
return
bot.sendMessage(chat_id=args[0], text="sending message in group with ID " + args[0])
dispatcher.add_handler(CommandHandler('Xaction', some_X_action, pass_args=True))
也许您可以允许为 chat_id 创建别名,例如“news-chat”或易于记忆的名称。