Bonjour,

Je viens de commencer la programmaton d'un bot discord et je voudrais envoyer un message à toutes les personnes qui possèdent soit le grade1 soit le grade2.... ça fait plusieurs heures que je cherche et j'arrive à un truc ainsi qui ne fonctionne pas

message.guild.members.roles.has(idrole1 || idrole2).send('message....')

Et mon but serait d'envoyer à tous les membres qui possèdent soit le grade 1 soit le grade 2 un message similaire
et si possible sans utiliser de for.

Merci de vos réponses... :)) (si vous pouviez, si ce n'est pas trop demander, expliquer votre code, car je suis vraiment nouveau et je voudrais bien pouvoir comprendre chaque détail de votre code)

8 réponses


Shizey
Réponse acceptée

Hey (c'est re moi), je ne peux pas faire grand chose avec ce morceau de code, pour envoyer des messages a des gens possédant un role ceci devrait t'aider. Pour ce que tu a fais actuellement, envoie le moment ou tu declare les roles id (ou au pire tout le code)

Hizuoh
Auteur

Re-Bonjour :) (et un grand merci pour ton aide :))

const Discord = require('discord.js');
const uchiha = new Discord.Client();

/*Préparation du bot*/ 
uchiha.on('ready', () => {
    let activity = 'By Hizuoh'
    uchiha.user.setActivity(activity)
    .then(
        console.log('Activitée mise à jour : '+ activity +' ...')
        )
    console.log('Je suis prêt !')
});

/*Attente de staff*/ 
uchiha.on('voiceStateUpdate', (oldMember, newMember) => {
    let oldChannel = oldMember.voiceChannelID
    let newChannel = newMember.voiceChannelID
    if(oldChannel !== "652212667620130841" && newChannel ==="652212667620130841") {
        console.log('Un membre est en attente de Staff !')
        /*Et ici, je voudrais mon code pour envoyer un message aux détenteurs de deux rôles*/
        }
    }
);

A défaut de pouvoir envoyer un dm à tous les membres ayant un certain rôle, j'ai codé ceci :

const channel = newMember.guild.channels.find(ch => ch.ID === '653667785653747722');
channel.send('Un ticket vous attend, @Staff')

Mais j'ai une erreur "TypeError: Cannot read property 'send' of null"
merciiii

Bonsoir.
C'est normal, étant donné que tu stockes le retour dans channel, mais tu ne vérifies pas le retour avant même d'utiliser la méthode sur la constante, donc dans le cas ou le retour est négatif, tu as forcément une erreur.

Hizuoh
Auteur

OK les gras, ça avance. J'ai réussi à envoyer le message dans un channel, reste plus qu'à l'envoyer aux personnes en mp.... merci lartak pour m'avoir mis sur la voie ;p

exemple de mon code pour ceux qui ont le même problème ^^

uchiha.on('voiceStateUpdate', (oldMember, newMember) => {
    let oldChannel = oldMember.voiceChannelID
    let newChannel = newMember.voiceChannelID
    if(oldChannel !== "652212667620130841" && newChannel ==="652212667620130841") {
        console.log('Un membre est en attente de Staff !')
        uchiha.channels.get('653667785653747722').send('Ticket by : '+ newMember);
        }
    }
);

Celui ci permet de vérifier si quelqu'un a rejoins un certain channel vocal et ensuite envoie un message dans un salon txt spécifique

je vous met le lien de la vidéo car il explique pas mal de truc, elle m'a beaucoup aidé (restez bien jusque la fin car il oublie un truc important au début (Corrigez "DiscordClient.channels('IDchannel')" par "DiscordClient.channels.get('IDchannel')")
Lien de la vidéo

Normalement, l'id de la personne equivaut a sont id de mp. En gros si tu reprend ton code :

uchiha.channels.get('653667785653747722').send('Ticket by : '+ newMember);

et que tu change l'id de ton channel par l'id de la personne, ça devrait le mp !

Hizuoh
Auteur

Ok, ça fonctionne, et as-tu une idée de comment faire pour envoyer le mp aux personnes ayant un rôle ?

Comme dit plus haut, ceci devrait t'aider à résoudre ton problème puisque si tu connais l'id tu peux aisement verifier sont role ! Courage, tu a bientôt résolue ton problème

Hizuoh
Auteur

Ha oui, excue moi :3 j'avais lu ton message hier et j'étais en train de somnoler xD je n'ai pas fait attention, merci bcppp