#javascript #discord #discord.js #chatbot
Вопрос:
Я пытаюсь закодировать роли реакции в своем боте, но у меня возникли проблемы с идентификаторами сообщений и идентификаторами реакции. Проблема, с которой я сталкиваюсь, заключается в том, что message.id когда я впервые публикую это сообщение, оно как-то отличается от reaction.message.id о том, когда кто-то реагирует на сообщение, даже если это точно такое же сообщение. Есть ли какая-либо причина, по которой идентификатор сообщения каким-то образом меняется с момента публикации сообщения на реакцию пользователей? Вот мой код.
async function ReactionRoles(client){
client.on("messageReactionAdd", async (reaction, user) => {
acceptablerankemojis = ["Radiant_Valorant", "Immortal_Valorant", "Diamond_Valorant", "Platinium_Valorant", "Gold_Valorant", "Silver_Valorant", "Bronze_Valorant", "Iron_Valorant"]
if (reaction.message.partial){await reaction.message.fetch()};
if (reaction.partial){await reaction.fetch()};
if (user.bot == true) {return};
if (!reaction.message.guild) {return};
if (acceptablerankemojis.includes(reaction.emoji.name) == false){
user.send(`**That is not a valid reaction, please only use the reactions listed.**`)
reaction.remove().catch(error => {
console.log("There was an error removing the reactions.")
})
}
const getMessage = await reactionScheme.find({
}, {
name: 1,
guildId: 1,
channelId: 1,
messageId: 1
})
getMessage.forEach(async element => {
console.log("Arrived between")
console.log(element.messageId)
console.log(reaction.message.id)
if (element.messageId == reaction.message.id){
console.log("Arrived2")
var name = element.name
var guildId = element.guildId
switch (name){
case "ValorantRanks":
switch(guildId){
case "814021508052942870":
console.log("Arrived 3")
const radiantrole = reaction.message.guild.roles.cache.find(role => role.name === "Radiant");
const immortalrole = reaction.message.guild.roles.cache.find(role => role.name === "Immortal");
const diamondrole = reaction.message.guild.roles.cache.find(role => role.name === "Diamond");
const platinumrole = reaction.message.guild.roles.cache.find(role => role.name === "Platinum");
const goldrole = reaction.message.guild.roles.cache.find(role => role.name === "Gold");
const silverrole = reaction.message.guild.roles.cache.find(role => role.name === "Silver");
const bronzerole = reaction.message.guild.roles.cache.find(role => role.name === "Bronze");
const ironrole = reaction.message.guild.roles.cache.find(role => role.name === "Iron");
switch(reaction.emoji.name){
case "Radiant_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(radiantrole)
break
case "Immortal_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(immortalrole)
break
case "Diamond_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(diamondrole)
break
case "Platinium_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(platinumrole)
break
case "Gold_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(goldrole)
break
case "Silver_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(silverrole)
break
case "Bronze_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(bronzerole)
break
case "Iron_Valorant":
await reaction.message.guild.members.cache.get(user.id).roles.add(ironrole)
break
}
break
}
break
}
}
});
})
}
Комментарии:
1. Что такое определение
reactionScheme
?2. reactionScheme-это схема из MongoDB, которую я использую для хранения идентификатора гильдии, идентификатора канала и идентификатора сообщения