#javascript-typescript

1 messages · Page 50 of 1

red snow
#

Non

slim anvil
#

No

#

La ou tu as déclaré ton event de new message

#

après cette event tu déclares celui du reactionAdd

oak turret
#

new message = event message ?

keen narwhal
#
Enzo, si je veux que le script se lance à 00h00 je dois faire var date = new Date(****, **, **, 0, 0, 0);
#

?

slim anvil
#

Non Lartaxx, je saisi pas ce que tu comprends pas la

oak turret
#

Je vois pas de quel event tu parles en fait

#

j'ai pas d'event new message

slim anvil
#

ton évent pour détecter un nouveau message

oak turret
#

celui-là donc client.on("message", async message => {

slim anvil
#

Yes

oak turret
#

oui voilà ^^

slim anvil
#

Tu mets ton évent messageReactionAdd au même endroit, juste après celui ci

#

bah c’est bien ton évent de new message c’est@bien ce que je dis 🤔

oak turret
#

oui mais j'ai dis l'event "message" t'as dis non :x

slim anvil
#

Ahh on s’est mal compris

oak turret
#

Du coup sur mon event je define args command etc ?

#

car je la fais dedans ma commande no ?

slim anvil
#

Je te l’ai mis plus haut, et fireless aussi

#

tu as 2 paramètres dedans le reaction et le user

keen narwhal
#

@keen narwhal Il y a un module sur npm qu'il s'appel cron

#

kado

slim anvil
#

Yes mais il en a déjà un autre le node-schedule d’après ce qu’il a dit

oak turret
#

yep ça fonctionne

#

du coup j'ai log user ça fonctionne

keen narwhal
#

Yep

oak turret
#

mais je fais comment pour relier ma commande du coup ?

keen narwhal
#

Node-schedule utilise CronJob

#

:3

#

Merci Fireless quand même :3

slim anvil
#

Ah bah use cronJob direct

#

Pas besoin d’user un package qui en utilise un autre 🤔

#

tu relies pas vraiment ta commande Lartaxx

#

Maintenant à la réaction du message tu vas regarder si le message est bien un ticket- et si l’ID du créateur du message est bien celui qui react

keen narwhal
#

Bah je test 30 seconde et je regarde après

slim anvil
#

Ce que tu peux faire c’est foutre l’ID du mec dans le footer de l’embed pour le récupérer facilement

#

Car l’auteur va être le bot

oak turret
#

faut que j'en fasse un alors

keen narwhal
#

Ça ne m'a pas l'air à marché

#

;-;

#

Nion ;-;

oak turret
#

ça fonctionne Enzo

#

du moins

#

comment je check si c'est un ticket ?

keen narwhal
slim anvil
#

look l’emoji et si aussi le nom du channel startsWith(‘ticket-de’)

oak turret
#

user.react dans un if ça fonctionne vu que c'est un param ?

slim anvil
#

pour regarder quoi ?

#

l’emoji tu l’as dans le premier params

oak turret
#

donc je check quoi avec quoi du coup

slim anvil
#

ton premier params tu as reaction._emoji.name ou id à toi de voir

#

Et tu peux même faire avant, une condition genre
const isTicket = et ici tu regardes si le channel name commence par ticket-de

#

Comme ça tu feras un if (reaction._emoji.name == ... && isTicket)

oak turret
#

const isTicket = channel.name.startsWith(ticket-de-${joueur_id}); good ?

slim anvil
#

ce sera pas channel du coup car tu le define nul part mais t’as l’idée oui

#

Dans ton évent en première ligne tu met:

const { message, _emoji } = reaction

oak turret
#

ah ça sera channels non ? pour get tous les channels non ?

#

okay thx

slim anvil
#

const isTicket = message.channel.name.startsWith('ticket-de')

#

Je sais pas si c’est les bonnes quotes je suis sur téléphone sorry

#

du coup ça va te renvoyer true ou false et donc tu t’en serviras pour ta condition

oak turret
#

yep np, d'ailleurs je peux mettre const user_id = user.id

#

vu que user = joueur qui react

slim anvil
#

Oui, mais du coup ça sert a quoi de faire une const qui va se nommer quasi pareille que celle de base ? harold

#

t’as remplacé le . par _

keen narwhal
#

Je ne comprends pas pourquoi ça ne veux pas spam ma console ;-; pourtant c’est la même chose que l’exemple et dans l’exemple ça marche ;-;

slim anvil
#

on pourra regarder demain si tu veux Alex je vais pas tarder à aller dormir et je suis pas sûr pc là du coup ça va être relou

keen narwhal
#

Tkt

oak turret
#

oui :x, donc const joueur_id = user_id ?

slim anvil
#

mais pourquoi en faire une const

#

C’est quoi le but là pour le coup

oak turret
#

l'habitude

#

mais vrai pas besoin

slim anvil
#

là pour le coup non je pense pas c’est pas comme si dans le user tu voulais accéder à autre chose et du coup éviter à chaque fois de réécrire tout le truc là ça te fera pas gagner de temps ni rien

oak turret
#

yep !

#

je crois avoir finalisé le truc

#

good no ?

 const { message, _emoji } = reaction;
    id_joueur = user_id;
    const isTicket = message.channel.name.startsWith(`ticket-de-${id_joueur}`);
    if (reaction._emoji.name == reaction && isTicket) {
            chan.delete({timeout: 3000});
    }
slim anvil
#

bah du coup la ligne id_joueur = user_id est pas bonne

oak turret
#

yeah

slim anvil
#

Bah yes log le user

#

Et tu crées dès ticket par le nom

#

Et pas par l’ID

#

Et c’est pas bon reprend mon startsWith

#

car déjà tu crées ton ticket avev le userName mais si ils sont 2 à s’appeler Enzo ça va pas être bon

oak turret
#

je crée mon channel avec message.author.username

slim anvil
#

Là tu vérifies juste que tu sois un channel de type Ticket comme ça si c’est pas le cas tu rentres pas dans le reste ça sert à rien

oak turret
#

du coup je check par l'id du message.author

slim anvil
#

et ensuite tu regarderas si le message que tu as react (l’embed) dans le footer il y a l’id du user qui est égale à user.id

oak turret
#

j'ai repris ton startsWith

#

yep

#

mais en gros

#

j'ai crée le ticket avec l'userrname

slim anvil
#

Il y a que le créateur du ticket qui peut le fermer )

oak turret
#

et là je check si c'est l'id du username qui a crée le ticket

#

yep

slim anvil
#

Ou tout les gens qui ont accès au channel ?

oak turret
#

que le message.author

slim anvil
#

meme les staffs ?

#

pas*

oak turret
#

bah pour le coup y a que message.author qui peut :x

slim anvil
#

Yes ok

oak turret
#

fin actuellement

slim anvil
#

Bon bah du coup tu peux faire plus simple je te l’écris pas de façon code mais de façon structuré:
1 - venir récupérer l’id du joueur qui a fait la commande !ticket qui est stocké dans le footer de l’embed (donc penser à l’ajouter à la création de l’embed!)

2- if channel name startsWith ticket-de-user.id && id dans le footer === user.id && reaction emoji name === ❌
3 - delete channel

#

Je crois que c’est ça

#

1 - donc pour ça c’est simple tu reaction juste le message et dedans tu auras les datas nécessaires à checker ^^

oak turret
#

je peux donc faire joueur_id == user.id

slim anvil
#

et qu’il soit bien dans un channel ticket

#

Éviter de delete un autre channel même si c’est peu probable

#

Mais on sait jamais un truc de suggestions tu peux mettre l’ID du créateur aussi et hop il réagit avec La Croix et ça delete le@channel

oak turret
#

hum ouais

slim anvil
#

comme je l’ai écris du coup là tu vas vraiment checker si c’est startsWith(‘ticket-de-${user.id}´)

oak turret
#

sauf que je mettrais pas la même coix

#

croix

#

donc

#

if (reaction._emoji.name == "❌" && isTicket && joueur_id == user.id)

slim anvil
#

Du coup change juste le isTicket et c good !

#

tu rajoutes juste finalement le user.name pardon pas id

oak turret
slim anvil
#

Comme ça t’es sûr que c’est son ticket, après là où c’est relou.... c’est si il change de nom

oak turret
#

username*

slim anvil
#

donc non le isTicket le touche pas laisse le juste par ticket-de

oak turret
#

si il change de nom pendant un ticket

#

yes okay

slim anvil
#

mais du coup ça devrait être bon

#

Un peu bordélique sur téléphone sorry seriously

oak turret
#

pas de soucis, merci de ton temps surtout !

#

donc final =

#
const { message, _emoji } = reaction;
const isTicket = message.channel.name.startsWith(`ticket-de-${user.name}`);
    if (reaction._emoji.name == "❌" && isTicket && joueur_id == user.id) {
            console.log("timer");
            chan.delete({timeout: 3000});
            
    }
#

good ?

#

oups !

slim anvil
#

Pour être sûr si jamais il change de nom c’est baise

#

Y a l’id ça suffira

oak turret
slim anvil
#

Du coup joueur_id on est ok c’est bien l’ID dans le footer embed ?

#

Non ne met rien finalement

#

Laisse en ticket-de

#

Vide

oak turret
#

yep

#

ah okat

slim anvil
#

Sorry je change d’avis mais en vrai ouais si il change de nom ça casse le truc

#

Peu probable mais@vaut mieux le gérer

oak turret
slim anvil
#

Nooo

#

Tu mets rien

#

tu le laisses vides du coup

#

on regarde juste qu’on est bien dans un channel de type Ticket

#

Donc startsWith(‘ticket-dé)

#

de*

oak turret
#

okay !

#
const { message, _emoji } = reaction;
    const isTicket = message.channel.name.startsWith("ticket-de-");
    if (reaction._emoji.name == "❌" && isTicket && joueur_id == user.id) {
            console.log("timer");
            chan.delete({timeout: 3000});
            
    }
#

good du coup

slim anvil
#

Si t’as bien géré le joueur id la condition paraît bonne

oak turret
#

qui marche bien dans le footer

slim anvil
#

oui mais tu as pas accès a l’embed il est dans l’autre évent

#

il faut que tu viennes récupérer l’id dans le message que tu récupères dans l’évent là

oak turret
#

ça fonctionne pourtant ^^

#

c'au moment du delete qu'il veut pas

#

le chan il le trouve pas

#

chan = channel crée

slim anvil
#

Non mais tu fais message.channel.delete()

oak turret
#

okay je test ^^

slim anvil
#

Tu définis messages juste au dessus

#

Mais ce sera l’id du bot

#

C’est la base d’une scope

#

Il a pas accès à la variable d’une autre scope

#

donc c’est à toi de venir récuper l’id

oak turret
#

ça fonctionne ^^

#

oui le joueur_id fonctionnait bien

slim anvil
#

log ton joueur_id

#

ce sera l’id du bot

oak turret
#

c'est le mien xD

slim anvil
#

a part celui que tu récupères de l’évent

oak turret
#

si ^^

#

avant mon embed

slim anvil
#

mais ton embed il est envoyé lors de l’envoie de la commande on est ok ?

oak turret
#

avant mon new Discord.MessageEmbed

#

non

slim anvil
#

tu renvoies un embed quand il react ?

oak turret
#

il est envoyé lors de la création du channel

#

nop

slim anvil
#

oui à la commande quoi du coup

oak turret
#

oui en gros

slim anvil
#

il fait la commande et ça crée le channel

oak turret
#

yep

slim anvil
#

mais donc c’est pas l’évent messageReactionAdd

oak turret
#
 chan.send(
                     joueur_id = message.author.id,
                     send_embed = new Discord.MessageEmbed()
                        .setColor("00ff00")
                        .addFields(
                            {name: "Joueur", value: `${message.author}`, inline: true},
                            {name: "Raison", value: `${raison}`, inline: true }
                        )
                        .setFooter(joueur_id)

                ).then(msg => msg.react("❌"))
                chan.setParent("715671104387154020")
              })
slim anvil
#

ah donc avant de crée ton embed tu définies une variable global joueur_id ?

oak turret
#
const chan = message.guild.channels.create(`ticket-de-${message.author.username}`, {
                type: 'text',
                
                permissionOverwrites: [
                  {
                    id: message.author.id,
                    deny: ['VIEW_CHANNEL'],
                  },
                ],
              }).then(chan => {
                chan.send(
                     joueur_id = message.author.id,
                     send_embed = new Discord.MessageEmbed()
                        .setColor("00ff00")
                        .addFields(
                            {name: "Joueur", value: `${message.author}`, inline: true},
                            {name: "Raison", value: `${raison}`, inline: true }
                        )
                        .setFooter(joueur_id)

                ).then(msg => msg.react("❌"))
                chan.setParent("715671104387154020")
              })
             
}
       
                }

});


client.on("messageReactionAdd", (reaction, user)  => {

    const { message, _emoji } = reaction;
    const isTicket = message.channel.name.startsWith("ticket-de-");
    if (reaction._emoji.name == "❌" && isTicket && joueur_id == user.id) {
        console.log(joueur_id);
            message.channel.send(`Suppression du ticket dans 5 secondes`);
            message.channel.delete({timeout: 5000})
            
    }

    
})

En gros c'est ça

#

yep

slim anvil
#

ok donc juste une question

#

Si t’as la réponse bravo

oak turret
#

xD

slim anvil
#

Si une personne crée un ticket juste après celui du mec

oak turret
#

une autre personne ?

slim anvil
#

le joueur_id = l’id du nouveau ticket

#

bah tu as 2 joueurs qui créent un@ticket chacun

oak turret
#

no du coup

#

c'est l'id du mec qui a tapé la commande

#

donc != de l'autre personne

#

vu que ça prends l'id du mec qui a tapé la commande

slim anvil
#

Non mais justement look

#

laisse moi finir

oak turret
#

yep

slim anvil
oak turret
#

yep

slim anvil
#

donc moi je fais !ticket blabla

#

Joueur_id = moi

oak turret
#

ton id plutôt :x

slim anvil
#

mais si toi 1 minute après tu fais un@ticket, joueur_id = message.author.id donc ton id ?

oak turret
#

bah yes

slim anvil
#

donc la variable joueur_id contiendra l’id de la dernière commande à chaque fois

#

Donc quand tu vas réagir bah l’ancien ça marchera pas

#

Parce que le mec@qui l’a fait après lui a piqué sa place

#

ça te crée pas une variable par utilisateur au cas où

red snow
#

Le méchant :o

oak turret
#

ah bonnn :x

slim anvil
#

Yes

#

Ton code est global donc en plus si ton bot redémarre

oak turret
#

je croyais que si xD

slim anvil
#

La variable est reset à 0

oak turret
#

ouaip

red snow
#

Et la,c'est l'hashmap

slim anvil
#

donc passes par le footer, et dans ton reaction add tu récupères le message que tu as déjà d’ailleurs et tu look le footer ! 🙂

red snow
#

Je sais même plus si ça existe en JS 🤦‍♂️

#

A non la hashset

oak turret
#

comment je récup ce qui a dedans dans l'autre event ?

#

mon id est dans le footer

slim anvil
#

bah justement regarde

#

le mec va réagir à ce message on eT ok ?

oak turret
#

nop

#

pas celui-là

#

l'autre embed qui est dans l'autre event (reactionAdd)

slim anvil
#

bah met l’id du mec dans l’embed sur lequel il va réagir

oak turret
#

dans l'autre embed

slim anvil
#

mais tu envoies pas d’embed dans le reactionadd

#

sauf pour lui dire que son ticket est fini à la limite ??

oak turret
#

attend j'suis con xD

slim anvil
oak turret
#

pas d'embed dans le reactionAdd non xD

#

2 embed dans la commande juste

#

1 en dm

#

et un aux admins

#

avec le récap etc

#

autant pour moi harold

slim anvil
#

et l’embed avec La Croix il est envoyé ou

#

La Croix sur laquelle il doit réagir ensuite pour le fermer ?

oak turret
#

dans le channel où la commande est tapée

slim anvil
#

ou le message je ne sais pas

oak turret
#

yep

#

pour le delete

#

la croix sert à delete le channel

slim anvil
#

ah tu l’envoies pas dans le@chznnel@cree ?

#

Le channel * crée *

oak turret
#

ah si j'suis con

#

mdr je perd la boule

#

dans la catégorie ticket puis ticket-de-nomdumec

slim anvil
#

donc dans cet embed tu vas venir mettre un footer avec l’id du mec qui fait la commande

#

et dans ton reaction Add

#

Tu vas venir récupérer l’id qui est dans le reaction.message etc.. je connais plus la structure de Message mais tu le log et tu verras bien

#

Tu le stock dans ton joueur_id cette fois ce sera bon mais pas en global

oak turret
#

bah dans celui-où y a la croix il y est le setFooter et l'id

slim anvil
#

et là tu pourras faire joueur_id === user.id

#

bon bah voila plus qu’à faire le reste

oak turret
#

alors attends que je me perde pas

slim anvil
#

Yes vite vite il est 1h demain 8h harold

oak turret
#

j'ai mon embed envoyé aux admins avec le setFooter = joueur_id

#

xD désolé ^^

slim anvil
#

Celui ci tu t’en fous

oak turret
#

c'est là où y a la croix

slim anvil
#

Tu fais un const { message, _emoji } = reaction

#

On est ok ?

oak turret
#

yup

slim anvil
#

donc là tu log ton message juste en dessous

#

Tu regardes dedans, tu devrais avoir un trucs embeds un tableau je crois

#

Ou peut être pas tu look bien avec dedans un footer qui va contenir l’ID du coup

oak turret
#

en dessous du const je log(message) ?

slim anvil
#

Ce truc là tu le stock dans une variable const joueur_id

#

Et hop

#

Oui

oak turret
#

je test

#

ça me log un gros array

#

et l'id à la fin

#

en dehors de l'array

slim anvil
#

Je sais plus à quoi ressemble le Message mais regarde bien ce truc, cherche ton ID et associe le footer à une const

#

Fais un message.embeds[0] de tête

#

Log ça

#

Tu auras tout dedans ce qu’il te faut

oak turret
#

je test

#

MessageEmbed {
type: 'rich',
title: undefined,
description: undefined,
url: undefined,
color: 65280,
timestamp: null,
fields: [
{ value: '@oak turret', name: 'Joueur', inline: true },
{ value: 'dqsd0', name: 'Raison', inline: true }
],
thumbnail: null,
image: null,
video: null,
author: null,
provider: null,
footer: {
text: '332514331516207105',
iconURL: undefined,
proxyIconURL: undefined
},
files: []
}
332514331516207105

#

j'ai mon id dans text

slim anvil
#

Yes bah à ton avis tu dois faire quoi

oak turret
#

message.embeds.footer[text] ou un truc dans le genre

#

je suis ko donc je dois dire des conneries xD

slim anvil
#

const joueur_id = message.embeds[0].footer.text || null

#

met bien des === et pas ==

#

Car si de base leurs id sont en number tu vas comparer le type aussi

#

== type, === value

oak turret
#

Je test !

#

ça fonctionne

#

je vais log joueur_id

slim anvil
#

bon allez je fileeeeee

#

bn!

oak turret
#

merci Enzo ! Bonne nuit à toi !

keen narwhal
#

Bonne nuit

grizzled cave
#

T’as une heure de retard toi mdr

oak turret
#

xD

#

vaut mieux tard que jamais mdr

keen narwhal
#

xDD

grizzled cave
#

Toi t’zs pire

#

T’étais censé dormir

oak turret
#

qui

#

t’avais pas besoin d’aide toi?

grizzled cave
#

Qui moi

oak turret
#

ouep

keen narwhal
#

Bonjour aujourd'hui, j'essayais de faire une commande qui set le message de bienvenue dans un channel grâce à aiko j'ai réussi. Mais là, j'essaie de faire en sorte que je puisse mettre le message que je veux avec une commande et que ce message ce stock dans un file.json. Bref, j'ai fait ça :

exports.SaveWelMessage = async function(guildid, message, args){
    if (fs.existsSync(`./guild/${guildid}.json`)) {
        var data =  await JSON.parse(fs.readFileSync(`./guild/${guildid}.json`));
        data.welcomemessage = args.join(' ').split('##')[0];
        data.welcomegif = args.join(' ').split('##')[1];
        fs.writeFileSync(`./guild/${guildid}.json`, JSON.stringify(data));
    } else {
        fs.mkdirSync(`./guild/`,{ recursive: true });
        var data = templatedata;
            let args1 = args.join(' ').split('##')[0]
            let args2 = args.join(' ').split('##')[1]
        data.welcommessage = args1;
        data.welcomegif = args2;
        fs.writeFileSync(`./guild/${guildid}.json`,JSON.stringify(data));
    }
}
``` et le code de la commande ```js
const Discord = require('discord.js');
const datah = require("../data.js");

module.exports.run = async(client, message, args) => {
    if (message.member.hasPermission("ADMINISTRATOR")){
        if ( args[0] && args[1] ) {
            let args0 = args[0];
            let args1 = args[1];
            datah.SaveWelMessage(args[0],args[1]);
            message.reply(`done !`)
        } else {
            message.channel.reply('');
        }
    }
};

module.exports.help = {
   name : "bvn"
}
``` J'ai une error :/ et je n'arrive pas à comprendre pourquoi ```UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'join' of undefined```
```(C:\Users\ \Desktop\bot\Abot\data.js:36:30)``` Ce qui correspond à  ```js
let args1 = args.join(' ').split('##')[0]```
crimson fern
#

args est undefined

#

tu le définis où args ?

keen narwhal
#

exports.SaveWelMessage = async function(guildid, message, args){

#

Oupss ;-; pauvre vasco xDD

woeful grove
#

°^°

keen narwhal
#

Tu me pardonnes ? :3

slim anvil
#

Non il est undefined alex

#
datah.SaveWelMessage(args[0],args[1]);

ici tu passes 2 paramètres on est ok ?

#
exports.SaveWelMessage = async function(guildid, message, args){

ici le args tu le récupères en 3ème

#

hors tu n'envoies pas de 3 paramètre

keen narwhal
#

Ah

#

Du coup, je dois mettre 3 ou lieu de 0 et 1 ?

slim anvil
#

Non, réfléchis c'est logique

keen narwhal
#

Je met Args en premier ?

slim anvil
#

non, là tu as juste fais un truc un peu bordel

#
if ( args[0] && args[1] ) {
            let args0 = args[0];
            let args1 = args[1];
            datah.SaveWelMessage(args[0],args[1]);
            message.reply(`done !`)
        }
#

et ensuite tu envoies 2 paramètres args0 et args 1

#

mais dans cette fonction tu récupères juste args

#

et tu refais le args0 et args1

#

Donc relis ton code il est pas bon

keen narwhal
#

Au lieu de && je met , ?

#

Surtout, que ça envoie done mais

#

Le join dans data ne marche pas

slim anvil
#

Relis ton code je peux pas faire + clair

#

oui car ton ags n'existe pas

#

je suis au taff je peux checker après si tu veux

keen narwhal
#

Ok :3 t’inquiète avec ce que tu m’as dit, je vais essayer de trouvé :3

keen narwhal
#

Enzo, du coup j'ai fait ça : ```js
const Discord = require('discord.js');
const datah = require("../data.js");

module.exports.run = async(message, args, client) => {
if (message.member.hasPermission("ADMINISTRATOR")){
if ( args[2] && args[3] ) {
let args0 = args[0];
let args1 = args[1];
datah.SaveWelMessage(args[0],args[1]);
message.reply(done !)
} else {
message.channel.reply('');
}
}
};

module.exports.help = {
name : "bvn"
}
};

module.exports.help = {
name : "bvn"
}

slim anvil
#

log ton message voir ce qu'il y a dedans

keen narwhal
#

?

west plover
#

no juste console.log( message ) avant ta condition

#

vu que t'as une erreur dans ta condition

keen narwhal
woeful grove
#

Bonsoueireuh

keen narwhal
#

Bonsoueireuh

slim anvil
#

Les gars... vous savez même pas faire des console.log

woeful grove
#

Si °^°

slim anvil
#

Si tu mets ton console log après l’erreur forcément qu’il sera pas lu

#

Faut le mettre avant ça paraît logique

keen narwhal
#

Ah oui, je suis complètement débile sorry, je vois même pas pourquoi vous m'aidez. Je suis peine perdu

woeful grove
#

Oui.. Sincèrement je sais pas pourquoi je suis ton ami °^°

keen narwhal
#

;-;

woeful grove
#

;-;

west plover
#

c quoi ton message handler? un custom?

keen narwhal
#

Je sais pas

west plover
#

ayes, t'sais même pas avec quoi tu bosses sue

#

donc donne le contenu du events/message.js

keen narwhal
#

;-;

#
const Discord = require("discord.js");
const prefix = "a!";

module.exports = async(client, message) => {

    if(message.author.bot) return;
    if(message.channel.type === "dm") return;

    if(!message.content.startsWith(prefix)) return;

    const args = message.content.slice(prefix.length).trim().split(/ +/g);
    const commands = args.shift();

    const cmd = client.commands.get(commands);

    if(!cmd) return;

    cmd.run(client, message, args);
``` Quand je dis que je suis une peine perdu
#

C’est vrai ;-;

west plover
#

ton problème c juste les arguments en faite

keen narwhal
#

Mais si je mets args en dernier mon truc ne marche plus donc je fais quoi ?

west plover
#

bah de base ton truc ne fonctionnais pas donc bon goodenough

#

donc tu le mets dans le bon ordre

woeful grove
#

;-;

#

Si quelqu'un a un générateur d'images de suicide, je veux bien :D!

west plover
#

google est ton ami kappo

woeful grove
keen narwhal
#

Du coup, je l'ai remis comme à la base mais du coup. Ça ne marche pas, je comprend pas pourquoi ;-;

slim anvil
#

si tu remet le truc de tt a l'heure qui ne fonctionnait pas, tu as qu'a relire ce que je t'ai envoyé

keen narwhal
#

kk

#

Après mon cours, je fais ça :3

keen narwhal
#

@keen narwhal args doit être définis !

#

Mais comment je le définis ? ( Je suis un peu trop bête pour le comprendre )

#

bah en gros tu le mets la ou ta définis (client, message)

#

et au dessus tu mets

#

var args = la définition que tu veux

#

var args = args.join(' ').split('##') ?

#

( Le split parce que je veux pouvoir mettre un lien )

slim anvil
#

bon, quand tu console log client, message et args tu obtiens quoi ?

west plover
slim anvil
#

parce que ton soucis c’est le même depuis le début

#

Les paramètres sont soient manquants soient mauvais

west plover
#

du coup il vient de le mettre dans le bon sens si on regarde le screen 🤔

slim anvil
#

Oui mais le problème vient pas que de la

keen narwhal
slim anvil
#

Ensuite ici il appelle une fonction save machin

#

Mais dans save machin il récupère pas du tout les mêmes paras

#

params*

#

dans ta fonction saveWelMessage tu devrais avoir du coup Alex (args1, args2)

#

Sauf que toi tu essayes de récupérer encore une fois (toto, tata, args)

#

Donc forcément qu’il est undefined

keen narwhal
#

Bah en gros, je voulais que dans le fichier json propre au serveur, il y est le message de bienvenue cette par une commande comme ça ça ne se mêle pas entre eux

#

...

slim anvil
#

Montre ta fonction saveWelMessage

keen narwhal
slim anvil
#

Ok maintenant tu les récupères bien

#

Maintenant look ton premier screen

keen narwhal
#

mmhm

slim anvil
#

if (args 2 && args 3)

#

et tu viens assigner le 0 et le 1

#

il est ou l'intéret

keen narwhal
#

Ah ok

west plover
#

pourquoi y a un await et un async, sont useless là thinkgeometric

keen narwhal
slim anvil
#

Du coup stp soit logique

#

relis ton truc

#

@west plover on verra le reste après harold

#

Tu définis args2, args3

#

pour ?

west plover
#

pour qu’ils soient grisés, c bo le gris kappo

slim anvil
#

dans ton datah.saveWel...(args[0], args[1])

keen narwhal
slim anvil
#

Du coup voilà

#

mais supprime tes 2 variables

#

elles ne servent pas si tu passes directement args[2]

keen narwhal
#

Fait

slim anvil
#

Tu as vérifié ce que tu reçois avant ?

#

un petit console.log(args[2]) et 3

#

pour voir si tu as bien ce que tu veux^^

keen narwhal
#

C'est bon

#

Il log bien

slim anvil
#

Ok!

#

C'est comme ça qu'on procède, on test, on log chaque variable crée pour vérifier son contenu et vérifier ces conditions

#

on écrit pas dans le vide en se disant "ça marche"

#

Du coup la ton erreur désormais, c'est que dans saveWelMessage tu regardes si tu as un fichier guildid.json

#

sauf que guildId tu ne le récupères nul part

keen narwhal
#

Yeo

slim anvil
#

envoie le aussi à l'appel de ta fonction

keen narwhal
#

Je l'ai rajouté en premier au params

slim anvil
#

Montre ce que t'as fais

keen narwhal
slim anvil
#

Mais Alex

#

tu crois que le code il va l'inventer ?

#

C'est pas parce que dans les () tu mets guildId qu'il va instantanément te créer le contenu

#

On parle de base du code là, un appel de fonction en passant des params, je peux pas t'aider en te donnant chaque bonne réponse.... c'est pas simple, avant de faire des bots il faut connaitre au minima le javascript

keen narwhal
#

J'ai patch le guildId, mais ça revient à args is not defined

#

Du coup, il faut que je créer les var de args comme dans l'autre fichier ?

slim anvil
#

Il faut qu'a l'appel de ta fonction SaveWelMessage tu passes 3 params (guildId, args[2], args[3])

keen narwhal
#

( J'ai mis tout en 0 et 1 c'est pour ça que j'ai mis en 0 et 1 en haut )

#

Pourquoi ne pas envoyé args en globalité 🤔

slim anvil
#

Alex les nom que tu mets importes "peu" c'est surtout l'ordre
si tu as
toto(1, 2, 3)
dans ta fonction toto tu peux avoir toto = (a, b, c) => {}
a = 1
b = 2
c = 3

keen narwhal
#

Ah k

#

Du coup je dois définir a b c mais pour moi a b et c sont des arguments

slim anvil
#

Honnêtement je comprend pas ce que tu ne comprends pas

datah.SaveWelMessage(message.guild.id, args[2], args[3]) // ou passer juste args

l'appel de ta fonction

SaveWelMessage = async function (guildId, args1, args2) { // ou récupérer juste args et ensuite le split
  if (....)
}
keen narwhal
#

Donc ça ça devrait être bon

slim anvil
#

Non, du coup si ici tu fais ton args0 et args 1, dans l'appel de ta fonction envoie juste args

#

mais c'est trop bizarres un coup tu veux récupérer 0 et 1, puis ensuite 2 et 3

#

j'ai l'impression que tu sais pas vraiment ce que tu fais là

keen narwhal
#

Non, le 2 et 3 c'est parce que je croyais déjà utiliser les 0 1 arguments et je me suis rendu compte que non alors j'ai remplacé par 0 et 1

oak turret
#

Hello, Enzo ma condition est bonne non ? j'ai rien touchée à hier, et il me veut plus mon footer.text (je sors d'une grosse journée donc je risque de dire des conneries)

 if (reaction._emoji.name === "❌" && isTicket && joueur_id === user.id) {
#
  joueur_id = message.embeds[0].footer.text || null,
slim anvil
#

et si tu log ton joueur_id tu obtiens quoi

oak turret
#

j'ai obtenu "2"

slim anvil
#

et dans ton embed tu as bien l'id pourtant ?

oak turret
#

Mais attend

#

je l'ai plus maintenant

#

il m'envoie plus mon contenu, et il met plus le setParent

slim anvil
#

sur ta commande !ticket ?

oak turret
#

yep

#

le console.log apparaît lors de l'event reactionAdd

#

donc vu qu'il envoie plus mon embed c'est compliqué :x

#

TypeError: Cannot read property 'footer' of undefined

slim anvil
#

mais le joueur id tu le fais ou ? 🤔

#

screen pour voir

oak turret
#

okay

#

Je rêve où y a plus l'envoie du embed dans le code 😮

slim anvil
#

Non mais le joueur_id est pas du tout au bon endroit

#

t'as pas compris ce que je t'ai dis hier ^^

oak turret
#

Bah ça marchait hier ;x

#

J'ai pas du comprendre, mais je vois pas alors

slim anvil
#

Remonte, ça concernait la notion de scope

oak turret
#

Tu veux que je remonte à quel niveau

slim anvil
#

Je te réexplique rapidement, c'est dans l'event messageReactionAdd que tu viens créer ta variable joueur_id

#

pas a l'éxécution de la commande

oak turret
#

ahh

keen narwhal
#

Enzo, aujourd'hui travaillé sur ça, m'a ouvert les yeux et je me suis rendu compte qu'en fait, je me reposais trop sur les autres ! Alors, je vais supprimé mon bot au complet et le recommencé avec ce que je sais faire !

slim anvil
#

Mais non ça sert à rien de delete ton travail

#

Juste focus toi +, essaye de chercher en mettant des log, mais surtout essayes de suivres des tutos pour avoir les bases en js

oak turret
#

yep merci Enzo j'ai compris, ça fonctionne ^^

slim anvil
#

tu vas moins galérer

keen narwhal
#

Mais si, parce que si je réfléchis bien, il n'y a pas grand chose qui m'appartient vraiments

#

Bah justement, mieux vaut suivre des tutos en commençant à 0 que déjà évolué

#

...

slim anvil
#

c'est toi qui vois

keen narwhal
#

Du coup, tu as un tuto fr ou an ( Même si je préfère FR ) Pour apprendre le JS ?

slim anvil
#

Sinon tu as pleins de vidéos sur youtube, perso a l'école je regardai Traversy Media

#

mais c'est déjà un peu plus évolué

oak turret
#

Les gars, poour mes perms de deny: allow: quand je crée mon channel, je peux restreindre l'accès à ${message.author} par exemple ? pour qu'il n'y est que lui + les grades au-dessus de lui qui puissent les voir ?

keen narwhal
#

Le tuto un peu de js pour dynamiser le tout ?

slim anvil
#

Oui lartaxx

#

yes alex why not

oak turret
#
 deny: ['ADMINISTRATOR'],
 allow: ['VIEW_CHANNEL', 'SEND_MESSAGES']

Je mets direct ma restrict dans l'array ?

slim anvil
#

J'ai plus trop le truc en tête mais tu peux faire un overwritePermissions je crois

#

je sais plus si tu peux le passer direct a la creation surement

oak turret
#

j'vais voir ce que je peux trouver sur le wiki

#

https://discord.js.org/#/docs/main/stable/class/PermissionOverwrites j'ai look ça mais je vois pas trop comment restreindre sois pas grade ou un truc comme ça

#

je l'ai dans mon code déjà ça, mais comment l'adapter idk

oak turret
#

vous avez pas d'idée?

red snow
#

Qu'est ce que tu veux ?

oak turret
#

Que en gros, quand un user fais un ticket, il ait accès à voir son ticket et à écrire dedans

#

car de base il ne peut pas voir la catégorie

#

perm de grade ça

keen narwhal
#

Tu stock ou l'id du Channel correspondant au user ?

red snow
#

Un truc comme ça Lartaxx

#

C'est ptet pas view channel

oak turret
#

Fire, je stock seulement l'id du mec qui a fait le ticket dans mon event reactionAdd

keen narwhal
#

Why ???

#

Et tu le stock où ?

oak turret
#

Car Enzo m'avait expliqué que c'était global et pas par utilisateur, c'est à dire que si plusieurs personnes font un ticket, au moment où un joueur veut fermer son ticket, ça sera l'id du dernier user qui a fait le ticket

red snow
#

Lartaxx teste ça

oak turret
#

dans mon event

#

yep à la place de quoi ?

#
const chan = message.guild.channels.create(`ticket-de-${message.author.username}`, {
                type: 'text',
                
                permissionOverwrites: [
                  {
                    id: message.author.id,
                    deny: ['ADMINISTRATOR'],
                    allow: ['VIEW_CHANNEL', 'SEND_MESSAGES']
                  },
                ],
              }).then(chan => {
                chan.send(
                        send_embed = new Discord.MessageEmbed()
                        .setColor("00ff00")
                        .addFields(
                            {name: "Joueur", value: `${message.author}`, inline: true},
                            {name: "Raison", value: `${raison}`, inline: true }
                        )
                        .setFooter(message.author.id)

                ).then(msg => msg.react(":x:"))
                chan.setParent("715671104387154020")
              })
#

oups

red snow
#

Tu le rajoute

#

Si t'as pas encore touché aux Permissions

oak turret
#

j'ai mis permissionOverwrites juste

red snow
#

Ah

#

Perso je fais tout le temps avec chan.overwritePermissions

#

Comme j'ai mis plus haut

oak turret
#

j'enlève celui plus haut du coup

#

et je le met avant le setParent ?

red snow
#

Avant ou après 🤷‍♂️

#

Et ouais enlevé celui plus haut

oak turret
#

okay je test

#

good comme ça ?

#
chan.overwritePermissions(message.author.id, {view_channel: true, send_messages: true,})
red snow
#

Les deux je sais pas mais test

#

Peut être que ça marche

oak turret
#

Nickel ça fonctionne ! Merci Burger ^^

red snow
#

Pas de soucis :)

oak turret
#

Ah burger ^^

#

petit soucis

#

quand je fais un ticket, mon ami le voit, alors qu'il n'est pas censé le voir on est d'accord ?

red snow
#

Oui

#

Il faut lui enlever l'accès

#

Je suppose 🤔

oak turret
#

euh dans le overwrite ?

red snow
#

Oui

#

Mais fais en un autre

oak turret
#

okay

#

correct ?

#
chan.overwritePermissions(message.guild.roles.everyone.id, {view_channel: false, send_message: false})
red snow
#

Non, sélectionne la bonne guild

#

Message.guild

oak turret
#

okay

#

comme ça ?

#

nop l'user le voit toujours

red snow
#

Regarde les permissions du channel

#

Et regarde si everyone peut voir le channel

oak turret
#

c'est les perms de bases

#

ça a pas changer

#

c'est en / (gris)

red snow
#

.updateOverwritePermissions

#

Je crois

#

Essaye ça

oak turret
#

updateOverwritePermissions is not a function

#

c'est pas plutôt updateOverwrite ?

red snow
#

A si ça doit être ça

oak turret
#

ouais mais ça mets pas les permissions :x

#

j'capte pas pourquoi :x

red snow
#

Mmh ça doit juste pas être la bo'nd Perm

#

Bonne fonction plutôt

oak turret
#

message.guild.roles.everyone.setPermissions([]);

#

un truc comme ça ?

#

avec un tableau vide pour aucune permission

#

ou

#

channel.updateOverwrite(channel.guild.roles.everyone, { VIEW_CHANNEL: false });

red snow
#

Ouais everyone

#

Mais sans le id

oak turret
#

j'ai enlevé le id

#

yep voilà

#

du coup

#

tous les grades au-dessus de lui le verront

#

donc faut mettre les grades vip, dev etc en dessous de everyone ?

red snow
#

Nono

#

So everyone n'a pas accès

#

Personne n'a accès, sauf si un rôle le contredis, mais dans ce channel

oak turret
#

Okay donc là seulement l'user + le créateur du serveur peut le voir

red snow
#

Tous ceux qui ont la Perm admin

#

Et le user

oak turret
#

Ok je vois, donc pour ajouter des perms à des grades je fais pareil

red snow
#

Oui mais pas avec le update

oak turret
#

message.guild.roles.get('iddugrade').setPermissions(['SEND_MESSAGES', 'VIEW_CHANNEL']);

#

.cache devant je pense

red snow
#

A ui

#

.cache

oak turret
#

message.guild.roles.cache.get('iddugrade').setPermissions(['SEND_MESSAGES', 'VIEW_CHANNEL']);

red snow
#

Mais pour ajouter des perms à des grades jsp

oak turret
#

like this

#

bah là je set ses permissions dans chan si je fais comme ça =>

#

chan.message.guild.roles.get('iddugrade').setPermissions(['SEND_MESSAGES', 'VIEW_CHANNEL']);

#

no ?

red snow
#

Tu veux faire quoi ?

#

Pas compris

oak turret
#

faire en sorte que des grades précis aient des perms précises quand quelqu'un fait un ticket

red snow
#

Sur le channel ou en général sur le serveur ?

oak turret
#

sur le channel crée pour un ticket

red snow
#

A

#

Bah tu fais la même que le user, chan.permissionsOverwrite

oak turret
#

comme ça ?

#

chan.overwritePermissions(message.guild.roles.cache.get('716001100301598770'), {VIEW_CHANNEL: true, SEND_MESSAGES: true,})

#

ça fonctionne po xD

#

ah si, mais ça bug un peu

keen narwhal
#

Ça ne commence pas bien x') J'ai une error tandis que j'ai rien fait ;-;

#

;-; throw err; je vais te bouffé

slim anvil
#

Screen

keen narwhal
#

J'ai uninstall npm plusieurs fois et toujours pas

slim anvil
#

t'as tout bien install ?

#

montre le code

keen narwhal
#

npm i discord.js --s

oak turret
#

fait juste npm install discord.js

#

et après tu fais npm discord.js --version

#

ou tu check ton package.json

keen narwhal
#

Il en n’a pas ;-;

slim anvil
#

npm init

keen narwhal
#

Ah merde oui ;-;

#

Merci :3

cyan iron
#

Hey ! J'aimerais supprimer tous les webhooks d'un channel via mon bot discord js, j'ai un code qui ne fonctionne pas donc inutile de vous le partager
Je suis en v11. 5. 1 si quelqu'un sait comment faire je suis preneur 🙂
( Et Oui j'ai cherché sur Google )

#

Pour info j'ai tenté des méthodes avec le fetchmessage mais c'est peut être pas la bonne

crimson fern
#

T'as check le guide de discord.js ?

cyan iron
#

Oh que oui

#

Mais j'ai rien trouvé

crimson fern
#

Tu fetch tous les webhooks

#

ca te return une collection

#

dans tu peux fait une boucle pour les delete

cyan iron
#

et comment je fait cette boucle

#

j'ai tenté le foreach ça marche pas

#

Apparement le Fetchwebhooks.foreach n'est pas une fonction

hazy mirage
#

???

#

tu dois faire lechannel.fetchMessage("id").then(msg => {
// get les webhooks du message etc
}).catch(console.error)

#

N’importe quoi

#

Ou la

#

C’est ton fetchMessage qui m’a embrouillé 😂

cyan iron
#

Je veux pas Fetchmessage 😂

#

Ah oui c'est moi deso

#

Edited

hazy mirage
#

Je vais passer pour un con maintenant

cyan iron
#

😂

hazy mirage
#

Visiblement tu as juste à faire

const webhooks = await lechannel.fetchWebhooks()

for (webhook of webhooks) {
 // Et la a toi de jouer, tu as la variable webhook qui correspond à un webhook par un webhook ce qui te permet d’en faire ce que tu veux 😊
}```
cyan iron
#

Merci je tente après 😉

keen narwhal
#

Coucou, vous allez bien ?
Bon, du coup j'ai un petit probleme...
j'vais sur mon pc et je vous explique...
Voila, du coup :
J'ai crée un system de ticket mes j'aimerais que quand quelqu'un click sur la réaction ça réaction s'enleve automatiquement... j'ai fait quelque recherche mes tous ce que j'ai fait n'a pas marcher ! si quelqu'un peut m'aider...

Le script :

const Discord = require("discord.js")
 
module.exports.run = async (bot, message, args) => {
 
    message.delete()
 
    let TicketEmbed = new Discord.MessageEmbed()
    .setColor("#cd3")
    .setAuthor("Support du serveur")
    .setDescription("Pour créer un ticket, appuyez sur la réaction")
    .setFooter("Support du serveur")
 
    message.channel.send(TicketEmbed).then(async msg => {
        msg.react("🎟️")
    })
}
 
module.exports.help = {
    name: "SetupTicket"
}
red snow
#

Tu dois faire un msg.react.resolve("\🎟️").users.remove(user.id)

#

User doit être définis bien évidemment

oak turret
#

Hello, j'ai un petit problème, sur le overWritePermissions, en fait j'enlève l'accès aux everyone de voir le ticket d'une personne, puis ensuite je permet au créateur du message de voir le message et d'y écrire et ensuite j'autorisé à un grade les mêmes accès, ça marche bien mais au moment de test il y a un problème.

1er ticket : (Mon ami pour test) est everyone et ne voit pas mon ticket donc c'est good
2ème ticket : (Je met mon ami modérateur) et il voit mon ticket donc c'est good
3ème ticket : (J'enlève mon ami de modérateur donc il devient everyone) Je fais mon ticket et il y a accès alors qu'il n'est pas censé y avoir accès

Vous avez des idées ?

 chan.updateOverwrite(message.guild.roles.everyone, {VIEW_CHANNEL: false, SEND_MESSAGES: false})                
 chan.overwritePermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true,})
 chan.overwritePermissions(message.guild.roles.cache.get('716001100301598770'), {VIEW_CHANNEL: true, SEND_MESSAGES: true,})
keen narwhal
#

Essaie de faire un refresh de l’évent voir genre un refresh automatique

red snow
#

Il y a accès, mais s'il change de channel non

#

Normalement

#

Ou s'il redémarre son discord

oak turret
#

Ouais mais du coup ça peut être relou

keen narwhal
#

Bah tu l’envoies vers un autre Channel ..

oak turret
#

de ?

#

non mais c'est que quand il est plus censé le voir il le voit donc c'est chiant quoi

red snow
#

Bah c'est discord qui fait ça

#

Pas le bot

#

Et pis bon, ça arrive pas souvent de faire un ticket, pis retirer un modérateur après

oak turret
#

ouais c’est sûr

crimson fern
#

ms marche pas @oak turret ?

#

j'ai toujours mon bot pour les giveaways

oak turret
#

ah si ça fonctionne c'est bon ^^

crimson fern
#

Ok

oak turret
#

Vous avez le param pour voir les anciens messages dans les overwritePermissions je trouve pas :x

red snow
#

Readmessages history

#

Ne crois

oak turret
#

vscode le trouve pas

crimson fern
#

Normal

#

enfin, perso, ils m'aide jamais vsc

oak turret
#

moi oui ^^, SEND_MESSSAGES etc il le trouve

#

mais je trouve pas la liste des permissions à mettre dedans

crimson fern
#

READ_MESSAGES_HISTORY

#

Je crois

oak turret
#

je test

crimson fern
red snow
#

Sinon t'as lz liste des perms sur la doc

keen narwhal
#

READ_MESSAGE_HISTORY

crimson fern
#

Ah, bah j'avais presque raison sur le nom de la perm

#

READ_MESSAGE_HISTORY

oak turret
#

elle fait buguer les perms avant elle :x

#
chan.overwritePermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true, READ_MESSAGE_HISTORY: true})

Elle fait buguer les 2 autres

#

j'ai essayé de l'enlever ça fonctionne mais wtf

oak turret
#

cette perm m'annule les deux c'est grave relou :x

red snow
#

Met les séparément pour voir

oak turret
#

je test

#

marche po

#
chan.updateOverwrite(message.guild.roles.everyone, {VIEW_CHANNEL: false, SEND_MESSAGES: false})                
chan.overwritePermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true})
chan.overwritePermissions(message.author.id, {READ_MESSAGE_HISTORY: true})
chan.overwritePermissions(message.guild.roles.cache.get('716001100301598770'), {VIEW_CHANNEL: true, SEND_MESSAGES: true})
chan.setParent("716388235076436058")
#

Les perms de la catégorie sont de bases

red snow
#

Sinon

#

Tu règle la catégorie sur ce que tu veux

#

Donc everyone peut pas lire etc

#

Et tu fais channel.lockPermissions()

#

Pis après tu mets l'accès au mec qui a fait le ticket

#

Pis voilà

oak turret
#

donc j'enlève le update et les overwrite à part pour le grade get

red snow
#

Ui

#

Non pour 'e grade tu enleve

#

Tu laisse juste pour le membre

oak turret
#

ah oui je le mets dans la cat

#

donc je laisse juste le lock

red snow
#

Ui

#

Ui

#

Et le truc du membre pour qu'il y ai accès

oak turret
#

donc

#
chan.lockPermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true, READ_MESSAGE_HISTORY: true})
chan.setParent("716388235076436058"

?

#

mais ça règlera rien

red snow
#

Mais non

#

Tu mets chan.lockPermissions()

#

Pis APRÈS tu mets le overwrite

#

Du membre

keen narwhal
#

Je ne suit pas sûr, j'ai pas test et je ne sait pas si c'est possible mais tu peux améliorer ton code :

const channelPerm = {
    "message.guild.roles.everyone": {
        VIEW_CHANNEL: false,
        SEND_MESSAGES: false
    },
    "message.author.id": {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true,
        READ_MESSAGE_HISTORY: true
    }
}

channelPerm.forEach(role => {
    role.forEach(perm => {
        chan.overwritePermissions(role, perm)
    });
});```
oak turret
#

woh

#

euh

red snow
#

Le lockpermissions lui permet d'éviter la foreach

oak turret
#

je mets rien dans le lockpermissions du coup

red snow
#

Na rien

keen narwhal
#

Mais c'est censé fonctionnée juste

chan.overwritePermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true, READ_MESSAGE_HISTORY: true})```
red snow
#

Oui mais ça fonctionne apparemment pas

#

Donc

#

On fait autre chose

keen narwhal
#

C'est juste que sa categorie rewrite

oak turret
#

quand je mets le read_message_history, l'utilisateur n'a même plus accès à voir son channel

red snow
#

Lartaxx tu l'as mis après le setParent ?

oak turret
#

le setParent est en dernier

keen narwhal
#

Voilà

#

il re-write surement

red snow
#

Mets le en premier

oak turret
#

je fais ça

#
                chan.setParent("716388235076436058")
                chan.updateOverwrite(message.guild.roles.everyone, {VIEW_CHANNEL: false, SEND_MESSAGES: false})                
                chan.overwritePermissions(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true, READ_MESSAGE_HISTORY: true})
                chan.overwritePermissions(message.guild.roles.cache.get('716001100301598770'), {VIEW_CHANNEL: true, SEND_MESSAGES: true})

pareil :x

red snow
#

Fais ce que je t'ai dis 🤷‍♂️

keen narwhal
#

Je crois que overwritePermissions remplace toutes les perms par les nouvelles

oak turret
#

je le mets après le setParent du coup

#

update du coup à la place

keen narwhal
oak turret
#

yes c'est ça

#

j'ai mis update

keen narwhal
#

Les deux autres oui

#

pas le premier

oak turret
#

j'ai mis update pour toutes

keen narwhal
#

Non

#

Att

oak turret
#

oui par pour everyone

keen narwhal
#

options.parent

#

Tu l'a l'option

#

Donc arrête de setParent après avoir crée le channel

oak turret
#

ça revient au même no

keen narwhal
#

Non

#

Car la il définira directement le channel dans le parent en question

oak turret
#

et je le mets où ? après type ?

keen narwhal
#

Actuellement toi, il le définie après la création

oak turret
#

yep

keen narwhal
#

Att

oak turret
#

y a un temps

keen narwhal
#

envoie comment tu crée le channel

oak turret
#
 const chan = message.guild.channels.create(`ticket-de-${message.author.username}`, {
                type: 'text',
              }).then(chan => {
                chan.send(
                        send_embed = new Discord.MessageEmbed()
                        .setColor("00ff00")
                        .setTitle("Réagissez avec l'émoji pour fermer votre ticket.")
                        .addFields(
                            {name: "Joueur", value: `${message.author}`, inline: true},
                            {name: "Raison", value: `${raison}`, inline: true }
                        )
                        .setFooter(message.author.id)

                ).then(msg => msg.react("❌"))
                chan.setParent("716388235076436058")
                chan.overwritePermissions(message.guild.roles.everyone, {VIEW_CHANNEL: false, SEND_MESSAGES: false})                
                chan.updateOverwrite(message.author.id, {VIEW_CHANNEL: true, SEND_MESSAGES: true, READ_MESSAGE_HISTORY: true})
                chan.updateOverwrite(message.guild.roles.cache.get('716001100301598770'), {VIEW_CHANNEL: true, SEND_MESSAGES: true})

              })
#

donc après type

#

parent c'est string ou int ?

keen narwhal
#

Je te le fait att

oak turret
#

snowflake donc string

#

c'est good

keen narwhal
#
const chan = message.guild.channels.create(`ticket-de-${message.author.username}`, {
    type: 'text',
    parent: 716388235076436058
}).then(chan => {
    chan.send(
        send_embed = new Discord.MessageEmbed()
            .setColor("00ff00")
            .setTitle("Réagissez avec l'émoji pour fermer votre ticket.")
            .addFields(
                { name: "Joueur", value: message.author, inline: true },
                { name: "Raison", value: raison, inline: true }
            )
            .setFooter(message.author.id)
    ).then(msg => msg.react("❌"))
    chan.overwritePermissions(message.guild.roles.everyone, {
        VIEW_CHANNEL: false,
        SEND_MESSAGES: false
    })
    chan.updateOverwrite(message.author.id, {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true,
        READ_MESSAGE_HISTORY: true
    })
    chan.updateOverwrite(message.guild.roles.cache.get('716001100301598770'), {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true
    })
})```
#

Un peu mieux structurée

oak turret
#

parent c'est un string vu que c'est snowflake

keen narwhal
#

Att

#

my bad

oak turret
#

^.^

keen narwhal
#
var guild = message.guild;
var parent = guild.parent.cache.get(716388235076436058);

const chan = guild.channels.create(`ticket-de-${message.author.username}`, {
    type: 'text',
    parent: parent
}).then(chan => {
    chan.send(
        send_embed = new Discord.MessageEmbed()
            .setColor("00ff00")
            .setTitle("Réagissez avec l'émoji pour fermer votre ticket.")
            .addFields(
                { name: "Joueur", value: message.author, inline: true },
                { name: "Raison", value: raison, inline: true }
            )
            .setFooter(message.author.id)
    ).then(msg => msg.react("❌"))
    chan.overwritePermissions(guild.roles.everyone, {
        VIEW_CHANNEL: false,
        SEND_MESSAGES: false
    })
    chan.updateOverwrite(message.author.id, {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true,
        READ_MESSAGE_HISTORY: true
    })
    chan.updateOverwrite(guild.roles.cache.get('716001100301598770'), {
        VIEW_CHANNEL: true,
        SEND_MESSAGES: true
    })
})```
#

Et si tu veux un peu te compliqué la vie pour plus propre, try

var guild = message.guild;
var parent = guild.parent.cache.get(716388235076436058);

const chan = guild.channels.create(`ticket-de-${message.author.username}`, {
    type: 'text',
    parent: parent
}).then(chan => {
    chan.send(
        send_embed = new Discord.MessageEmbed()
            .setColor("00ff00")
            .setTitle("Réagissez avec l'émoji pour fermer votre ticket.")
            .addFields(
                { name: "Joueur", value: message.author, inline: true },
                { name: "Raison", value: raison, inline: true }
            )
            .setFooter(message.author.id)
    ).then(msg => msg.react("❌"))
    var channelPerm = [
        guild.roles.everyone = {
            VIEW_CHANNEL: false,
            SEND_MESSAGES: false
        },
        message.author.id = {
            VIEW_CHANNEL: true,
            SEND_MESSAGES: true,
            READ_MESSAGE_HISTORY: true
        }
    ]
    channelPerm.forEach(role => {
        role.forEach(perm => {
            chan.overwritePermissions(role, perm)
        });
    });
})```
oak turret
#

Hello, ça m'avais jamais fais ça, mais je comprends pas pourquoi cette erreur apparaît

TypeError: Cannot read property 'text' of null


    if (command === "vote") {
        const vote = new Discord.MessageEmbed()
        .setColor("#00ff00")
        .setDescription("Test")
        .setTimestamp();
        message.channel.send(vote).then(msg => {msg.react("🇦"); msg.react("🇧");})
    }
keen narwhal
#

Line combien ?

#

Et envoie un peu plus s'il te paît

oak turret
#

TypeError: Cannot read property 'text' of null
at Client.<anonymous> (E:\wamp64\www\suncoast_admin_bot\index.js:252:48)
at Client.emit (events.js:210:5)
at MessageReactionAdd.handle (E:\wamp64\www\suncoast_admin_bot\node_modules\discord.js\src\client\actions\MessageReactionAdd.js:44:17)
at Object.module.exports [as MESSAGE_REACTION_ADD] (E:\wamp64\www\suncoast_admin_bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_REACTION_ADD.js:4:37)
at WebSocketManager.handlePacket (E:\wamp64\www\suncoast_admin_bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
at WebSocketShard.onPacket (E:\wamp64\www\suncoast_admin_bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22)
at WebSocketShard.onMessage (E:\wamp64\www\suncoast_admin_bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
at WebSocket.onMessage (E:\wamp64\www\suncoast_admin_bot\node_modules\ws\lib\event-target.js:125:16)
at WebSocket.emit (events.js:210:5)
at Receiver.receiverOnMessage (E:\wamp64\www\suncoast_admin_bot\node_modules\ws\lib\websocket.js:800:20)

keen narwhal
#

ça ne me donne pas quel ligne

oak turret
#

J'en sais rien non plus c'pas précisé

#

:x

keen narwhal
#

Si

#

252:48

#

Ligne 252 et le 48éme caractère

oak turret
#

const joueur_id = message.embeds[0].footer.text || null;

#

|| null ?

keen narwhal
#

c'est abusé

#

Toi même tu ne sait pas qu'es ce que tu fais

oak turret
#

bah si ⭕o sinon je pourrais pas trop le faire :x, je suis juste malade comme un chien donc j'ai pas mes neurones en places :x

keen narwhal
#

La dernière fois tu as dis que tu avais pris une ressource github

oak turret
#

moi ?

keen narwhal
#

oui

oak turret
#

ah non

#

c'burger qui avait mis le code du wiki

keen narwhal
#

Umhh

oak turret
#

il l'avait précisé mec

#

et de plus c'pas ça qui merde :x

keen narwhal
#

Bah si

#

Car ton message.embeds[0] ne dois pas être définit

#

Et du coup il le remplace par null

#

Enfin non il le remplace mais il n'existe même pas

#

Donc forcément il te mêt une erreur

oak turret
#

si c'pour l'id de l'uti qui fais la commande ticket

keen narwhal
#

Lis ce que j'ai mis

#

Car ton message.embeds[0] ne dois pas être définit

slim anvil
#

Lartaxx vérifie juste avec si message.embeds[0] existe

oak turret
#

je le log ouais

timid loom
#

Nan mais

#

Fais une condition

slim anvil
#

if (message && message.embeds[0] && message.embeds[0].footer....

#

pour être sur qu'il éxiste

timid loom
#

Yep

slim anvil
#

au moins là tu risques rien

#

et si il existe pas tu renvoies "no dzl"

oak turret
#

je fais ça après merci ^^

timid loom
#

Tu peux aussi tester son appartenance à un type précis par exemple

#

Avec typeof

#

Ça évite de faire des verifs sur footer etc

keen narwhal
#

Tu peux aussi stocké dans un json les id des user par rapport au Channel créé en Object pour t'éviter de mettre l'id de la personne dans l'embed ou dans le nom du Channel

#

Comme ça tu pourras aussi crée des id

#

En récupérant juste la length de ton object

#
  • 1
slim anvil
#

Le stocker ou ?

keen narwhal
#

J'avais oublié de préciser my bad

#

Edit

slim anvil
#

Il va pas créer un json pour un ticket qui va durer 5 minutes c’est pas super utile je trouve

#

Stocker l’ID dans le footer ira plus vite et ça risque pas grand chose comme dans les #suggestions

keen narwhal
#

Ouais mais question de propreté et d'apprentissage c'est toujours mieux

slim anvil
#

Bah propreté je vois pas où, apprentissage pourquoi pas

#

Tu vas rajouter des lignes à écrire dans json, vérifier si il existe alors que là tu regarde juste le message

keen narwhal
#

Ouai, mais moi j'ai tellement pris l'habitude au json que sa en devient une habitude

#

J'EN MET PARTOUT 😂

crimson fern
#

Le json c'est pas fait pour stocker

red snow
#

Oe mais quand t'es habitué à ça bah tu fais que de ça

slim anvil
#

Ouais mais il a raison c'est pas fais pour le JSON

#

tu stock en base de données

red snow
#

J'ai pas dis le contraire 🤷‍♂️

crimson fern
#

Surtout que quand ca va se corrompre

#

T'auras clairement le seum

#

Surtout pour les gros bots

timid loom
#

Et ça te limite aussi dans ta façon d'héberger le bot, tu dois absolument être autorisé à écrire dans le répertoire du bot
Hors c'est pas censé être le cas

keen narwhal
#

Comment mettre un temps à la suppression d'un message

crimson fern
#
<Message>.delete({ timeout: <TimeInMS> })```
keen narwhal
#

merci

main pulsar
#

Salut es ce qu'on pourrait m'aider a mettre des commandes personalisé a mon bot svp

red snow
#

🤔 tu as de tutos sur internet pour apprendre à faire ça, tu as aussi la documentation, qui est un peut plus compliqué si tu n'apprends que par le biais de celle-ci, mais si tu apprends seulement grâce à ça, tu vas prendre énormément d'expérience, en très peu de temps

oak turret
#

Hello, qu'est ce qui a été remplacé à la place de .find (pour vérifier la value d'un emoji.name) pour ensuite la count ? Merci ^^

red snow
#

Tu veux récupérer un emote, et avoir son count ?

oak turret
crimson fern
#

.size

oak turret
#

à la place de ?

red snow
#

Ui .size et pour le trouver je te dis ça attend

oak turret
#

à la place de count ?

crimson fern
#

oui

oak turret
#

mais dans le wiki .size n'y est pas

crimson fern
#

normal

#

enfin, c'est bizarre ils ont oublier des trucs

oak turret
#

ah :x

crimson fern
#

mais .size marche pour les collections

red snow
#

C'est du JS le .size non ?

crimson fern
#

yep

red snow
#

Normal qu'il y ait pas alors 🤷‍♂️

crimson fern
#

pourtant c'est du js pur

oak turret
#

je capte pas pourquoi ils l'ont enlevés

crimson fern
#

🤷

red snow
#

A mais vous parlez du wiki mdn je pensais que vous parliez de la doc djs :smart:

crimson fern
#

on parle de la doc djs

oak turret
#

oui doc djs

red snow
#

A

crimson fern
#

mais si .size n'y est pas, pourquoi find y est ?

red snow
#

🤷‍♂️

crimson fern
#

car les deux reviennent à du JS pur

oak turret
#

.size oui find non

crimson fern
oak turret
#

message.reaction.find(reaction => reaction.emoji.name === "❌").count, me dis que find n'existe pas donc :x

red snow
#

oui normal

#

Tu dois resolve

crimson fern
#

reactions avec un s

#

ensuite, tu dois utiliser le cache

#

et ensuite le find marchera

#

et tu devras faire un .size

oak turret
#

ah :x

crimson fern
oak turret
#

J'ai vu, mais resolve j'ai jamais use, et j'ai pas trouvé d'exemples donc je peux pas imaginer la syntaxe

#

Comme ça on est ok ?

message.reactions.cache.find(reaction => reaction.emoji.name === "✅").size}
crimson fern
#

t'as une } en trop

#

mais sinon c'est bon

oak turret
#

Oui mais car la ligne est comme ça ^^

{name: `${winner.emoji}`, value: `${message.reactions.cache.find(reaction => reaction.emoji.name === "✅").size}`, inline: false},
#

et le .size ne fonctionne pas

#

je test count on sait jamais

#

non plus xD

crimson fern
#

le find est bon

oak turret
#

yep

#

juste le .size

#

2020-05-31T14:04:12.449169+00:00 app[worker.1]: (node:4) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'count' of undefined

#

et size aussi

#

j'ai juste test count aussi

crimson fern
#

t'as essayer de voir ce que ca t'envoyais sans le .size ?

oak turret
#

nop je vais essayer

#

yep undefined

keen narwhal
#

Je me demande pourquoi quand je fais guild.... ça met undefined

#

;-;

red snow
#

Il faut qu'elle soit définit

keen narwhal
#

Ouais, mais elle est définis de base dans discord.js non ?

oak turret
#

Sinon doit y avoir une façon plus simple de le faire, mais mes émojis sont dans un array donc un ```js
const winner = reponse.emojis[0].length;

Pourrait marcher vu que length => count nombre d'entrées dans l'array
#

mais ça me mettra 1 no ?

#

ça comptera pas les réactions

crimson fern
#
                    const winner = reponse.emojis[0].length;```ca t'envoie tous les emojis là
keen narwhal
#

J'ai un p'tit problème en gros quand je fais cette commande >>help bah ça delete automatiquement le message quand la réeaction \❌ est ajouté pourtant, je ne vois pas du tout d'où l'erreur viens !

#
const Discord = require("discord.js");

module.exports = async(client, messageReaction, user) => {

    const message = messageReaction.message;
    const member = message.guild.members.cache.get(user.id);
    const emoji = messageReaction.emoji.name;

    if(["🔒", "💬", "❌"].includes(emoji)) {
        switch (emoji) {
            case "🔒":
                var W = new Discord.MessageEmbed()
                    .setColor(`#59ed45`)
                    .setTitle(`Liste de commande d'α!eχ вøт !`)
                    .setDescription("***`Commandes :`*** \n \n `clear :` Vous permets de supprimer un certain nombre de message dans le channel où vous effectuez la commande ! \n \n `kick :` Vous permet de kick la personne que vous avez mentionner ! \n \n `embed :` Vous permet d'envoyer un message de type embed avec les arguments de votre choix ! \n \n **`Son mode d'emplois :`** >>embed <hexcolor> ## <tilte> ## <description> ## <image> \n \n `prefix :` Vous permet de voir le préfix accordé au bot ! \n \n `talk :` Vous permet de faire en sorte que le bot envoit un message !")
                    .setAuthor(message.author.username)
                    .setFooter(`A!ex Bot Help !`, message.author.displayAvatarURL())
                    .setTimestamp()
                member.send(W)
            break;
        }
    
        switch (emoji) {
            case "💬":
            
            break;
        }
        switch (emoji) {
            case "❌":
                var E = new Discord.MessageEmbed()
                    .setColor(`#ed4545`)
                    .setTitle(`Commande annuler`)
                    .setDescription("❌ | La commande a bien été annuler !")
                    .setAuthor(message.author.username)
                    .setFooter(`A!ex Bot Help !`, message.author.displayAvatarURL())
                    .setTimestamp()
                message.channel.send(E).then(message.channel.bulkDelete(1))
            break;
        }
    }

}
oak turret
#

Toujours undefined xDDDD

keen narwhal
#

RIP

oak turret
#

je vois pas comment faire mdr

keen narwhal
#

De ?

oak turret
#

Compter le nombre de réactions des émojis sur un embed

#

sachant qu'ils sont dans un array

#

et que j'use une lib pour mon système de vote

crimson fern
#

mais Alex

#

tu nous dis pas le problème

#

tu nous dis juste ce qu'il doit se passer

keen narwhal
#

Bah quand je fais help et que la réaction x est ajouté par le bot, le message se delete automatiquement sauf que ça devrait pas ;-;

oak turret
#

j'ai look déjà alex

keen narwhal
#

Ah merde

oak turret
#

mais il fait == alors que je veux vérif la value déjà :x

crimson fern
#

Bah quand je fais help et que la réaction x est ajouté par le bot, le message se delete automatiquement sauf que ça devrait pas ;-;
y'as quoi qui se delete automatiquement là ?

#

fait :

                message.channel.bulkDelete(1).then(() => message.channel.send(E))
keen narwhal
#

Att je te prend un screen

crimson fern
#

essaye ce que je t'ai envoyé

keen narwhal
#

Kk

crimson fern
#

bah c'est ce que tu veux ?

keen narwhal
#

Oui, mais seulement quand on appuie sur la réaction x pas avant ;-;

crimson fern
#

bah c'est normal lolwhatthink

keen narwhal
#

xD

#

Sauf que la ca se delete avant

#

( oof l’orthographe )

crimson fern
#

fait :

message.channel.send(E).then(() => message.delete())```
keen narwhal
#

Marche toujours pas ;-;

#
module.exports = async(client, messageReaction, user) => {

    const message = messageReaction.message;
    const member = message.guild.members.cache.get(user.id);
    const emoji = messageReaction.emoji.name;

    if(message.guild.member(message.author)["🔒", "💬", "❌"].includes(emoji)) {
        switch (emoji) {
            case "🔒":
                var W = new Discord.MessageEmbed()
                    .setColor(`#59ed45`)
                    .setTitle(`Liste de commande d'α!eχ вøт !`)
                    .setDescription("***`Commandes :`*** \n \n `clear :` Vous permets de supprimer un certain nombre de message dans le channel où vous effectuez la commande ! \n \n `kick :` Vous permet de kick la personne que vous avez mentionner ! \n \n `embed :` Vous permet d'envoyer un message de type embed avec les arguments de votre choix ! \n \n **`Son mode d'emplois :`** >>embed <hexcolor> ## <tilte> ## <description> ## <image> \n \n `prefix :` Vous permet de voir le préfix accordé au bot ! \n \n `talk :` Vous permet de faire en sorte que le bot envoit un message !")
                    .setAuthor(message.author.username)
                    .setFooter(`A!ex Bot Help !`, message.author.displayAvatarURL())
                    .setTimestamp()
                member.send(W)
            break;
        }
    
        switch (emoji) {
            case "💬":
            
            break;
        }
        switch (emoji) {
            case "❌":
                var E = new Discord.MessageEmbed()
                    .setColor(`#ed4545`)
                    .setTitle(`Commande annuler`)
                    .setDescription("❌ | La commande a bien été annuler !")
                    .setAuthor(message.author.username)
                    .setFooter(`A!ex Bot Help !`, message.author.displayAvatarURL())
                    .setTimestamp()
                message.channel.send(E).then(() => message.delete())
            break;
        }
    }

}
#

Voilà le code

#

Mais du coup genre, ça me met includes is not defined

crimson fern
keen narwhal
#

Yep, normalement c’est bon, mais pourtant on peut ;-;

crimson fern
#

ca dépend qui

#

ca dépend si t'as bloqué tes mp

#

ect

keen narwhal
#

Yep, mais genre c’est pas supposé effacé directement si ?

#

Mais je vais faire en sorte, que si on peut pas, il envoie un message disant qu’il peut pas

oak turret
#

Pas d'idée pour mon pb du coup :x ?

keen narwhal
#

Nope ;-;

#

Mais du coup includes is not defined

#

Genre...

#

Je veux que se sois seulement le mec qui a fait >>help qui puisse recevoir le message

crimson fern
#

faut que tu regardes qui a réagis

#

et si c'est pas la personne qui a fait la commande

#

tu oublies

keen narwhal
#

Pour regarder qui a réagis je dois faire genre if( user.id != user.d ) { le code et sinon } else return; ?