我正在使用Telebot(https://github.com/eternnoir/pyTelegramBotAPI)创建一个可以将照片发送给其用户的机器人。关键是我没有打算限制对该机器人的访问,因为我打算通过该机器人共享私有映像。
我在这个论坛上读到,通过python-telegram-bot有一种方法可以限制发件人消息(How To Limit Access To A Telegram Bot)的访问,但是我不知道是否可以通过pyTelegramBotAPI做到这一点。
你知道我该怎么解决吗?
答案 0 :(得分:0)
最简单的方法可能是对用户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)
答案 1 :(得分:0)
聚会有点晚了 - 也许是为了未来的帖子读者。您可以包装函数以禁止访问。
以下示例:
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")
请记住,订单很重要。首先是消息处理程序,然后是您的自定义装饰器 - 否则它将无法工作。