我用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 个不同的消息处理程序,用于不同的命令和状态。 因此,这将导致 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 中,则机器人不执行任何操作。处理程序的顺序很重要。这个应该是第一个