Aiogram内置IDFilter无法适配动态更新用户ID列表问题
问题
需验证消息发送者是否在“特殊”用户列表中,仅允许该列表内用户使用特定命令,遂采用Aiogram内置IDFilter实现。但该列表会动态更新,测试发现IDFilter无法识别列表更新内容:即使执行clear命令清空config.mylist,IDFilter仍能验证通过并触发secret命令;而使用lambda message: message.from_user.id in config.mylist作为过滤条件时,可正常响应列表的动态变化。询问该现象的原因。
原因分析
核心差异在于两者读取列表的时机和方式不同:
- Aiogram的IDFilter是静态缓存机制:当你创建IDFilter实例时,它会把传入的用户ID列表直接复制一份并存在内部,后续无论原列表(比如config.mylist)怎么修改、清空,IDFilter验证时只会用初始化时缓存的那份旧数据,自然无法识别动态更新。
- lambda表达式是实时动态读取:用
lambda message: message.from_user.id in config.mylist作为过滤条件时,每次有消息触发命令验证,都会实时去读取config.mylist的当前状态,所以列表的清空、新增等变化能立刻生效。
内容的提问来源于stack exchange,提问作者user19268323409273649320780470
相关产品推荐
相关产品推荐

