You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py开发Discord moderation bot反spam功能出现roles属性错误求解

错误原因

报错指向guild.roles调用,此时guild变量为None,不存在roles属性。
on_message事件会响应所有触发的消息,包含用户给bot发送的私信消息,私信场景下message.guild不存在对应服务器对象,返回值为None,直接赋值给guild变量后后续调用就会触发该报错。

修复方案

在事件逻辑最开头增加过滤规则,跳过私信和bot自身发送的消息即可:

@client.event
async def on_message(message):
    # 过滤bot自身消息 + 私信消息
    if message.author == client.user or not message.guild:
        return
    # 后续保留你原有逻辑即可
    guild = message.guild
    counter = 0
    # 剩下的原有代码...
额外优化建议
  • 当前用txt文件累计计数没有时间窗口规则,只要用户累计发满6条消息就会触发禁言,不符合反垃圾按频率检测的需求,建议改用内存字典存储用户ID和对应时间窗口内的消息时间戳列表,每次检测固定时间段内的消息数量
  • 逻辑中直接使用asyncio.sleep(20)会阻塞整个bot的事件循环,休眠期间所有其他消息都会无响应,建议改用异步后台任务处理禁言到期解除逻辑

内容的提问来源于stack exchange,提问作者realbob988

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:09:02