0

我用aiogram写了一个电报机器人。我想限制它,以便某些用户可以访问它。我读过这个问题,其中有不同电报机器人库的答案。但是对于 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在调度程序的构造函数中找到了一个可选参数,这是正确的方法吗?如果是这样,我应该如何使用它?谢谢

4

1 回答 1

0

我使用了为所有消息内容类型触发的处理程序作为第一个处理程序并检查其中的 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 中,则删除该消息后,机器人不会执行任何操作。处理程序的顺序很重要。这个应该是第一个

于 2020-08-14T10:19:46.520 回答