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

discord.py如何让!say命令不@everyone/here?新手求助

问题分析

你的代码存在几个关键问题,导致无法拦截@everyone/@here:

  • 变量未定义:代码里使用了message变量,但该变量从未被定义,应使用函数参数中的msg
  • 条件判断逻辑错误:if message == "@everyone" or "@here"是错误写法,这个逻辑等价于if (message == "@everyone") or True,永远为真;且你需要的是检查消息是否包含这两个关键词,而非完全等于
  • 执行顺序颠倒:当前是先发送消息再检查违规内容,就算消息里有@everyone也已经发出去了,完全起不到拦截作用
  • 语法错误:break只能用在循环/switch结构里,这里用错了位置,同时代码缩进和冒号的写法也不符合Python规范
修正后的代码
async def say(ctx, *, msg=None):
    if msg is None:
        await ctx.send("请输入要发送的内容")
        return
    
    # 检查消息是否包含违规提及
    if "@everyone" in msg or "@here" in msg:
        await ctx.send("不能发送@everyone或@here的消息")
        await ctx.message.delete()
        return
    
    # 无违规内容则发送消息并删除原命令
    await ctx.send(msg)
    await ctx.message.delete()
额外说明
  • 把参数改成*, msg=None是为了让命令能接收带空格的完整内容,否则只能接收第一个单词
  • 先检查违规内容,确认没问题再发送,这样就能彻底拦截违规提及
  • 增加了无输入时的提示,提升使用体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:05:21