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

discord.js读取txt文件时字面量\n未解析为换行问题求解

问题根因

你txt文件里手动输入的\n是普通的字符组合(反斜杠+字母n),不是JS语法中代表换行的转义字符。fs.readFileSync读取文件时会原样保留文本内容,不会自动把这两个字符合并解析成换行符,所以最终返回的内容会直接显示1\n2,不会真的换行。

另外你现有代码还有3个容易出bug的小问题:

  • 交互回调的参数名拼错了,正确是interaction不是interation
  • 回复配置的属性名拼错了,正确是ephemeral不是emphemral,否则临时消息配置不会生效
  • 用相对路径读文件时,路径是相对于node启动时的工作目录,不是当前脚本所在目录,很容易出现找不到文件的报错

修复方案

读取文件分割内容后,额外把每一行里的字面量\n替换成真实换行符即可,同时修正上面提到的小问题,修改后的完整代码如下:

const { SlashCommandBuilder } = require(`@discordjs/builders`);
const fs = require("fs");
const path = require('path');
const scriptName = path.basename(__filename);
const command = scriptName.slice(0, -3);
// 拼接绝对路径,避免工作目录变化导致找不到文件
const file = path.resolve(__dirname, `./texts/${command}.txt`);
const text = fs.readFileSync(file, "utf-8");
// 兼容Windows和Unix换行格式分割,替换字面量\n为真实换行,过滤空行
const array = text.split(/\r?\n/)
  .map(line => line.replace(/\\n/g, '\n'))
  .filter(line => line.trim());

function getRandomItem(arr) {
  const randomIndex = Math.floor(Math.random() * arr.length);
  return arr[randomIndex];
}

module.exports = {
  data: new SlashCommandBuilder()
     .setName(command)
     .setDescription(`meeeoww??`),
  async execute(interaction) {
    interaction.reply({
      content: getRandomItem(array),
      ephemeral: true
    });
  },  
};

效果说明

修复后,txt中写的1\n2会被处理成带真实换行的字符串,Discord消息里的展示效果和你预期一致:

1
2

后续新增回复内容时,直接在txt里需要换行的位置写\n即可,代码会自动完成解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:39:19