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 :
- https://www.reddit.com/r/discordapp/comments/6p85uf/discordjs_any_way_to_detect_when_someone_enter_a/
- https://discord.js.org/#/docs/main/stable/general/welcome
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) => {
declient.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.