1.0.7 • Published 4 years ago
discord-class-extend v1.0.7
discord-class-extend
Un etendeur de class pour Discord.js
Comment l'installé ?
npm i discord-class-extend
Comment le setup ?
const discord = require('discord.js'); //Defini le module discord.js
const client = new discord.Client(); //Crée un client pour discord
require('discord-class-extend')(client);
Fonctions actuellement disponible ?
<message>.buttons { functions (async) }
//Assuré vous de l'utilisé sur une propriété <message>
<message>.buttons("content",{ //Vous pouvez mettre l'object directement à la place du content, (pensez à ajouté `content: "Mon contenu"`)
components:[ //Components, pourra prochainement ne pas forcément être un bouton
{
buttons:[
{
style:"blurple", //Par défault blurple, mais peut être : ["blurple","red", "grey","green","url"]
label:"Un Label", //Optionnel si il y a un emoji
emoji: { //Optionnel si il y a un label
name: "UltraJoy", //Doit être un émoji unicode si il est par défault fournis par discord
id: "664530307495624744", //Argument optionnel si l'émoji est custom
animated: false //Argument optionnel si l'émoji est animé (par défault false)
},
id:"custom_id" //Obligatoire si le style n'est pas "url"
},{
style: "url",
emoji: {
name: "😋",
},
url:"https://discord.com" //Button de type URL sans aucun label
}
],
buttons:[
{
style:"green",
emoji: {
name: "UltraJoy",
id: "664530307495624744", //Une seconde ligne de boutons
animated: false
},
id:"custom_id"
}
]
}
]
})
<message>.buttonsReply { functions (async) }
<message>.buttonsReply("content",MessageObject) //Voir message.buttons pour la définition claire
<message>.buttonsEdit { functions (async) }
<message>.buttonsEdit("content",MessageObject) //Voir message.buttons pour la définition claire
<message>.inlineReply { functions (async) }
<message>.inlineReply("content",{
mention: true
})
// Ou
<message>.inlineReply({
content: "content",
mention: true
})
Comment réagir aux boutons ?
Dans votre event "ready" intégré ceci :
<client>.ws.on('INTERACTION_CREATE', async interaction => {
if(interaction.data.name){
client.emit('slashCommands',interaction)
}else {
client.emit('button',interaction)
}
})
Deux nouveaux event ont été créer :
- slashCommands
- buttons
Pour une slashCommand voici l'objet reçu :
{
"type": 2,
"token": "A_UNIQUE_TOKEN",
"member": {
"user": {
"id": 53908232506183680,
"username": "Mason",
"avatar": "a_d5efa99b3eeaa7dd43acca82f5692432",
"discriminator": "1337",
"public_flags": 131141
},
"roles": ["539082325061836999"],
"premium_since": null,
"permissions": "2147483647",
"pending": false,
"nick": null,
"mute": false,
"joined_at": "2017-03-13T19:19:14.040000+00:00",
"is_pending": false,
"deaf": false
},
"id": "786008729715212338",
"guild_id": "290926798626357999",
"data": {
"options": [{
"name": "cardname",
"value": "The Gitrog Monster"
}],
"name": "cardsearch",
"id": "771825006014889984"
},
"channel_id": "645027906669510667"
}
Pour un button voici l'objet reçu :
{
"version": 1,
"type": 3,
"token": "unique_interaction_token",
"message": {
"type": 0,
"tts": false,
"timestamp": "2021-05-19T02:12:51.710000+00:00",
"pinned": false,
"mentions": [],
"mention_roles": [],
"mention_everyone": false,
"id": "844397162624450620",
"flags": 0,
"embeds": [],
"edited_timestamp": null,
"content": "This is a message with components.",
"components": [
{
"type": 1,
"components": [
{
"type": 2,
"label": "Click me!",
"style": 1,
"custom_id": "click_one"
}
]
}
],
"channel_id": "345626669114982402",
"author": {
"username": "Mason",
"public_flags": 131141,
"id": "53908232506183680",
"discriminator": "1337",
"avatar": "a_d5efa99b3eeaa7dd43acca82f5692432"
},
"attachments": []
},
"member": {
"user": {
"username": "Mason",
"public_flags": 131141,
"id": "53908232506183680",
"discriminator": "1337",
"avatar": "a_d5efa99b3eeaa7dd43acca82f5692432"
},
"roles": [
"290926798626357999"
],
"premium_since": null,
"permissions": "17179869183",
"pending": false,
"nick": null,
"mute": false,
"joined_at": "2017-03-13T19:19:14.040000+00:00",
"is_pending": false,
"deaf": false,
"avatar": null
},
"id": "846462639134605312",
"guild_id": "290926798626357999",
"data": {
"custom_id": "click_one",
"component_type": 2
},
"channel_id": "345626669114982999",
"application_id": "290926444748734465"
}
Pour y répondre utilisé ce bout de code très simple :
//Pour répondre à un bouton
client.on("button", button => {
client.api.interactions(button.id, button.token).callback.post({data: {
type: 4,
data: {
flags: 64,
content: "Mon super message de réponse !"
},
}})
})
//Pour répondre à une slash commande
client.on("slashCommands", slash => {
client.api.interactions(slash.id, slash.token).callback.post({data: {
type: 4,
data: {
flags: 64,
content: "Mon super message de réponse !"
},
}})
})
Régle importante :
- Vous pouvez seulement mettre 5 boutons par buttonsObject
<buttons:[]>
- Vous pouvez faire jusqu'a 5 lignes de components
- Vous pouvez intégré 25 colonnes par message (soit 25 boutons pour un seul message