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
相关产品推荐
相关产品推荐

