我的机器人怎样从Telegram用户那里获取一个群组ID?

3
我正在构建一个机器人,需要从用户那里接收一个群组作为输入,以便它知道用户想要执行某个X操作的群组。如何做到这一点?
我考虑使用深层链接和一些回调数据,就像投票机器人一样,但问题是我不希望用户在群组中写任何东西(是的,用户和机器人都在群组中)。
我还考虑过将来自群组(机器人所在的群组)的所有用户都放入数据库中,然后询问用户想要哪个群组,但是目前尚无法通过Telegram Bot API实现。
谢谢!
2个回答

1
你可以使用深度链接请求用户将您的机器人添加到群组;当用户选择一个群组时,您将该群组的chat_id与用户在您的数据库中的chat_id链接起来; 下次用户想执行任务时,您只需显示所有链接的群组即可。

问题在于匿名性是应用程序的一部分,这有点破坏了它。这对第一个用户有效,但对其余用户我必须侦听新用户事件,但这可能不可扩展... - Bruno Paulo

0
每个群聊和单聊都有一个chat_id,只要聊天存在,它就不会改变。要了解chat_id,您可以使用像这样的机器人。它始终会回答接收消息的聊天中的chat 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操作,则首先需要知道用户是成员的所有组。据我所知,没有办法通过telegram接收此信息。这是有道理的,否则机器人所有者可能会知道所有用户的组。我怀疑这不是任何用户想要的。

在我看来,最好的方法是让用户指定组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))

也许你可以允许为聊天ID创建别名,比如“新闻聊天”或其他容易记住的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接