限制对电报机器人的访问

Limit Access to a Telegram Bot

我使用 aiogram. I want to restrict it so some certain users can access it. I've read this question 编写了一个电报机器人,它有针对不同电报机器人库的答案。但是对于 aiogram,我发现的唯一解决方案是添加一个“if 条件”来检查发件人的用户 ID 并以正确的文本进行响应。例如:

allowed_ids = [111111,2222222,3333333,4444444,5555555]

def handle(msg):
    sender = msg.from_user['id']
 if sender in allowed_ids:
       [...]
 else:
       bot.sendMessage(chat_id, 'Forbidden access!')
       bot.sendMessage(chat_id, sender)

此解决方案的问题是我必须检查每个事件的发件人 ID!对于不同的命令和状态,我有 10 种不同的 message_handler。所以这会导致 10 个类似的 if 检查。没有更简单的方法吗?

我在调度程序的构造函数中发现了一个可选的 filters_factory 参数,这是执行此操作的正确方法吗?如果是这样,我应该如何使用它? 谢谢

我使用了针对所有消息内容类型触发的处理程序作为第一个处理程序,并在其中检查 message.from_user.id:

acl = (111111111,)

admin_only = lambda message: message.from_user.id not in acl


@dp.message_handler(admin_only, content_types=['any'])
async def handle_unwanted_users(message: types.Message):
    await config.bot.delete_message(message.chat.id, message.message_id)
    return

如果用户 ID 不在 acl 中,则删除该消息后机器人将不执行任何操作。处理程序的顺序很重要。这个应该是第一个