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

如何开发Discord机器人:删除无指定角色用户的带附件消息

修复Discord机器人的附件消息过滤逻辑

看起来你已经抓准了核心需求,但代码里的条件判断逻辑出了问题,还有一些API使用的细节需要调整。我帮你梳理并修正一下:

首先,你的原代码逻辑写反了——你想要的是当用户既没有「机器人」角色,也没有「可信用户」角色时删除带附件的消息,但原条件的运算符和判断逻辑完全不符合这个需求。另外,Discord.py的旧版API已经被弃用,我们得用当前版本的标准写法。

修正后的完整代码

# 先替换成你服务器里实际的角色ID
BOT_ROLE_ID = "你的机器人角色ID"
TRUSTED_ROLE_ID = "你的可信用户角色ID"

@client.event
async def on_message(message):
    # 避免机器人处理自己的消息,防止循环触发
    if message.author == client.user:
        return

    # 检查消息是否包含附件
    if message.attachments:
        # 把用户的角色ID转成集合,提升查找效率
        user_role_ids = {role.id for role in message.author.roles}
        # 核心判断:用户同时缺失两个授权角色时执行操作
        if BOT_ROLE_ID not in user_role_ids and TRUSTED_ROLE_ID not in user_role_ids:
            await message.delete()
            await message.channel.send("Sorry mate only trusted members or bots can attach things to prevent spam")

    # 必须保留这句,否则机器人的其他命令会失效
    await client.process_commands(message)

关键修正说明

  • 逻辑判断修复:用and替代原代码的or,确保只有当用户同时没有两个授权角色时才触发删除操作,原逻辑会导致判断完全失效
  • API版本适配:用message.delete()和message.channel.send()替代旧的client.delete_message和client.send_message(Discord.py v2.x及以上版本要求)
  • 角色ID优化:把硬编码的角色ID抽成变量,方便后续维护;用集合存储角色ID比列表查找更快
  • 自我消息过滤:添加了对机器人自身消息的判断,避免它删除自己发送的提示消息

这样调整后,你的机器人就能准确拦截未授权用户的带附件消息了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:49