建议的数据库解决方案对于这项任务来说似乎有点矫枉过正。您是否考虑过使用dotenv?
配置 dotenv 后,您可以在应用程序根目录的 .env 中声明一个 VOLUME 变量:VOLUME=20
然后,您可以在应用程序的任何地方访问此值。看来您正在使用serverQueue.connection.dispatcher.setVolume() 方法来设置音量。
您现在可以在播放音频之前执行serverQueue.connection.dispatcher.setVolume(process.env.VOLUME) 以确保始终设置正确的值(在此上下文中,process.env.VOLUME === 20)
现在,更改此值的函数将变得像process.env.VOLUME = args[1] / 100 一样简单。这将更新“VOLUME”变量:下次引用 process.env.VOLUME 时,它将具有新值,因此最好保留 args[1] 的输入验证(仍应为 1-100 范围内的数字)。
使用此方法,当您退出进程 (Ctrl + C) 并重新启动它时,VOLUME 变量将使用您在 .env 文件中声明的值重新初始化(本例中为 20)
我相信这个解决方案更轻便,更适合您的需求,因为您应该已经在使用 dotenv 来保护您的 Discord API 密钥。
但是,如果除了 VOLUME 变量之外,您还有很多其他信息需要保留,aDeveloper 提到的解决方案(Keyv 额外依赖项)可能更适合。
Example of discord.js bot using dotenv,如果你需要一个例子来配置你的。
Here你可以看到一个硬编码的volume值:如果你克隆repo,在.env文件中添加VOLUME=50并将我的硬编码0.5替换为process.env.VOLUME / 100,它的工作原理完全一样。
/编辑
回答您的评论后,我将尝试恢复您必须采取的按时间顺序排列的步骤:
- 按照自述文件中的说明安装
dotenv 模块
- 在我们应用的根目录下创建一个
.env 文件
- 在该文件中,声明一个 VOLUME 变量:
VOLUME=20
- 将
require("dotenv").config(); 放入应用程序的入口点,如我在example 中所示
- 启动您的机器人并确保
dotenv 正常工作,方法是将 console.log("VOLUME = ", process.env.VOLUME); 放在您可以通过 Discord 轻松调用的任何命令中
- 调用该命令:您应该会在终端中看到您的 console.log。
- 如果
VOLUME = undefined,您在设置中遗漏了某些内容。重读他们的 README,重温我的例子,你应该明白了。
- 如果
VOLUME = 20,你很好,这意味着 VOLUME 变量已经初始化并且现在存在于你的应用程序中。
- 您现在可以在应用程序的任何位置访问此变量 (process.env.VOLUME)。
- 您可以使用
process.env.VOLUME 访问它的值,就像使用console.log 一样。现在唯一的区别是您将此值传递给用于设置音量的方法(即我读过的 serverQueue.connection.dispatcher.setVolume()),而不是 console.log() 方法。
- 您还可以通过
process.env.VOLUME = newValue 更改其值。这样做会将newValue 分配给您的 VOLUME 变量。
- 下次您访问
process.env.VOLUME 时,它将具有您分配给它的最后一个值:这就是您“保存音量设置”的方式。
- 只要您的应用程序运行,VOLUME 变量就会以您设置的值存在。
- 如果你杀死并重新启动你的机器人,
process.env.VOLUME 将再次等于 20。那是因为您在 .env 文件中声明了这一点。
- 这就是
require("dotenv").config() 方法的作用,以及为什么应该在您的应用程序一开始就调用它:该方法将读取您的.env 文件,并将值分配给process.env.YOURCHOSENKEYWORDS。
- 注意:如果您希望即使重新启动机器人也保留最后一个卷集,则此解决方案将无法执行,您必须写入和读取本地 JSON 文件,或采用建议的数据库路由根据第一条评论
完成此操作后,下一步就是在 .env 文件中声明 Discord API 密钥,而不是对其进行硬编码。但这将是另一天/问题