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

Java开发Discord机器人announce公告命令输入换行不生效问题

问题原因
  • 你的代码中使用split("\\s+")拆分用户输入时,正则匹配符\s会匹配所有空白字符,包括空格、换行符、回车符、制表符等,拆分后得到的args数组已经完全丢失了用户输入的原始换行信息。
  • 后续遍历args拼接公告内容时,你统一追加的是普通空格,因此最终输出的内容所有换行都会消失,全部合并为一行。
修复方案

不需要拆分输入内容再拼接,直接从已获取的原始消息内容中剔除命令前缀即可,完整修改后的代码如下:

@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
    String msg = event.getMessage().getContentRaw();
    // 先判断是否为无参数的命令调用
    if (msg.equalsIgnoreCase("-announce")) {
        EmbedBuilder embed = new EmbedBuilder();
        embed.setDescription("Usage: -announce <公告内容>")
                .setColor(Color.CYAN);
        event.getChannel().sendMessage(embed.build()).queue();
        embed.clear();
    } 
    // 判断是否为带内容的命令调用
    else if (msg.toLowerCase().startsWith("-announce ")) {
        try {
            TextChannel textChannel = event.getJDA().getTextChannelById("CHANNEL-ID");
            if (textChannel.canTalk()) {
                EmbedBuilder embed = new EmbedBuilder();
                // 直接截取命令前缀后的所有原始内容,保留换行等全部格式
                String message = msg.substring("-announce ".length());
                embed.setColor(Color.CYAN)
                        .setDescription(message);
                textChannel.sendMessage(embed.build()).queue();
                embed.clear();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:04