我试图将Discord表情符号保存到MySQL数据库中并对消息做出反应以进行角色反应,但是它无法保存到MySQL中并在相同条件下做出反应。我需要将其保存到MySQL,以使其在重新启动后仍然有效。我用\尝试了许多不同的方法,希望它可以解决一些MySQL仇恨,但是没有任何效果,我可以做些什么来保存它,使其可以对保存的数据做出反应?
//index.js
const Discord = require("discord.js");
const bot = Discord.Client();
const mysql = require("mysql");
let db = "Database code, hidden for security";
let language = require("./lang/en_US.json");
commands.get("role").run(Discord,bot,db,language)
//role.js
let emoji;
if(message.guild.emojis.find( e => e == args[4])) emoji = message.guild.emojis.find( e => e == args[4]);
else emoji = args[4];
if(!emoji) return message.reply(language.errorInvalidEmoji);
let role;
if(args[5]) {
if(!message.mentions.roles.first()) {
if(isNaN(args[5])) role = message.guild.roles.find(r => r.name.toLowerCase() == Largs.slice(5).join(" "));
else role = message.guild.roles.get(args[5]);
} else if(message.mentions.roles.first()) {
if(!args[5].startsWith('<@&') || !args[5].endsWith('>')) role = message.guild.roles.find(r => r.name.toLowerCase() == Largs.slice(5).join(" "));
else if(args[5].startsWith('<@&') && args[5].endsWith('>')) role = message.guild.roles.get(args[5].slice(3, -1));
else return message.reply(language.errorMentionRole);
} else return message.reply(language.errorMentionRole);
} else return message.reply(language.errorMentionRole);
if(!role) return message.reply(language.errorNoRole.replace('$role', args.slice(5).join(" ")));
if((role.position >= message.guild.members.get(message.author.id).highestRole.position && message.author.id !== message.guild.ownerID) || role.position >= message.guild.me.highestRole.position) return message.reply(language.errorUnauthorizedRole);
db.query(`SELECT * FROM reaction_roles WHERE guild = '${message.guild.id}' AND channel = '${channel.id}' AND message = '${msg.id}' AND emoji = '\\${emoji}'`, async function(err, result) {
if(err) throw err;
if(result != 0) return message.reply(language.errorRoleRepeated);
msg.react(emoji);
db.query(`INSERT INTO reaction_roles (guild, channel, message, emoji, role) VALUE ('${message.guild.id}', '${channel.id}', '${msg.id}', '\\${emoji}', '${role.id}')`, async function(err) {
if(err) throw err;
let reactor = new Discord.ReactionCollector(msg, reaction => reaction.emoji == emoji);
let clear = setInterval(async function() {
db.query(`SELECT * FROM reaction_roles WHERE guild = '${message.guild.id}' AND channel = '${channel.id}' AND message = '${msg.id}' AND emoji = '\\${emoji}' AND role = '${role.id}'`, async function(err, result) {
if(err) throw err;
if(result == 0) {
reactor.stop();
clearInterval(clear);
}
});
}, 500)
reactor.on("collect", async reaction => {
if(reaction.users.last().bot) return;
if(!msg || !emoji || !role || !channel || !guild) {
db.query(`DELETE FROM reaction_roles WHERE guild = '${message.guild.id}' AND role = '${role.id}' AND channel = '${channel.id}' AND message = '${msg.id}' AND emoji = '\\${emoji}'`, async function(err) {
if(err) throw err;
});
}
if(message.guild.members.get(reaction.users.last().id).roles.has(role.id)) {
message.guild.members.get(reaction.users.last().id).removeRole(role.id);
msg.reactions.find(e => e.emoji == emoji).remove(reaction.users.last());
} else {
message.guild.members.get(reaction.users.last().id).addRole(role.id);
msg.reactions.find(e => e.emoji == emoji).remove(reaction.users.last());
}
});
message.reply(language.reactionRoleSuccessful.replace('$role', role).replace('$emoji', emoji));
});
});