python 限制对电报Bot的访问

wn9m85ua  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(157)

我用aiogram写了一个telegraph bot。我想限制它,以便某些特定用户可以访问它。我读过this question,它有不同telegraph bot库的答案。但是对于aigram,我找到的唯一解决方案是添加一个“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检查。难道没有更简单的方法来完成吗?
我在dispatcher的构造函数中发现了一个可选的filters_factory参数,这是正确的方法吗?如果是,我应该如何使用它?谢谢

s4chpxco

s4chpxco1#

我使用了所有消息内容类型都能触发的处理程序作为第一个处理程序,并检查了其中的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中,bot什么也不做。处理程序的顺序很重要。这个应该是第一个

相关问题