Les fonctions peuvent être appelées dans le champ Variables d'un bloc ou directement dans le texte de réponse en utilisant #{...} :
#{discord_add_role(message_from, '1465674567090704592')}
Les identifiants de serveur, salon, rôle et message Discord sont de longues valeurs numériques. Le moyen le plus simple de les copier est d'activer Paramètres → Avancé → Mode développeur. Ensuite, l'option Copier l'ID apparaîtra dans le menu contextuel de tout objet.
La connexion du bot est décrite dans l'article Comment créer un chatbot dans Discord.
Où obtenir l'ID du message
L'ID du message qui a déclenché le bloc est stocké dans la variable discord_message_id. Vous n'avez pas besoin de le récupérer séparément :
#{discord_delete_message(discord_message_id)}
Si vous avez besoin de données qui ne sont pas disponibles dans les variables prédéfinies, le webhook complet est disponible dans la variable discord_webhook. Elle est renseignée lorsqu'une valeur est attribuée à la variable save_webhook :
data = discord_webhook["data"]
msg_id = data["id"]
result = discord_reply_to_message(msg_id, "Ceci est une réponse au message")
Variables créées automatiquement
Ces variables sont renseignées automatiquement pour chaque événement et ne nécessitent aucune configuration supplémentaire.
| Variable | Description | Exemple |
|---|---|---|
guild_id |
ID du serveur | 1465674567090704591 |
discord_event |
Type d'événement en un seul mot | message |
discord_message_id |
ID du message avec le préfixe mid
|
mid1465674569095319625 |
message_from |
ID de l'auteur de l'événement avec le préfixe uid
|
uid413984787162726410 |
from_username |
Nom d'utilisateur Discord de l'auteur | 00rei |
from_name |
Nom d'affichage de l'auteur dans le chat | Rus |
username |
Nom d'utilisateur pour les messages directs au bot | 00rei |
is_bot |
1 si l'auteur de l'événement est un autre bot |
0 |
nickname |
Surnom sur le serveur ; vide s'il n'est pas défini | Moderator |
roles |
Liste des ID des rôles de l'auteur | ["1465674567090704592"] |
is_admin |
1 si l'utilisateur est un administrateur ou le propriétaire du serveur |
1 |
reply_from |
ID de l'auteur du message auquel on répond | uid493121376652230668 |
reply_from_username |
Nom d'utilisateur de l'auteur auquel on répond | _deikin |
reply_from_name |
Nom d'affichage de l'auteur auquel on répond | Rus |
reply_to_bot |
1 si la réponse est adressée au bot |
0 |
reply_message_id |
ID du message auquel on répond | mid1534837349219958804 |
reply_text |
Texte du message auquel on répond | qui est de service aujourd'hui ? |
Les préfixes uid, cid et mid font partie de la valeur. Passez ces variables aux fonctions telles quelles ; vous n'avez pas besoin de supprimer les préfixes.
from_name vs. from_username
from_name contient le nom qui doit être utilisé pour s'adresser à l'utilisateur dans le chat :
- Surnom du serveur, s'il est défini.
- Nom d'affichage du compte.
- Nom d'utilisateur.
C'est la variable recommandée à utiliser dans les salutations car from_username peut ressembler à _deikin ou 00rei.
Les variables reply_* ne sont renseignées que lorsque le message entrant est une réponse à un autre message. Pour les messages normaux, elles sont toutes effacées.
Par conséquent, la condition suivante distingue de manière fiable une réponse d'un message normal :
#{reply_from != ''}
Les variables nickname, roles et is_admin se réfèrent à l'auteur de l'événement actuel.
Discord ne fournit pas ces données pour les événements de réaction, donc les vérifications d'administrateur doivent être effectuées sur un événement de message ou de commande slash.
Le texte du message entrant est stocké dans la variable standard question, comme dans les autres canaux.
Événements
En plus des messages normaux, des événements de service sont également envoyés dans l'entonnoir.
Leur texte est stocké dans la variable question, vous pouvez donc les traiter en utilisant des conditions de texte normales.
discord_event |
Texte dans question
|
Quand cela se produit |
|---|---|---|
message |
Texte du message | Un membre envoie un message |
message_edit |
Texte du message mis à jour | Un message est modifié |
interaction |
/warn @user spam |
Une commande slash est utilisée ou un bouton est cliqué |
reaction_add |
new_like ❤️ uid413984787162726410 |
Une réaction est ajoutée |
reaction_remove |
reaction_remove ❤️ uid413984787162726410 |
Une réaction est supprimée |
message_delete |
message_delete mid1465674569095319625 |
Un message est supprimé |
messages_delete_bulk |
messages_delete_bulk 12 |
Plusieurs messages sont supprimés |
member_join |
member_join uid413984787162726410 |
Un membre rejoint le serveur |
member_leave |
member_leave uid413984787162726410 |
Un membre quitte le serveur |
member_update |
member_update uid413984787162726410 |
Le surnom ou les rôles d'un membre changent |
member_ban |
member_ban uid413984787162726410 |
Un membre est banni |
member_unban |
member_unban uid413984787162726410 |
Un membre est débanni |
Pour une réaction personnalisée, l'ID de l'emoji personnalisé est utilisé à la place de l'emoji lui-même :
new_like beer:1479419477396291696 uid413984787162726410
Voir la section Réactions pour plus de détails.
Si un bloc doit se déclencher uniquement pour les messages normaux envoyés par les membres, ajoutez la condition suivante :
discord_event == 'message'
Cela filtre tous les événements de service en une seule fois.
Vérifier uniquement le texte de l'événement n'est pas fiable car un membre pourrait envoyer manuellement un message tel que member_join.
Important :
member_updateest déclenché par toute mise à jour d'un membre, y compris un rôle attribué par le bot lui-même. Un bloc qui réagit àmember_updateet attribue un rôle peut créer une boucle, donc ces conditions doivent toujours être restreintes de manière appropriée.
Messages
| Fonction | Description |
|---|---|
discord_send_message(channel_id, text) |
Envoyer un message dans n'importe quel salon |
discord_send_dm(user_id, text) |
Envoyer un message direct à un membre |
discord_reply_to_message(message_id, text) |
Répondre à un message |
discord_edit_message(message_id, text) |
Modifier un message envoyé par le bot |
discord_delete_message(message_id) |
Supprimer un message |
discord_bulk_delete_messages(channel_id, message_ids) |
Supprimer plusieurs messages à la fois |
discord_get_message(channel_id, message_id) |
Récupérer un message |
discord_pin_message(message_id) |
Épingler un message |
discord_unpin_message(message_id) |
Désépingler un message |
Limitations de Discord : Il n'y a pas de limite de temps pour modifier ou supprimer vos propres messages. La suppression en masse ne fonctionne que pour les messages de moins de 14 jours, et vous pouvez supprimer entre 2 et 100 messages à la fois.
Réactions
| Fonction | Description |
|---|---|
discord_send_reaction(message_id, reaction) |
Ajouter une réaction |
discord_delete_reaction(message_id, reaction, user_id) |
Supprimer une réaction. Si user_id est omis, la réaction du bot est supprimée |
Le paramètre reaction accepte soit un emoji standard, comme ❤️, soit l'ID d'un emoji personnalisé du serveur.
Où obtenir un ID de réaction personnalisée
Ajoutez la réaction personnalisée souhaitée à n'importe quel message dans le salon.
Un rappel comme celui-ci apparaîtra dans le chat :
new_like beer:1479419477396291696 uid413984787162726410
Ici :
beer:1479419477396291696
est l'ID de la réaction.
Vous pouvez le copier et l'utiliser dans les fonctions de réaction :
#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}
Les emojis standard apparaissent dans les rappels tels quels :
new_like ❤️ uid413984787162726410
où uid413984787162726410 est l'ID du membre qui a ajouté la réaction.
Modération
| Fonction | Description |
|---|---|
discord_timeout_member(user_id, seconds) |
Mettre un membre en timeout pour le nombre de secondes spécifié, jusqu'à 28 jours |
discord_remove_timeout(user_id) |
Supprimer un timeout de manière anticipée |
discord_kick_member(user_id) |
Expulser un membre du serveur ; il peut revenir en utilisant une invitation |
discord_ban_member(user_id, delete_message_seconds) |
Bannir un membre ; le deuxième argument spécifie combien de secondes d'historique de messages supprimer, jusqu'à 7 jours |
discord_unban_member(user_id) |
Débannir un membre |
Discord ne permet pas au bot de modérer un membre dont le rôle est supérieur au rôle du bot. Le propriétaire du serveur ne peut pas non plus être modéré.
Rôles et membres
| Fonction | Description |
|---|---|
discord_add_role(user_id, role_id) |
Attribuer un rôle |
discord_remove_role(user_id, role_id) |
Supprimer un rôle |
discord_get_roles() |
Obtenir les rôles du serveur et leurs ID |
discord_get_member(user_id) |
Obtenir les données d'un membre, y compris le surnom, les rôles et la date d'arrivée |
discord_set_nickname(user_id, nickname) |
Changer le surnom d'un membre sur le serveur |
Le rôle du bot doit être supérieur au rôle qu'il attribue.
Le rôle @everyone et les rôles gérés par les intégrations, y compris les rôles appartenant à d'autres bots, ne peuvent pas être attribués.
Salons et tickets
| Fonction | Description |
|---|---|
discord_create_channel(name, type, parent_id, permission_overwrites) |
Créer un salon |
discord_delete_channel(channel_id) |
Supprimer un salon |
discord_set_channel_permission(channel_id, target_id, allow, deny, type) |
Autoriser ou refuser les permissions d'un salon |
discord_create_invite(channel_id, max_age, max_uses) |
Créer un lien d'invitation |
discord_get_invites() |
Obtenir les liens d'invitation du serveur |
Pour discord_create_channel, le type par défaut est :
| Valeur | Type de salon |
|---|---|
0 |
Salon textuel |
2 |
Salon vocal |
4 |
Catégorie |
Vous pouvez passer un ID de catégorie dans parent_id pour créer le salon à l'intérieur de cette catégorie.
Pour discord_set_channel_permission, le dernier argument spécifie qui reçoit les permissions :
| Valeur | Cible |
|---|---|
1 |
Membre |
0 |
Rôle |
Les paramètres allow et deny acceptent les valeurs suivantes :
| Valeur | Permission |
|---|---|
1024 |
Voir le salon |
2048 |
Envoyer des messages |
3072 |
Voir le salon et envoyer des messages |
65536 |
Lire l'historique des messages |
Pour discord_create_invite, la durée de vie de l'invitation est spécifiée en secondes.
Par exemple :
86400
signifie 24 heures.
Une valeur max_uses de 0 signifie utilisations illimitées.
Commandes slash
| Fonction | Description |
|---|---|
discord_get_commands() |
Obtenir les commandes enregistrées sur le serveur |
discord_set_commands(commands) |
Remplacer l'ensemble des commandes |
discord_set_commands accepte une liste de commandes :
#{discord_set_commands('[
{
"name": "rules",
"description": "Afficher les règles du serveur"
},
{
"name": "warn",
"description": "Émettre un avertissement",
"options": [
{
"type": 6,
"name": "user",
"description": "Utilisateur",
"required": true
},
{
"type": 3,
"name": "reason",
"description": "Raison",
"required": false
}
]
}
]')}
Exigences de Discord
-
namedoit contenir uniquement des caractères minuscules, sans espaces, et doit avoir une longueur comprise entre 1 et 32 caractères. -
descriptionest obligatoire et doit avoir une longueur comprise entre 1 et 100 caractères. - Les options obligatoires doivent apparaître avant les options facultatives.
- Passer une liste vide supprime toutes les commandes du bot du serveur.
Types d'options
| Type | Description |
|---|---|
3 |
Chaîne de caractères |
4 |
Entier |
5 |
Booléen |
6 |
Membre |
7 |
Salon |
8 |
Rôle |
Lorsqu'une commande est appelée, elle est envoyée à l'entonnoir sous forme de chaîne telle que :
/warn @user spam
En d'autres termes, le nom de la commande et les valeurs des options sont séparés par des espaces.
Vous pouvez la traiter en utilisant une condition de texte normale.
Une fonction séparée pour les boutons n'est pas nécessaire. Les boutons sont configurés dans un bloc de réponse standard, et un clic sur un bouton est reçu de la même manière qu'une commande slash : la valeur du bouton apparaît dans le texte.
Points et Classement
L'intégration Discord inclut un système d'appréciation intégré. Des points sont attribués à l'auteur du message cité.
Vous pouvez l'utiliser pour construire des niveaux, des rangs et des classements.
| Fonction | Description |
|---|---|
discord_add_thanks_score(value) |
Ajouter des points à l'auteur du message cité |
discord_add_thanks_score_for_answer(value) |
Ajouter des points au membre qui a répondu |
discord_minus_thanks_score(value) |
Retirer des points |
discord_get_score(user_id) |
Retourner les points d'un membre sous forme de nombre. Sans argument, utilise l'auteur de l'événement |
discord_get_level(user_id, points_per_level) |
Obtenir le niveau d'un membre. Seuil par défaut : 100 points par niveau |
discord_get_user_info(user_id) |
Obtenir les points, la position dans le classement et le nom sous forme d'un seul objet |
discord_get_top(count, shift, humanize, delimiter) |
Obtenir le classement |
Pour discord_get_top :
-
count— nombre de lignes à retourner ; -
shift— nombre de lignes à sauter, utile pour la pagination ; -
humanize=true— retourne un texte prêt à être affiché ; -
delimiter— séparateur entre le nom du membre et les points.
Lors de la comparaison des points dans une condition de bloc, utilisez discord_get_score. Cette fonction retourne un nombre, donc les comparaisons numériques fonctionnent comme prévu.
Exemples
Accueillir un Nouveau Membre par Message Direct
Condition de bloc :
member_join
Dans le champ Variables :
discord_send_dm(
message_from,
'Bonjour, #{from_name}! Consultez les règles épinglées.'
)
Supprimer un Message Contenant un Mot Interdit et Mettre le Membre en Temps Mort pendant 24 Heures
Condition de bloc : une liste de mots interdits.
Condition supplémentaire :
is_admin != 1
Fonctions :
discord_delete_message(discord_message_id)
discord_timeout_member(message_from, 86400)
Attribuer un Rôle pour une Réaction à un Message Spécifique
Condition de bloc :
new_like 🍕
Condition supplémentaire :
contains(discord_message_id, '1534927170965602324')
Fonction :
discord_add_role(
message_from,
'1465674567090704592'
)
Créer un Canal de Ticket Privé à partir d'un Bouton
ticket = discord_create_channel(
'ticket-' + from_username
)
ticket_channel = get(
get(ticket, 'data'),
'id'
)
discord_set_channel_permission(
ticket_channel,
guild_id,
None,
1024,
0
)
discord_set_channel_permission(
ticket_channel,
message_from,
3072,
None,
1
)
discord_send_message(
ticket_channel,
'Décrivez votre problème en un seul message.'
)
La première ligne de permission cache le canal à tout le monde (guild_id représente ici le rôle @everyone).
La deuxième ligne rend le canal accessible au membre qui a créé le ticket.
Attribuer des Points pour les Remerciements et Assigner un Rôle Basé sur le Niveau
Condition de bloc :
thanks;thx;thank you
Condition supplémentaire :
reply_from != '' and reply_from != message_from and reply_to_bot != 1
Fonctions :
discord_add_thanks_score(1)
if (discord_get_level(reply_from) >= 1) {
discord_add_role(
reply_from,
'1465674567090704592'
)
}
La condition :
reply_from != message_from
empêche les membres de s'attribuer des points à eux-mêmes.
La condition :
reply_to_bot != 1
empêche l'attribution de points au bot.
Afficher Vos Points avec une Commande
Condition de bloc :
/xp
Dans le champ Variables :
points = discord_get_score()
lvl = discord_get_level()
Texte de réponse :
#{from_name}, vous avez #{points} XP · Niveau #{lvl}
Afficher le Classement avec une Commande
Condition de bloc :
/top
Texte de réponse :
🏆 Classement XP :
#{discord_get_top(10, 0, true, ' — ')}