Module Discord
Un bot Rawtoh dans votre serveur Discord — messages, réactions, rôles, MP et commandes slash.
Le module Discord ajoute le bot Rawtoh à votre serveur. Tout ce qui s’y passe — messages, réactions, arrivées de membres, commandes slash — arrive sous forme d’événements, et vos actions peuvent publier, réagir, attribuer des rôles ou répondre à une commande.
Premiers pas
- Ouvrez le site du module Discord et connectez-vous avec votre compte Rawtoh — même session que le tableau de bord
- Choisissez votre organisation et cliquez sur Add to a Discord server. Discord demande dans quel serveur ajouter le bot ; il vous faut la permission Gérer le serveur
- De retour sur le site du module, cliquez sur Installer avec Rawtoh. Le serveur devient une instance de module dans votre organisation. Vous devez avoir le rôle propriétaire
Chaque serveur est une instance à part : un serveur communautaire et un serveur de modération cohabitent, ciblés avec module("discord", "<instance>"). Un serveur n’appartient qu’à une organisation à la fois.
Les identifiants de salons, rôles, membres et messages sont des snowflakes Discord. Pour en copier un, activez le mode développeur dans Discord (Paramètres → Avancés), puis clic droit sur un salon, un rôle ou un membre et Copier l’identifiant. channel.list et role.list les renvoient aussi.
Événements
| Événement | Description |
|---|---|
message.create | Un message est publié dans le serveur (hors messages du bot). Payload : id, channel_id, author, content, timestamp, reply_to |
message.delete | Un message est supprimé |
reaction.add | Quelqu’un réagit à un message. emoji est le caractère, ou nom:id pour un emoji personnalisé |
member.join | Un membre rejoint le serveur |
member.leave | Un membre part ou est retiré |
command.invoke | Un membre utilise une commande slash du serveur. Payload : name, options, user, channel_id, token |
Les événements couvrent tout le serveur. Pour ne réagir que dans un salon, filtrez sur channel_id dans le déclencheur :
import { event } from "rawtoh"
export default event.payload.channel_id === "123456789012345678"
&& event.payload.content.startsWith("!clip")Ce que vous pouvez faire
Messages
message.send— publier dans un salon, éventuellement en réponse avecreply_to.@everyoneet@herene notifient jamaismessage.edit/message.delete— modifier ou supprimer un message du botmessage.react— ajouter une réactiondm.send— envoyer un message privé à un membre du serveur
Membres et rôles
member.get— un membre et ses rôlesmember.add_role/member.remove_roleguild.get,channel.list,role.list— le serveur, ses salons et ses rôles
Commandes slash
command.create/command.update/command.delete— gérer les commandes du serveur par leur nom. Les options suivent le format Discord (type 3 texte, 4 entier, 5 booléen, 6 membre, 7 salon)command.list/command.getcommand.reply— répondre à une commande avec letokende son événement
Les commandes slash, pas à pas
Les commandes se déclarent une fois par serveur, sur le site du module sous Commands, ou depuis une action :
import { module } from "rawtoh"
await module("discord").request("command.create", {
name: "stats",
description: "Les stats du stream du jour",
options: [{ type: 3, name: "periode", description: "jour ou semaine", required: false }],
})Quand un membre tape /stats, Discord affiche « Rawtoh réfléchit… » et le module émet command.invoke. Un déclencheur choisit la commande par son nom :
import { event } from "rawtoh"
export default event.payload.name === "stats"et l’action répond avec command.reply, qui remplace le « réfléchit… ». Vous avez 15 minutes ; au-delà, Discord affiche « n’a pas répondu ». message.send publierait un message à part et laisserait le « réfléchit… » en plan.
import { event, module, storage } from "rawtoh"
const subs = (await storage.get("subs-du-jour")) ?? 0
await module("discord").request("command.reply", {
token: event.payload.token,
content: `${subs} nouveaux abonnés aujourd'hui, demandé par ${event.payload.user.username}`,
})Exemple : accueillir les nouveaux membres
Un déclencheur sur member.join et cette action :
import { event, module } from "rawtoh"
await module("discord").request("message.send", {
channel_id: "123456789012345678",
content: `Bienvenue <@${event.payload.user.id}> ! Choisis un rôle dans #roles.`,
})
await module("discord").request("member.add_role", {
user_id: event.payload.user.id,
role_id: "987654321098765432",
})Exemples d’automatisations
- Le stream passe en live sur Twitch → publier l’annonce dans #live avec le titre et la catégorie
- Commande slash →
/clipcrée un clip Twitch et répond avec le lien - Réaction ajoutée → attribuer le rôle correspondant pour un message de rôles par réaction
- Message dans #suggestions → réagir avec 👍 et 👎 pour ouvrir le vote
- Cron chaque matin → publier le récap de la veille dans #stats