简体   繁体   中英

Error in the event of giving roles according to the reaction in the discord.js V12

Error

(node:6880) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'roles' of undefined
    at Client.<anonymous> (C:\Users\Pc\Desktop\RemakeTO\bot.js:307:23)
    at Client.emit (events.js:327:22)
    at WebSocketShard.onMessage (C:\Users\Pc\Desktop\RemakeTO\node_modules\discord.js\src\client\websocket\WebSocketShard.js:295:27)
    at WebSocket.onMessage (C:\Users\Pc\Desktop\RemakeTO\node_modules\ws\lib\event-target.js:132:16)
    at WebSocket.emit (events.js:315:20)
    at Receiver.receiverOnMessage (C:\Users\Pc\Desktop\RemakeTO\node_modules\ws\lib\websocket.js:825:20)
    at Receiver.emit (events.js:315:20)
    at Receiver.dataMessage (C:\Users\Pc\Desktop\RemakeTO\node_modules\ws\lib\receiver.js:437:14)
    at Receiver.getData (C:\Users\Pc\Desktop\RemakeTO\node_modules\ws\lib\receiver.js:367:17)
    at Receiver.startLoop (C:\Users\Pc\Desktop\RemakeTO\node_modules\ws\lib\receiver.js:143:22)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:6880) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:6880) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Code

/*
**** Constantes
*/

const Discord = require("discord.js"); //Aqui definimos a discord.js em nosso código, caso dê erro nessa linha, só dê npm i discord.js no console ;v
const bot     = new Discord.Client() // Aqui definimos o bot ( bot )
const config  = require("./config.js"); //Aqui definimos o config.js em nosso código, ele vai servir pro bot logar e sabermos o prefix do bot sem definir algo novamente, caso dê erro nessa linha, cheque o arquivo config.js, digitação dessa linha e se o arquivo config.js e a pasta utils existem :v
const fs      = require("fs") //Aqui definimos o fs em nosso código, ele vai servir pro nosso Handler, caso dê erro nessa linha, só dê npm i fs no console ;v

bot.commands  = new Discord.Collection();
bot.aliases   = new Discord.Collection();

/*
**** Handler
*/

fs.readdir("./comandos/", (err, files)=> { //pedimos para o fs ler a pasta comandos
    if(err) return console.log(`Houve um erro:\n${err}`); //se tiver um erro, ele não executará o que estiver abaixo e irá retornar com um log no console
    let jsfile = files.filter(f => f.split(".").pop() === "js") //aqui a gente define files para diferenciar os arquivos com .js dos sem .js
    if(jsfile.length <= 0) {
        return console.log('Não encontrei nenhum comando.')
    };
    jsfile.forEach((f, i) => { //aqui dizemos que para cada arquivo com .js na pasta, iremos fazer a seguinte coisa:
        let pull = require(`./comandos/${f}`); //iremos definir comando
        bot.commands.set(pull.config.name, pull); //iremos setar o nome do comando/local na collection comandos
        console.log(`[Carregando] > ${f}`); //aqui colocamos para que o bot envie os comandos carregados para o console
        pull.config.aliases.forEach(alias => { //aqui dizemos que para cada aliases do comand
            bot.aliases.set(alias, pull.config.name) //setar a aliases/nome do comando na collection aliases
        });
    });
});

/*
**** Primeiro Evento
*/

let status = [
    {name: `Skins no Netflix!`, type: `WATCHING`},
    {name: `a felicidade!`, type: "STREAMING", url: "https://www.twitch.tv/zpandakst_"},
    {name: `o jogo da vida!`, type: `PLAYING`},
   //{name: 'msg4', type: 'STREAMING', url: 'https://www.twitch.tv/hinami_fueguchi_'}, 
   
  ];
  
  //STREAMING = TRANSMITINDO
  //LISTENING = OUVINDO
  //PLAYING = JOGANDO
  //WATCHING = ASSISTINDO

bot.on('ready', () => {
    var embed = new Discord.MessageEmbed()
    .setTitle(`:pushpin: | Iniciando...`)
    .setDescription(`:white_small_square: | Utilitários **Iniciado** \n \n Dados: \n ▸ Usuários: ${bot.users.size} \n ▸ Canais: ${bot.channels.size}`)
    .setThumbnail(bot.user.avatarURL)
    .setTimestamp()
    bot.channels.cache.get(`814858116021616670`).send(embed);
    // bot.guilds.get(`771513497069682711`).channels.get(`814858116021616670`).send(embed)
  
    function setStatus() {
        let randomStatus = status[Math.floor(Math.random() * status.length)];
        bot.user.setPresence({game: randomStatus});
    }
  
    setStatus();
    setInterval(() => setStatus(), 7000); //{1000/1s}\{10000/10s}\{100000/1m}
  });
  
  bot.on("ready", () => {
    console.log('Estou online.')
    /*
    * PLAYING = Jogando. Exemplo - bot.user.setActivity('oi', {type: 'PLAYING'});
    * WATCHING = Assistindo. Exemplo - bot.user.setActivity('oi', {type: 'WATCHING'});
    * LISTENING = Ouvindo. Exemplo - bot.user.setActivity('oi', {type: 'LISTENING'});
    * STREAMING = Transmitindo. Exemplo - bot.user.setActivity('oi', {type: 'STREAMING', url: 'twitch'});
    */
});

/*
**** Evento Join
*/


bot.on('guildMemberAdd', guildMember =>{
    let semRegistro = guildMember.roles.cache.find(role => role.id === '818270808543723520');
    let separatorRole1 = guildMember.roles.cache.find(role => role.id === '786364288520552449');
    let separatorRole2 = guildMember.roles.cache.find(role => role.id === '786364299940593666');
    let separatorRole3 = guildMember.roles.cache.find(role => role.id === '786364304579624970');
    let separatorRole4 = guildMember.roles.cache.find(role => role.id === '786364307650379816');
    let separatorRole5 = guildMember.roles.cache.find(role => role.id === '786364310954835999');
    let separatorRole6 = guildMember.roles.cache.find(role => role.id === '786364313274679336');

    guildMember.addRole(semRegistro);
    guildMember.addRole(separatorRole1);
    guildMember.addRole(separatorRole2);
    guildMember.addRole(separatorRole3);
    guildMember.addRole(separatorRole4);
    guildMember.addRole(separatorRole5);
    guildMember.addRole(separatorRole6);
});

/*
**** Evento Message
*/

bot.on('message', async(message) => { // Sempre que ocorrer uma mensagem, esse evento é executado ;v
    if(message.author.bot) return; //Se o author da mensagem, ou seja, quem mandou a mensagem, for um bot, ele não executará o código
    if(message.channel.type === 'dm') return; //Se o canal que a mensagem foi mandada for na DM ( Direct Messages, ou seja, as mensagens privadas ), ele não executará o código
    if(message.content.includes('<@'+bot.user.id+'>')){ //Qunado algun usuário mencionar o bot ele vai mandar uma mensagem
        message.channel.send(`${message.author}, meu prefixo é \`${config.prefix}\``);
    }
    if(!message.content.startsWith(config.prefix)) return; //Se a mensagem não começar com o prefix, ele não executará o código

    let args = message.content.slice(config.prefix.length).trim().split(/ +/g); // Aqui definimos args
    let comando = args.shift().toLowerCase(); // Definição de comando
    let ma = message.content.split(' ');
    let cmd = ma[0];
    
    let commandFile = bot.commands.get(cmd.slice(config.prefix.length)) || bot.commands.get(bot.aliases.get(cmd.slice(config.prefix.length))) // Aqui definimos "cmd" para buscar os comandos na collection
    if (commandFile) commandFile.run(bot, message, args)//Se existir o comando o bot executará o comando usando a function "run"
});

/*
**** Evento Cargos Regiões
*/

bot.on('raw', async dados => {
    if(dados.t !== "MESSAGE_REACTION_ADD" && dados.t !== "MESSAGE_REACTION_REMOVE") return
    if(dados.d.message_id != "818315405143441438") return

    let servidor = bot.guilds.cache.get("771513497069682711")
    let membro = servidor.members.cache.get(dados.d.user_id)

    dados.d.mesage_id !="818315405143441438".react("")

    let cargoNRD = servidor.roles.cache.get('786364289282736128'),
        cargoNRT = servidor.roles.cache.get('786364289610809387'),
        cargoCTR = servidor.roles.cache.get('786364290672230470'),
        cargoSUL = servidor.roles.cache.get('786364291514499082'),
        cargoSDT = servidor.roles.cache.get('786364292252696576')

    if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "🌵"){
            if(membro.roles.has(membro.roles.has(cargoNRD))) return
            membro.addRole(cargoNRD)
        }else if(dados.d.emoji.name === "🌳"){
            if(membro.roles.has(cargoNRT)) return
            membro.addRole(cargoNRT)
        }else if(dados.d.emoji.id === "🇧🇷"){
            if(membro.roles.has(cargoCTR)) return
            membro.addRole(cargoCTR)
        }else if(dados.d.emoji.id === "🍷"){
            if(membro.roles.has(cargoSUL)) return
            membro.addRole(cargoSUL)
        }else if(dados.d.emoji.id === "🥁"){
            if(membro.roles.has(cargoSDT)) return
            membro.addRole(cargoSDT)
        }
    }
    if(dados.t === "MESSAGE_REACTION_REMOVE"){
        if(dados.d.emoji.id === "🌵"){
            if(membro.roles.has(cargoNRD)) return
            membro.removeRole(cargoNRD)
        }else if(dados.d.emoji.name === "🌳"){
            if(membro.roles.has(cargoNRT)) return
            membro.removeRole(cargoNRT)
        }else if(dados.d.emoji.id === "🇧🇷"){
            if(membro.roles.has(cargoCTR)) return
            membro.removeRole(cargoCTR)
        }else if(dados.d.emoji.id === "🍷"){
            if(membro.roles.has(cargoSUL)) return
            membro.removeRole(cargoSUL)
        }else if(dados.d.emoji.id === "🥁"){
            if(membro.roles.has(cargoSDT)) return
            membro.removeRole(cargoSDT)
        }
    }
})

/*
**** Evento Cargos Idades
*/

bot.on('raw', async dados => {
    if(dados.t !== "MESSAGE_REACTION_ADD" && dados.t !== "MESSAGE_REACTION_REMOVE") return
    if(dados.d.message_id != "818315637373272085") return

    let servidor = bot.guilds.cache.get("771513497069682711")
    let membro = servidor.members.cache.get(dados.d.user_id)

    let cargoI18 = servidor.roles.cache.get('786364300964134912'),
        cargoI17 = servidor.roles.cache.get('786364301660651531')

    if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "🔞"){
            if(membro.roles.has(cargoI17)) return
            membro.addRole(cargoI17)
        }else if(dados.d.emoji.id === "🍻"){
            if(membro.roles.has(cargoI18)) return
            membro.addRole(cargoI18)
        }
    }
    if(dados.t === "MESSAGE_REACTION_REMOVE"){
        if(dados.d.emoji.id === "🔞"){
            if(membro.roles.has(cargoI17)) return
            membro.removeRole(cargoI17)
        }else if(dados.d.emoji.name === "🍻"){
            if(membro.roles.has(cargoI18)) return
            membro.removeRole(cargoI18)
        }
    }
})

/*
**** Evento Cargos Relacionamentos
*/

bot.on('raw', async dados => {
    if(dados.t !== "MESSAGE_REACTION_ADD" && dados.t !== "MESSAGE_REACTION_REMOVE") return
    if(dados.d.message_id != "818316026063749130") return

    let servidor = bot.guilds.cache.get("771513497069682711")
    let membro = servidor.members.cache.get(dados.d.user_id)

    let cargoCSD = servidor.roles.cache.get('786364305289117716'),
        cargoNMR = servidor.roles.cache.get('786364306068996196'),
        cargoSLT = servidor.roles.cache.get('786364306954256384')

    if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "💍"){
            if(membro.roles.has(membro.roles.has(cargoCSD))) return
            membro.addRole(cargoCSD)
        }else if(dados.d.emoji.name === "💌"){
            if(membro.roles.has(cargoNMR)) return
            membro.addRole(cargoNMR)
        }else if(dados.d.emoji.id === "🖖🏻"){
            if(membro.roles.has(cargoSLT)) return
            membro.addRole(cargoSLT)
        }
    }
    if(dados.t === "MESSAGE_REACTION_REMOVE"){
        if(dados.d.emoji.id === "💍"){
            if(membro.roles.has(cargoCSD)) return
            membro.removeRole(cargoCSD)
        }else if(dados.d.emoji.name === "💌"){
            if(membro.roles.has(cargoNMR)) return
            membro.removeRole(cargoNMR)
        }else if(dados.d.emoji.id === "🖖🏻"){
            if(membro.roles.has(cargoSLT)) return
            membro.removeRole(cargoSLT)
        }
    }
})

/*
**** Evento Cargos Sexualidades
*/

bot.on('raw', async dados => {
    if(dados.t !== "MESSAGE_REACTION_ADD" && dados.t !== "MESSAGE_REACTION_REMOVE") return
    if(dados.d.message_id != "818316240077586504") return

    let servidor = bot.guilds.cache.get("771513497069682711")
    let membro = servidor.members.cache.get(dados.d.user_id)

    let cargoLGB = servidor.roles.cache.get('786364308061159466'),
        cargoHET = servidor.roles.cache.get('786364309093613588')

    if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "🏳️‍🌈"){
            if(membro.roles.has(membro.roles.has(cargoLGB))) return
            membro.addRole(cargoLGB)
        }else if(dados.d.emoji.name === "👩‍❤️‍👨"){
            if(membro.roles.has(cargoHET)) return
            membro.addRole(cargoHET)
        }
    }
    if(dados.t === "MESSAGE_REACTION_REMOVE"){
        if(dados.d.emoji.id === "🏳️‍🌈"){
            if(membro.roles.has(cargoLGB)) return
            membro.removeRole(cargoLGB)
        }else if(dados.d.emoji.name === "👩‍❤️‍👨"){
            if(membro.roles.has(cargoHET)) return
            membro.removeRole(cargoHET)
        }
    }
})

/*
**** Evento Cargos Gêneros
*/

bot.on('raw', async dados => {
    if(dados.t !== "MESSAGE_REACTION_ADD" && dados.t !== "MESSAGE_REACTION_REMOVE") return
    if(dados.d.message_id != "818316443937407016") return

    let servidor = bot.guilds.cache.get("771513497069682711")
    let membro = servidor.members.cache.get(dados.d.user_id)

    let cargoMLR = servidor.roles.cache.get('786364311794483200'),
        cargoHOM = servidor.roles.cache.get('786364312066588705')

    if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "🚺"){
            if(membro.roles.has(membro.roles.has(cargoMLR))) return
            membro.addRole(cargoMLR)
        }else if(dados.d.emoji.name === "🚹"){
            if(membro.roles.has(cargoHOM)) return
            membro.addRole(cargoHOM)
        }
    }
    if(dados.t === "MESSAGE_REACTION_REMOVE"){
        if(dados.d.emoji.id === "🚺"){
            if(membro.roles.has(cargoMLR)) return
            membro.removeRole(cargoMLR)
        }else if(dados.d.emoji.name === "🚹"){
            if(membro.roles.has(cargoHOM)) return
            membro.removeRole(cargoHOM)
        }
    }
})
//Login

bot.login(config.token);

Error in the event of giving roles according to the reaction in the discord.js V12. Have I tried using the member.roles.cache.some(cargoHOM) method? This new version of discord.js confused me a lot. Am I going crazy? Maybe, it must just be a stupid mistake that I unfortunately didn't realize

So I was looking at code and search for problem but Iam a bit confused

if(dados.t === "MESSAGE_REACTION_ADD"){
        if(dados.d.emoji.id === "🚺"){
            if(membro.roles.has(membro.roles.has(cargoMLR))) return //function in function?
            membro.addRole(cargoMLR)
        }else if(dados.d.emoji.name === "🚹"){
            if(membro.roles.has(cargoHOM)) return //another way?
            membro.addRole(cargoHOM)
        }
    }

But I think that I found your problem It looks like bot don't know this role. Line 299-300

let cargoMLR = servidor.roles.cache.get('786364311794483200');
let cargoHOM = servidor.roles.cache.get('786364312066588705');

Please give feedback If it solves your problem:D

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM