2

我正在使用 Telebot ( https://github.com/eternnoir/pyTelegramBotAPI ) 创建一个机器人来向其用户发送照片。关键是我没有看到限制对这个机器人的访问的方法,因为我打算通过这个机器人共享私人图像。

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

你知道我该如何解决吗?

4

2 回答 2

1

聚会有点晚了——也许对未来的读者来说。您可以包装该函数以禁止访问。

下面的一个例子:

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

请记住,顺序很重要。首先是消息处理程序,然后是您的自定义装饰器 - 否则它将不起作用。

于 2021-07-02T17:49:11.623 回答
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)
于 2019-03-31T20:22:19.627 回答