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() 不是函数