我正在使用 Telebot ( https://github.com/eternnoir/pyTelegramBotAPI ) 创建一个机器人来向其用户发送照片。关键是我没有看到限制对这个机器人的访问的方法,因为我打算通过这个机器人共享私人图像。
我在这个论坛上读到,通过 python-telegram-bot 有一种方法可以限制对发件人消息的访问(如何限制对 Telegram Bot 的访问),但我不知道是否可以通过 pyTelegramBotAPI。
你知道我该如何解决吗?
我正在使用 Telebot ( https://github.com/eternnoir/pyTelegramBotAPI ) 创建一个机器人来向其用户发送照片。关键是我没有看到限制对这个机器人的访问的方法,因为我打算通过这个机器人共享私人图像。
我在这个论坛上读到,通过 python-telegram-bot 有一种方法可以限制对发件人消息的访问(如何限制对 Telegram Bot 的访问),但我不知道是否可以通过 pyTelegramBotAPI。
你知道我该如何解决吗?
聚会有点晚了——也许对未来的读者来说。您可以包装该函数以禁止访问。
下面的一个例子:
from functools import wraps
def is_known_username(username):
'''
Returns a boolean if the username is known in the user-list.
'''
known_usernames = ['username1', 'username2']
return username in known_usernames
def private_access():
"""
Restrict access to the command to users allowed by the is_known_username function.
"""
def deco_restrict(f):
@wraps(f)
def f_restrict(message, *args, **kwargs):
username = message.from_user.username
if is_known_username(username):
return f(message, *args, **kwargs)
else:
bot.reply_to(message, text='Who are you? Keep on walking...')
return f_restrict # true decorator
return deco_restrict
然后,在您处理命令的地方,您可以限制对命令的访问,如下所示:
@bot.message_handler(commands=['start'])
@private_access()
def send_welcome(message):
bot.reply_to(message, "Hi and welcome")
请记住,顺序很重要。首先是消息处理程序,然后是您的自定义装饰器 - 否则它将不起作用。
最简单的方法可能是对用户 ID 进行硬编码检查。
# The allowed user id
my_user_id = '12345678'
# Handle command
@bot.message_handler(commands=['picture'])
def send_picture(message):
# Get user id from message
to_check_id = message.message_id
if my_user_id = to_check_id:
response_message = 'Pretty picture'
else:
response_message = 'Sorry, this is a private bot!'
# Send response message
bot.reply_to(message, response_message)