Discord.js修改JSON语言配置后help命令未同步更新的问题
解决Discord.js中修改lang.json后help命令不切换语言的问题
问题原因
Node.js 的 require() 函数会将加载的模块缓存到内存中。机器人启动后第一次加载 lang.json 后,后续代码会直接使用缓存里的旧数据,即使你手动修改了文件内容,也不会自动读取新的配置。
解决方案
每次执行 help 命令时,直接读取 lang.json 文件的最新内容,而不是依赖 require 的缓存。可以使用 Node.js 的 fs 模块来实现:
修改后的代码
const fs = require('fs'); const path = require('path'); module.exports = { name: "help", description: "For see help", execute(client, message){ // 构建lang.json的完整路径,避免相对路径出错 const langFilePath = path.join(__dirname, '../data/lang.json'); // 读取文件内容并解析为JSON对象 const langFileContent = fs.readFileSync(langFilePath, 'utf8'); const lang = JSON.parse(langFileContent); const serverId = message.guild.id; if (lang[serverId] === "fa"){ const faEmbed = new client.MessageEmbed() .setAuthor("سلام") .setDescription(`چطور میتونم کمکتون کنم؟`); message.channel.send(faEmbed); } else if (lang[serverId] === "en") { const enEmbed = new client.MessageEmbed() .setAuthor("Hi") .setDescription(`How can I help you?`); message.channel.send(enEmbed); } } }
额外说明
- 使用
path.join()构建文件路径可以避免不同操作系统下的路径格式问题,比直接写相对路径更可靠。 readFileSync是同步读取方法,对于小体积的配置文件来说,性能影响可以忽略,代码写法也更简洁。如果需要处理大文件,可以改用异步的fs.readFile()配合 Promise 或回调函数。- 代码中改用
client.MessageEmbed是因为原代码可能没有显式引入Discord模块,通过传入的client实例调用更稳妥。
内容的提问来源于stack exchange,提问作者Mahbod Yaghobi
相关产品推荐
相关产品推荐

