我的机器人如何从Telegram上的用户那里获得组ID?

时间:2016-08-26 00:30:47

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

我正在建立一个机器人,它必须接收一个组作为用户的输入,以便它知道用户想要做什么组的X动作。怎么做?

我认为deep linking有一些回调数据就像poll-bot那样,但问题是我不希望用户在组上写任何东西(是的,用户和僵尸程序)在小组中。)

我还考虑过向一个组(机器人所在的位置)的所有用户提供数据库,然后询问用户他想要哪个组,但仍然没有办法用电报机器人API。

谢谢!

2 个答案:

答案 0 :(得分: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创建别名,例如“新闻聊天”或易于记忆的内容。

答案 1 :(得分:0)

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