Discord.js无法使用集成表情符号而不是自定义表情符号

时间:2020-04-19 01:35:45

标签: javascript mysql discord.js emoji

我试图将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));
    });
});

0 个答案:

没有答案