如何将 Telegram 机器人的使用限制为仅供某些用户使用?
How can I restrict a Telegram bot's use to some users only?
我正在 python 中使用 python-telegram-bot
库为 python3.x 编写一个 Telegram 机器人,它是一个供私人使用的机器人 仅(我和一些亲戚),所以我想阻止其他用户使用它。我的想法是创建一个授权用户 ID 列表,并且机器人不得回复从不在列表中的用户收到的消息。我该怎么做?
编辑: 我对 python 和 python-telegram-bot
都是新手。如果可能的话,我会很感激代码片段作为示例 =).
使用聊天ID。用你想要允许的聊天 ID 创建一个小列表,你可以忽略其余的。
A link 到可以找到细节的文档
https://python-telegram-bot.readthedocs.io/en/stable/telegram.chat.html
我发现 a solution from the official wiki 的库使用了装饰器。代码:
from functools import wraps
LIST_OF_ADMINS = [12345678, 87654321] # List of user_id of authorized users
def restricted(func):
@wraps(func)
def wrapped(update, context, *args, **kwargs):
user_id = update.effective_user.id
if user_id not in LIST_OF_ADMINS:
print("Unauthorized access denied for {}.".format(user_id))
return
return func(update, context, *args, **kwargs)
return wrapped
@restricted
def my_handler(update, context):
pass # only accessible if `user_id` is in `LIST_OF_ADMINS`.
我只是@restricted
每个函数。
admins=[123456,456789]
if update.message.from_user.id in admins:
update.message.reply_text('You are authorized to use this BOT!')
else:
update.message.reply_text('You are not authorized to access this BOT')
您还可以创建自定义处理程序来限制正在执行的消息处理程序。
import telegram
from telegram import Update
from telegram.ext import Handler
admin_ids = [123456, 456789, 1231515]
class AdminHandler(Handler):
def __init__(self):
super().__init__(self.cb)
def cb(self, update: telegram.Update, context):
update.message.reply_text('Unauthorized access')
def check_update(self, update: telegram.update.Update):
if update.message is None or update.message.from_user.id not in admin_ids:
return True
return False
只需确保将 AdminHandler
注册为第一个处理程序:
dispatcher.add_handler(AdminHandler())
现在,如果不是来自授权用户 (admin_ids
),机器人收到的所有更新(或消息)都将被拒绝。
...
admins = ['123456', '565825', '2514588']
user = message.from_user.id
if user in admins:
...
我正在 python 中使用 python-telegram-bot
库为 python3.x 编写一个 Telegram 机器人,它是一个供私人使用的机器人 仅(我和一些亲戚),所以我想阻止其他用户使用它。我的想法是创建一个授权用户 ID 列表,并且机器人不得回复从不在列表中的用户收到的消息。我该怎么做?
编辑: 我对 python 和 python-telegram-bot
都是新手。如果可能的话,我会很感激代码片段作为示例 =).
使用聊天ID。用你想要允许的聊天 ID 创建一个小列表,你可以忽略其余的。
A link 到可以找到细节的文档 https://python-telegram-bot.readthedocs.io/en/stable/telegram.chat.html
我发现 a solution from the official wiki 的库使用了装饰器。代码:
from functools import wraps
LIST_OF_ADMINS = [12345678, 87654321] # List of user_id of authorized users
def restricted(func):
@wraps(func)
def wrapped(update, context, *args, **kwargs):
user_id = update.effective_user.id
if user_id not in LIST_OF_ADMINS:
print("Unauthorized access denied for {}.".format(user_id))
return
return func(update, context, *args, **kwargs)
return wrapped
@restricted
def my_handler(update, context):
pass # only accessible if `user_id` is in `LIST_OF_ADMINS`.
我只是@restricted
每个函数。
admins=[123456,456789]
if update.message.from_user.id in admins:
update.message.reply_text('You are authorized to use this BOT!')
else:
update.message.reply_text('You are not authorized to access this BOT')
您还可以创建自定义处理程序来限制正在执行的消息处理程序。
import telegram
from telegram import Update
from telegram.ext import Handler
admin_ids = [123456, 456789, 1231515]
class AdminHandler(Handler):
def __init__(self):
super().__init__(self.cb)
def cb(self, update: telegram.Update, context):
update.message.reply_text('Unauthorized access')
def check_update(self, update: telegram.update.Update):
if update.message is None or update.message.from_user.id not in admin_ids:
return True
return False
只需确保将 AdminHandler
注册为第一个处理程序:
dispatcher.add_handler(AdminHandler())
现在,如果不是来自授权用户 (admin_ids
),机器人收到的所有更新(或消息)都将被拒绝。
...
admins = ['123456', '565825', '2514588']
user = message.from_user.id
if user in admins:
...