Giveaway命令不会保存(Heroku)discord.js



我正在制作一个赠品命令,但每当我在heroku中重新启动所有dynos时,赠品似乎就冻结了(永远不会结束赠品(,当我这样做的时候!gdelete{messageid}它说,{messageid}不知道为什么以及如何修复它。我尝试过使用quick.db,但仍然是一样的,我对heroku和编码discordbot很陌生。我使用node.js

const { GiveawaysManager } = require("discord-giveaways");
const manager = new GiveawaysManager(bot, {
storage: "./giveaways.json",
updateCountdownEvery: 10000,
default: {
botsCanWin: false,
embedColor: "#FF0000",
reaction: "🎉"
}
})
bot.giveawaysManager = manager;

这是代码

gstart命令如下:https://pastebin.com/9tBjpVEY

问题是由Heroku引起的,当您不运行应用程序时,Heroku不存储本地文件。每次重新启动dyno Heroku时,都会删除所有内容并重新构建:这意味着,如果在重新启动时将文件保存在本地,它们就会被删除。

若要解决此问题,您需要切换到其他服务,或者为文件创建某种形式的备份
您也可以使用远程数据库,但我不知道如何使用discord-giveaways包来实现。

我遇到了同样的问题,我认为这样做可以解决:

不使用quick.db,您可以使用quickmongo,它与quick.db一样,discord-giveaways也有一个示例。尽管有一个更改需要进行。quickmongo的例子还显示了一种本地存储文件的方法,但不是键入localhost字符串,而是将其替换为MongoDB集群的MongoDB Compass连接字符串,并为新集合提供相同的名称,即giveaways

为了获得连接字符串,请登录您的MongoDB帐户并创建一个集群。创建集群后,单击集群上的连接按钮,然后选择Connect using MongoDB Compass。从那里你会看到一个连接字符串。将该字符串复制并粘贴到本地主机字符串所在的位置。然后将<password>替换为您的帐户密码,即您的用户名密码。另外,将末尾的test替换为giveaways,就可以开始了。运行代码后,您还会在集群内的Collections选项卡中看到一个名为giveaways的集合。

示例:

const db = new Database('connectionLink/giveaways');
db.once('ready', async () => {
if ((await db.get('giveaways')) === null) await db.set('giveaways', []);
console.log('Giveaway Database Loaded');
});

最新更新