2 votes

problème avec voiceStateUpdate en JavaScript

J'essaie de faire fonctionner ce bot discord. L'idée est simple, faire en sorte que le bot envoie une notification lorsque quelqu'un rejoint le chat vocal. Je le fais sur Atom, l'erreur que je reçois est celle-ci :

TypeError: Cannot read property 'send' of undefined
at Client.client.on (C:\Users\Franco\Desktop\bot\bot.js:15:20)
at emitTwo (events.js:126:13)
at Client.emit (events.js:214:7)
at VoiceStateUpdateHandler.handle (C:\Users\Franco\Desktop\bot\node_modules\discord.js\src\client\websocket\packets\handlers\VoiceStateUpdate.js:39:16)
at WebSocketPacketManager.handle (C:\Users\Franco\Desktop\bot\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (C:\Users\Franco\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\Franco\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\Franco\Desktop\bot\node_modules\ws\lib\event-target.js:120:16)
at emitOne (events.js:116:13)
at WebSocket.emit (events.js:211:7)

la tentative de code :

client.on("message", function(message) {
  client.on('voiceStateUpdate', (oldMember, newMember) => {
    console.log('lol');
    let newUserChannel = newMember.voiceChannel
    let oldUserChannel = oldMember.voiceChannel
    var channel = client.channels.get('353996293154144259');
    if(oldUserChannel === 353996293154144260 && newUserChannel !== 489674797261783041) {
      channel.send('has joined a voice channel');
      // User Joins a voice channel
    } else if(newUserChannel === 489674797261783041){
       channel.send('has left a voice channel');
    // User leaves a voice channel
    }
  })
})

Le fichier console.log sert juste à tester si voiceStateUpdate fonctionne.

Lorsque j'essaie de l'exécuter, j'obtiens cette erreur :

"TypeError : Impossible de lire la propriété 'send' d'undefined"

Si je comprends bien, l'erreur est due au fait que .send la fonction est indéfinie

J'ai presque tout obtenu ici :

Tout ce que j'ai essayé :

  • Añadir client.on("message", function(message) {

  • Modifier .send a .message et .sendMessage

  • essayez de définir .send

  • changer client.channels.get en lient.channelid.get

  • Modifier/supprimer var channel = client.channels.get('353996293154144259');

  • Déplacements client.on('voiceStateUpdate', (oldMember, newMember) => { de client.on("message", function(message) { Quand je fais ça, j'ai une autre erreur

"Deuxième erreur que j'ai eue quand j'ai déplacé client.on en dehors : "(node:18196) MaxListenersExceededWarning : Fuite de mémoire EventEmitter possible détectée. 11 écouteurs de messages ajoutés. Utilisez emitter.setMaxListeners() pour augmenter la limite".

Peut-être des informations inutiles :

  • 353996293154144259 = id du chat général sur le serveur discord

  • 353996293154144260 = id du premier chat vocal

  • 489674797261783041 = id du deuxième chat vocal

UPDATE

Ok, j'ai résolu une partie du problème, j'ai besoin d'utiliser message.channel.send('has joined a voice channel'); au lieu de channel.send('has joined a voice channel'); Mais je n'arrive pas à le faire fonctionner comme je le veux.


Remerciements particuliers pour YakovL. Il m'a aidé à rendre ce post plus complet et meilleur.

1voto

David Zagdal Points 11
var channel = client.channels.get('353996293154144259');

ça n'a pas marché pour moi alors j'ai utilisé ça à la place :

const channel = client.channels.cache.filter((channel) => channel.name === 'name').first();

et il serait préférable de l'utiliser mais en recherchant l'ID :

const channel = client.channels.cache.filter((channel) => channel.id === '353996293154144259').first();

0voto

Tvde1 Points 656

Remplacer

var channel = client.channelID.get('353996293154144259');

avec

var channel = client.channels.get('353996293154144259');

Editar: À partir de la version 12, c'est

var channel = client.channels.cache.get('353996293154144259');

-1voto

Pedro Points 1

Je suis brésilien, ma langue est le portugais brésilien !

const Discord = require('discord.js'),
  client = new Discord.Client(),
  colors = require('colors/safe');

client.on('voiceStateUpdate', (oldMember, newMember) => {

  let newUserChannel = newMember.channelID;
  let oldUserChannel = oldMember.channelID;
  let userid = newMember.id;

// ----------- verificação --------------

  let selfmute = newMember.mute;
  let mute = newMember.selfMute;
  let selfmute1 = oldMember.mute;
  let mute1 = oldMember.selfMute;
  let selfdeaf = newMember.selfDeaf;
  let selfdeaf1 = oldMember.selfDeaf;  
  let selfvid = newMember.selfVideo;
  let selfvid1 = oldMember.selfVideo;
  let deaf = newMember.deaf;
  let deaf1 = oldMember.deaf;
  let servmute = newMember.serverMute;
  let servmute1 = oldMember.serverMute;

  if ( selfmute == true ) return;
  if ( mute == true ) return;
  if ( selfmute1 == true ) return;
  if ( mute1 == true ) return;
  if ( selfdeaf == true ) return;
  if ( selfdeaf1 == true ) return;
  if ( selfvid == true ) return;
  if ( selfvid1 == true ) return;
  if ( deaf == true ) return;
  if ( deaf1 == true ) return;
  if ( servmute == true ) return;
  if ( servmute1 == true ) return;

// -------- definindo cores ----------

var a = colors.red('[-] ');
var b = colors.green('[+] ');
var c = colors.blue('[!] ');

// -------- menssagem / log ----------

       if ( newUserChannel === "827668874542579797") { //id voice channel

          console.log(c+"- id: "+userid)
          console.log(b+"- Entrou em: "+newUserChannel);   

       } else if ( oldUserChannel === "827668874542579797") { //id voice channel

           console.log(c+"- id: "+userid)
           console.log(a+"- Saiu de: "+oldUserChannel);

       } else {

           console.log(c+"- Ratos estão dialogando...");

       }

})
//----------------Comando pra ficar on-------------

client.login("TOKEN");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X