【问题标题】:Discord js giveaway commandDiscord js赠品命令
【发布时间】:2021-04-02 14:56:51
【问题描述】:

我目前正在尝试创建一个 Discord.js 命令,让第一个做出反应的人赢得奖品。我现在遇到两个问题。首先,机器人正在获取通过命令输入的最后一个奖品,而不是当前奖品。其次,在机器人重启之前发送的赠品在机器人重启后将不起作用。

代码如下:

const DropModel = require('../modules/DropModel');
const { MessageEmbed, ReactionCollector } = require("discord.js")
const { COLOR, MONGO } = require("../util/BotUtil");

module.exports = {
    name: "drop",
    description: "First to react wins the giveaway!",
    async execute(message, args) {
        
        let prizes = args.slice(0).join(' ').toString()

        if (!prizes) return message.channel.send("You didn't provide a prize.");

        const newDrop = new DropModel({
            guildId: message.guild.id,
            prize: prizes,
            channelId: message.channel.id,
            createdBy: message.author,
            timeCreated: new Date(),
        });

        newDrop.save();

        let Drops = await DropModel.findOne({ guildId: message.guild.id, channelId: message.channel.id });

        if (!Drops) return;

        const { prize, createdBy } = Drops;

        const DropEmbed = new MessageEmbed()
        .setTitle(`${prize}`)
        .setDescription(`First to React with ???? wins the giveaway
        Hosted by: ${createdBy}`)
        .setColor(COLOR)
        .setTimestamp();

        const dropMsg = await message.channel.send(`???? **giveaway** ????`, DropEmbed);

        await Drops.remove();

        await dropMsg.react('????');

        const filter = (reaction, user) => !user.bot;
        const reaction = new ReactionCollector(dropMsg, filter, { max: 1 });

        reaction.on('collect', async (reaction, user) => {
            const { embeds } = dropMsg;

            const embed = embeds[0];

            embed.setTitle(`Someone called giveaway!`);
            embed.setDescription(`Winner: ${user.toString()}    
            Please contact ${createdBy} to claim your giveaway!`);
            
            await dropMsg.edit(embed);

            dropMsg.channel.send(`${user.toString()} won **${prize}**!`);
        });
    }
}

对于上述问题的任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 第2期正常。你会想要托管你的机器人,否则一旦你的机器人关闭,任何信息都会丢失
  • 正如 Elitezen 提到的,预计第二期。如果您想解决第二个问题,您需要在创建赠品时将赠品的数据保存在数据库或 JSON 文件中,并且当机器人启动时(在您的 client.on("ready") 处理程序中)您应该检查数据库/文件以查看当前是否正在运行任何赠品。如果应该运行任何赠品(意味着它们仍保存在数据库/文件中),您将需要为每个赠品重新创建反应收集器。一旦赠品结束,您需要将其从数据库/文件中删除。

标签: javascript discord discord.js bots


【解决方案1】:

您可以将赠品结束时间戳保存在 JSON 文件或任何数据库中,然后在完成后将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2021-03-20
    • 2021-04-18
    • 2021-03-10
    • 2021-11-01
    • 2021-12-13
    • 2020-11-06
    • 2021-05-02
    相关资源
    最近更新 更多