当我向Telegram Bot发送消息时,它没有任何问题。
我想限制访问权限,以便我和只有我才能向其发送消息。
我该怎么做?
答案 0 :(得分:5)
按字段update.message.from.id
答案 1 :(得分:4)
由于这个问题与python-telegram-bot有关,下面的信息与它有关:
当您向机器人的调度员添加处理程序时,您可以指定各种预先构建的过滤器(请参阅docs,github)或者您可以创建自定义过滤器以过滤传入的更新。
要限制对特定用户的访问,您需要在初始化处理程序时添加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))