如何在pyTelegramBotAPI中将访问权限限制为少数用户?

时间:2019-03-31 03:54:01

标签: python bots telegram telegram-bot

我正在使用Telebot(https://github.com/eternnoir/pyTelegramBotAPI)创建一个可以将照片发送给其用户的机器人。关键是我没有打算限制对该机器人的访问,因为我打算通过该机器人共享私有映像。

我在这个论坛上读到,通过python-telegram-bot有一种方法可以限制发件人消息(How To Limit Access To A Telegram Bot)的访问,但是我不知道是否可以通过pyTelegramBotAPI做到这一点。

你知道我该怎么解决吗?

2 个答案:

答案 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")

请记住,订单很重要。首先是消息处理程序,然后是您的自定义装饰器 - 否则它将无法工作。