Bonsoir,
J’essaie depuis un certains de temps réécrire un projet d’une manière plus propre mais je suis bloqué à fichier qui ne se comporte pas comme je le souhaitais. J’ai fait plusieurs tests mais je ne comprends pas pourquoi ça ne fonctionne pas.
Pour contextualiser, il s’agit d’un morceau de code pour un bot Discord qui s’active dès qu’un canal est modifié (qu’importe ce qui est modifié). Pour simplifier le problème, je vais en sélection un point précis : celui de la modification du nom d’un canal textuel.
Tout d’abord, on passe par le switch
où l’on vérifie de quel type est le canal. On va ensuite stocker le message à envoyer.
switch(newChannel.type) {
case 'text':
message = this.textUpdate(oldChannel, newChannel);
break;
case 'voice':
message = this.voiceUpdate(oldChannel, newChannel);
}
(Je précise que j’utilise i18next pour la gestion des chaînes de caractères.) Dans la fonction gérant la modification d’un canal textuel, on s’intéressera donc au dernier bloc.
else if (newChannel.name !== oldChannel.name) {
return message = {
content: i18n.t('events:channel.update.name.text'),
options: { oldChannel: `**#${oldChannel.name}**`, newChannel: newChannel, interpolation: { escapeValue: false }}
};
}
Une fois qu’on a les bonnes valeurs pour l’envoie du message, on le fait.
return newChannel.guild.channels.get(config.defaultChannel).send(i18n.t(message.content, message.options));
Or, voici le message que j’obtiens à la modification du titre d’un canal textuel : The text channel is now called .
Or, la chaîne de caractère est la suivante.
"text": "The text channel {{oldChannel}} is now called {{newChannel}}."
Voici le code en entier :
const { Listener } = require('discord-akairo');
const i18n = require('i18next');
const config = require ('../../config.json');
class ChannelUpdateListener extends Listener {
constructor() {
super('channelUpdate', {
emitter: 'client',
eventName: 'channelUpdate',
category: 'channel'
});
}
exec(oldChannel, newChannel) {
let message;
switch(newChannel.type) {
case 'text':
message = this.textUpdate(oldChannel, newChannel);
break;
case 'voice':
message = this.voiceUpdate(oldChannel, newChannel);
}
return newChannel.guild.channels.get(config.defaultChannel).send(i18n.t(message.content, message.options));
}
textUpdate(oldChannel, newChannel) {
let message = {};
if (newChannel.topic !== oldChannel.topic) {
const isEmpty = str => {
return (!str || 0 === str.length);
}
message.options = { channel: newChannel, interpolation: { escapeValue: false }};
if(isEmpty(newChannel.topic)) {
return message.content = i18n.t('events:channel.update.topic.remove');
} else {
return message = i18n.t('events:channel.update.topic.set');
}
} else if (newChannel.name !== oldChannel.name) {
return message = {
content: i18n.t('events:channel.update.name.text'),
options: { oldChannel: `**#${oldChannel.name}**`, newChannel: newChannel, interpolation: { escapeValue: false }}
};
}
}
voiceUpdate(oldChannel, newChannel) {
if (newChannel.name !== oldChannel.name) {
return message = {
content: i18n.t('events:channel.update.name.voice'),
options: { oldChannel: `**${oldChannel.name}**`, newChannel: newChannel, interpolation: { escapeValue: false }}
}
}
}
}
module.exports = ChannelUpdateListener
Ça fait quelque jours que je suis dessus. J’espère pourvoir passer à autre choses. Merci d’avance !