#javascript #discord.js
#javascript #discord.js
Вопрос:
У меня есть команда waifu, где она получает изображение и имя и помещает его во встраивание, а затем реагирует с помощью 💖 emoji. Я хотел сделать так, чтобы первый человек, который нажмет на эмодзи, получал waifu.
const { Client, MessageEmbed, ReactionCollector} = require('discord.js');
const {
prefix
} = require('../../config');
const superagent = require('superagent');
const {
urlencoded
} = require('body-parser');
module.exports = {
name: 'waifu',
category: 'waifu',
description: 'Random Waifu',
usage: `${prefix}waifu`,
perms: 'Send Messages',
cooldown: 5,
run: async (bot, message, args) => {
const rating1 = 10
const rating2 = Math.floor(Math.random() * rating1)
var rating = rating2
const decimals1 = 100
const decimals2 = Math.floor(Math.random() * decimals1)
var decimals = decimals2
const compatibility1 = 100
const compatibility2 = Math.floor(Math.random() * compatibility1)
var compatibility = compatibility2
const {
waifuID
} = require("../../Database/WaifuNameDB.json")
let randW = Math.floor(Math.random() * Object.keys(waifuID).length)
let randomWaifu = waifuID[randW]
let embed2 = new MessageEmbed()
.setTitle(`🎀${randomWaifu.names}🎀`)
.addField("Claims:", `${randomWaifu.claims}`)
.addField("Rating:", `${rating}.${decimals}/10 ⭐`)
.setImage(`${randomWaifu.img_url}`, innerHeight = '500', innerWidth = '500')
.setColor('#f095d1')
.setFooter(`| Powered by: @Twintails🎀 API `, `https://64.media.tumblr.com/1a1c3bcc08b5a048b90139a56fe7f415/tumblr_o9ku1rVS8z1vnqjx7o2_250.png`)
var mg = await message.channel.send(embed2);
mg.react('💖')
message.delete()
bot.on('messageReactionAdd', async (reaction, user) => {
if (reaction.mg) await reaction.mg.fetch();
if (reaction) await reaction.fetch()
if (user.bot) return;
if (reaction.emoji.name == "💖") {
message.channel.send(`${randomWaifu.names} was claimed!`)
mg.delete()
if(user = message.author) return;
}
})
}
}
Это работает, но если, например, я делаю /waifu, он отправляет встраивание и говорит, что было заявлено (waifuname), но всякий раз, когда я снова делаю / waifu, все то же самое, но когда я нажимаю кнопку react, он говорит, что были заявлены предыдущий и текущий waifu.
https://aws1.discourse-cdn.com/business6/uploads/glitch/original/2X/9/98363d9496747899fe23698cb0f98846b1e7136c.jpeg
(Умару Дома был предыдущим вайфу, который я запустил)
Это также выдает ошибку: (node:9964) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message
Пожалуйста, помогите, если можете!
Комментарии:
1. можете ли вы объяснить
/waifu
подробнее? Я не понимаю, что вы имеете в виду, это та же строка внутри оператора require, которая захватывает json?2. Я не думаю, что что-то не так с командой json или / waifu вообще, это только часть утверждения, которая испорчена.
3. Рассматриваемый код — это функция messageReactionAdd . (Это то, что я думаю)
4. Все, что я хочу, чтобы это делало, это тот, кто первым нажимает 💖, получает waifu, а в чате написано: HK married <имя waifu>
5. о
/waifu
— это команда, которую вы вводите в чате discord, на которую реагирует ваш бот
Ответ №1:
Я нашел способ исправить это для всех!
bot.on('messageReactionAdd', (messageReaction, user) => {
if(user.bot) return;
const {
message,
emoji
} = messageReaction;
if (emoji.name === "💖") {
if (!message.id === mg.id) return;
if (message.id === mg.id) {
mg.delete()
message.channel.send(`${randomWaifu.names} was claimed!`)
}
}
});