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

Java开发的Discord Ping-Pong机器人持续发送pong无法停止问题排查

解决Discord Ping-Pong机器人无限发送"pong"的问题

嘿,我一眼就揪出你代码里的问题啦——这是个新手很容易踩的小坑!

核心错误:多余的分号

看你的PingPong类里的这段代码:

if (e.getMessage().getContentRaw().equals("!ping"));{
    e.getChannel().sendMessage("pong").queue();
}

注意到if条件后面的那个分号了吗?这个分号会让if的条件判断变成一个空语句,后面的大括号代码块就变成了无条件执行的代码——不管收到的消息是不是!ping,都会发送pong。

为什么会无限循环?

当机器人发送pong之后,它自己会接收到这条频道消息(因为它是频道成员),然后再次触发onMessageReceived事件,再次执行发送pong的代码,就这样陷入了无限循环,停都停不下来!

修正后的代码

把那个多余的分号删掉就好,同时建议你加上判断,排除机器人自己发送的消息,从根源避免这类循环:

import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

public class PingPong extends ListenerAdapter{
    @Override
    public void onMessageReceived(MessageReceivedEvent e){
        // 先排除机器人自己的消息,避免触发循环
        if (e.getAuthor().isBot()) return;
        
        if (e.getMessage().getContentRaw().equals("!ping")){
            e.getChannel().sendMessage("pong").queue();
        }
    }
}

额外小提示

  • 如果你以后要做更复杂的命令,可以考虑使用JDA的CommandClient或者第三方命令框架,能更灵活地处理命令匹配
  • 用getContentRaw()判断命令虽然简单,但如果消息前后有空格就会匹配失败,也可以考虑用trim()处理一下:e.getMessage().getContentRaw().trim().equals("!ping")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:14:58