Discord js赠品命令

Posted

技术标签:

【中文标题】Discord js赠品命令【英文标题】:Discord js giveaway command 【发布时间】: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") 处理程序中)您应该检查数据库/文件以查看当前是否正在运行任何赠品。如果应该运行任何赠品(意味着它们仍保存在数据库/文件中),您将需要为每个赠品重新创建反应收集器。一旦赠品结束,您需要将其从数据库/文件中删除。 【参考方案1】:

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

【讨论】:

以上是关于Discord js赠品命令的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js Bot 赠品命令:.array() 不是函数

剪切 Discord 消息的特定部分?不和谐.js

Discord.js - 随机获取一个有反应的用户

Discord 仅识别 discord.js 中的“ping”命令

使用 Discord 按钮的建议命令 Discord.JS

Discord.js 和 discord.js-commando 防止命令在特定通道中运行