You need to enable JavaScript to run this app. Discord机器人退服用户自动封禁删消息功能代码问题排查
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 02:15:04