Discord机器人退服用户自动封禁删消息功能代码问题排查
问题分析与修复方案
第一版代码报错原因
你第一版代码中client = discord.Client没有加括号,获取的是discord.Client类本身而非实例化对象,调用@client.event装饰器时参数传递错误,就会抛出event() missing 1 required positional argument: 'coro'的报错,你第二版给discord.Client加了括号实例化,已经修复了这个问题。
第二版代码在线但无响应的原因与修复方案
1. 缺少必要的Intents权限(最高概率)
discord.py v2.0及以上版本默认关闭成员相关的网关事件推送,你需要同时在代码和Discord开发者后台开启对应权限:
- 代码中修改Client实例化逻辑,开启成员监听Intent,同时补充删除消息的配置:
import discord import os # 声明并开启需要的Intents intents = discord.Intents.default() intents.members = True # 开启成员事件监听权限 client = discord.Client(intents=intents) @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) @client.event async def on_member_remove(member: discord.Member): # delete_message_seconds最大可设为604800,即删除该用户过去7天的全部服务器消息,是Discord API支持的最大范围 await member.ban(delete_message_seconds=604800) client.run(os.getenv('DISCORD_TOKEN'))
- 前往Discord开发者平台的机器人管理页,找到「Privileged Gateway Intents」分类,打开「Server Members Intent」开关后保存设置。
2. 机器人权限不足
- 邀请机器人进入服务器时,需要勾选「Ban Members」权限,或者进入服务器角色设置,给机器人对应的角色添加封禁成员权限。
- 机器人的角色在服务器角色列表中的排序,必须高于所有你需要封禁的用户的角色,否则即使有权限也无法执行封禁操作。
3. 事件触发排查
你可以在on_member_remove函数开头添加打印日志,比如print(f"检测到用户离开:{member.id} {member.name}"),如果用户离开时控制台没有打印这条日志,说明Intents配置没有生效,事件没有推送到你的机器人;如果有日志但没有封禁,说明是权限配置问题。
4. 依赖版本排查
确认你安装的discord.py版本是v2.x,Replit默认安装的版本如果过低也会有兼容问题,可以在控制台运行pip install -U discord.py升级到最新版。
内容的提问来源于stack exchange,提问作者Takeshi567
相关产品推荐
相关产品推荐

