如何限制访问电报机器人

时间:2016-02-12 17:18:26

标签: telegram-bot python-telegram-bot

当我向Telegram Bot发送消息时,它没有任何问题。

我想限制访问权限,以便我和只有我才能向其发送消息。

我该怎么做?

5 个答案:

答案 0 :(得分:5)

按字段update.message.from.id

过滤消息

答案 1 :(得分:4)

由于这个问题与python-telegram-bot有关,下面的信息与它有关:

当您向机器人的调度员添加处理程序时,您可以指定各种预先构建的过滤器(请参阅docsgithub)或者您可以创建自定义过滤器以过滤传入的更新。

要限制对特定用户的访问,您需要在初始化处理程序时添加Filters.user(username="@telegramusername"),例如:

dispatcher.add_handler(CommandHandler("start", text_callback, Filters.user(username="@username")))

此处理程序仅接受来自用户/start的用户的@username命令。

你也可以指定user-id而不是username,我强烈推荐,因为后者是非常量的,可以随着时间的推移而改变。

答案 2 :(得分:3)

与您的机器人开始对话,并向其发送消息。这将为包含消息的机器人和对话的聊天ID排队更新。

要查看最近的更新,请调用getUpdates方法。这是通过向URL https://api.telegram.org/bot $ TOKEN / getUpdates发出HTTP GET请求来完成的。其中$ TOKEN是BotFather提供的令牌。类似的东西:

"chat":{
        "id":12345,
        "first_name":"Bob",
        "last_name":"Jones",
        "username":"bjones",
        "type":"private"},
      "date":1452933785,
      "text":"Hi there, bot!"}}]}

确定聊天ID后,您可以在机器人中编写一段代码,如:

id_a = [111111,2222222,3333333,4444444,5555555]

    def handle(msg):
        chat_id = msg['chat']['id']
        command = msg['text']
        sender = msg['from']['id']
     if sender in id_a:
    [...]
     else:
           bot.sendMessage(chat_id, 'Forbidden access!')
           bot.sendMessage(chat_id, sender)

答案 3 :(得分:0)

update.message.chat_id进行过滤对我有用。 为了找到您的聊天ID,请向您的漫游器发送一条消息,然后浏览至

https://api.telegram.org/bot$TOKEN/getUpdates

其中$TOKEN是BotFather提供的机器人令牌,如fdicarlo的答案所述,您可以在json结构中找到聊天ID。

答案 4 :(得分:0)

基于python-telegram-bot代码段,可以围绕处理程序构建一个简单的包装器:

def restricted(func):
    """Restrict usage of func to allowed users only and replies if necessary"""
    @wraps(func)
    def wrapped(bot, update, *args, **kwargs):
        user_id = update.effective_user.id
        if user_id not in conf['restricted_ids']:
            print("WARNING: Unauthorized access denied for {}.".format(user_id))
            update.message.reply_text('User disallowed.')
            return  # quit function
        return func(bot, update, *args, **kwargs)
    return wrapped

其中conf['restricted_ids']可能是ID列表,例如[11111111, 22222222]

因此用法如下:

@restricted
def bot_start(bot, update):
    """Send a message when the command /start is issued"""
    update.message.reply_text('Hi! This is {} speaking.'.format(bot.username))