如何让Telegram自动回复Bot不回复特定用户?(Python实现)
解决Telegram Bot不回复特定用户的问题
你原代码里的 user_id = not(userlist) 写法是错误的,user_id 过滤器不支持这种反向排除的语法,下面给你两种可行的实现方式:
方法一:在处理函数内部判断拦截
直接在回复逻辑前检查用户ID,如果是需要排除的用户就跳过回复:
@dp.message_handler(content_types=['text', 'video', 'audio', 'photo', 'document', 'voice', 'animation'], is_forwarded=False) async def check(message): # 如果用户ID在排除列表里,直接返回不处理 if message.from_user.id in userlist: return # 其他用户正常回复 await message.reply("Thank you for your enquiry.")
方法二:用自定义过滤器在装饰器中拦截
利用user_id过滤器支持lambda函数的特性,直接在装饰器里排除目标用户:
@dp.message_handler(content_types=['text', 'video', 'audio', 'photo', 'document', 'voice', 'animation'], is_forwarded=False, # 只处理不在排除列表里的用户 user_id=lambda user_id: user_id not in userlist) async def check(message): await message.reply("Thank you for your enquiry.")
另外注意你原代码里的字符串有语法错误:"Thank you for your enquiry.) 少了一个闭合的双引号,记得修正,否则会触发代码报错。
内容的提问来源于stack exchange,提问作者Riley Zhuo
相关产品推荐
相关产品推荐

