【问题标题】:How can my bot get a group id from a user on Telegram?我的机器人如何从 Telegram 上的用户那里获取组 ID?
【发布时间】:2017-01-02 13:24:41
【问题描述】:

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

我想过deep linking 有一些回调数据,就像poll-bot 一样,但问题是我不希望用户在组上写任何东西(是的,用户和机器人都在组中)。

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

谢谢!

【问题讨论】:

    标签: telegram telegram-bot python-telegram-bot


    【解决方案1】:

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

    【讨论】:

    • 问题是匿名是应用程序的一部分,这有点破坏它。这将适用于第一个用户,其余的我将不得不听新的用户事件,但这可能不是我可扩展的..
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2021-05-24
      • 2021-03-09
      • 2019-05-15
      • 1970-01-01
      • 2016-11-03
      相关资源
      最近更新 更多