3

我正在构建一个机器人,它必须从用户那里接收一个组作为输入,以便它知道用户想要执行某个 X 操作的组。怎么做?

我想过像poll-bot那样与一些回调数据进行深度链接,但问题是我不希望用户在组上写任何东西(是的,用户和机器人都在组中)。

我还考虑过将一个组(机器人所在的位置)中的所有用户提供给一个数据库,然后询问用户他想要哪个组,但仍然无法使用电报机器人 API 来做到这一点。

谢谢!

4

2 回答 2

1

您可以使用深层链接要求用户将您的机器人添加到组中;当用户选择一个组时,您将该组的chat_id 链接到您数据库上用户的chat_id;下次您的用户想要执行任务时,您只需显示所有链接的组。

于 2017-04-24T14:20:52.680 回答
0

每个群聊和单聊都有一个 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”或易于记忆的名称。

于 2016-12-21T00:11:08.590 回答