Discord (API Bot)¶
Statut : pret pour les Messages prives et les canaux texte de guildes via la passerelle officielle de bot Discord.
Demarrage rapide (debutant)¶
- Creez un bot Discord et copiez le jeton du bot.
- Dans les parametres de lâapplication Discord, activez Message Content Intent (et Server Members Intent si vous prevoyez dâutiliser des allowlists ou des recherches par nom).
- Definissez le jeton pour OpenClaw :
- Env :
DISCORD_BOT_TOKEN=...- Ou config :channels.discord.token: "...". - Si les deux sont definis, la config est prioritaire (le repli env est reserve au compte par defaut). - Invitez le bot sur votre serveur avec les permissions de message (creez un serveur prive si vous voulez uniquement des Messages prives).
- Demarrez la Gateway (passerelle).
- L'accÚs DM est appairage par défaut; approuve le code d'appairage au premier contact.
Configuration minimale :
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN",
},
},
}
Objectifs¶
- Parler a OpenClaw via les Messages prives Discord ou les canaux de guilde.
- Les discussions directes se fondent dans la session principale de lâagent (par defaut
agent:main:main) ; les canaux de guilde restent isoles commeagent:<agentId>:discord:channel:<channelId>(les noms dâaffichage utilisentdiscord:<guildSlug>#<channelSlug>). - Les Messages prives de groupe sont ignores par defaut ; activez-les via
channels.discord.dm.groupEnabledet restreignez-les optionnellement avecchannels.discord.dm.groupChannels. - Conserver un routage deterministe : les reponses reviennent toujours au canal dâorigine.
Fonctionnement¶
- Creez une application Discord â Bot, activez les intents necessaires (Messages prives + messages de guilde + contenu des messages), puis recuperez le jeton du bot.
- Invitez le bot sur votre serveur avec les permissions requises pour lire/envoyer des messages la ou vous souhaitez lâutiliser.
- Configurez OpenClaw avec
channels.discord.token(ouDISCORD_BOT_TOKENen repli). - Lancez la Gateway (passerelle) ; elle demarre automatiquement le canal Discord lorsquâun jeton est disponible (config en priorite, env en repli) et que
channels.discord.enablednâest pasfalse. - Si vous preferez les variables dâenvironnement, definissezDISCORD_BOT_TOKEN(un bloc de config est optionnel). - Discussions directes : utilisez
user:<id>(ou une mention<@id>) lors de la livraison ; tous les tours arrivent dans la session partageemain. Les ID numeriques seuls sont ambigus et rejetes. - Canaux de guilde : utilisez
channel:<channelId>pour la livraison. Les mentions sont requises par defaut et peuvent etre definies par guilde ou par canal. - Discussions directes : securisees par defaut via
channels.discord.dm.policy(defaut :"pairing"). Les expĂ©diteurs inconnus recoivent un code dâappariement (expire apres 1 heure) ; approuvez viaopenclaw pairing approve discord <code>. - Pour conserver lâancien comportement « ouvert a tous » : definissezchannels.discord.dm.policy="open"etchannels.discord.dm.allowFrom=["*"]. - Pour une allowlist stricte : definissezchannels.discord.dm.policy="allowlist"et listez les expediteurs danschannels.discord.dm.allowFrom. - Pour ignorer tous les Messages prives : definissezchannels.discord.dm.enabled=falseouchannels.discord.dm.policy="disabled". - Les Messages prives de groupe sont ignores par defaut ; activez-les via
channels.discord.dm.groupEnabledet restreignez-les optionnellement avecchannels.discord.dm.groupChannels. - Regles de guilde optionnelles : definissez
channels.discord.guildsindexe par id de guilde (prefere) ou slug, avec des regles par canal. - Commandes natives optionnelles :
commands.nativevaut par defaut"auto"(active pour Discord/Telegram, desactive pour Slack). Remplacez avecchannels.discord.commands.native: true|false|"auto";falseefface les commandes precedemment enregistrees. Les commandes texte sont controlees parcommands.textet doivent etre envoyees comme messages/...autonomes. Utilisezcommands.useAccessGroups: falsepour contourner les verifications de groupes dâacces pour les commandes.- Liste complete des commandes + config : Slash commands
- Historique de contexte de guilde optionnel : definissez
channels.discord.historyLimit(defaut 20, repli surmessages.groupChat.historyLimit) pour inclure les N derniers messages de guilde comme contexte lors dâune reponse a une mention. Definissez0pour desactiver. - Reactions : lâagent peut declencher des reactions via lâoutil
discord(controle parchannels.discord.actions.*).- Semantique de suppression des reactions : voir /tools/reactions.
- Lâoutil
discordnâest expose que lorsque le canal courant est Discord.
- Les commandes natives utilisent des cles de session isolees (
agent:<agentId>:discord:slash:<userId>) plutot que la session partageemain.
Remarque : la resolution nom â id utilise la recherche de membres de guilde et necessite Server Members Intent ; si le bot ne peut pas rechercher des membres, utilisez des id ou des mentions <@id>.
Remarque : les slugs sont en minuscules avec les espaces remplaces par -. Les noms de canaux sont slugifies sans le # initial.
Remarque : les lignes de contexte de guilde [from:] incluent author.tag + id pour faciliter des reponses prĂȘtes au ping.
Ecritures de configuration¶
Par defaut, Discord est autorise a ecrire des mises a jour de configuration declenchees par /config set|unset (necessite commands.config: true).
Desactivez avec :
{
channels: { discord: { configWrites: false } },
}
Comment creer votre propre bot¶
Il sâagit de la configuration du « Discord Developer Portal » pour executer OpenClaw dans un canal de serveur (guilde) comme #help.
1. Creer lâapplication Discord + lâutilisateur bot¶
- Discord Developer Portal â Applications â New Application
- Dans votre application :
- Bot â Add Bot
- Copiez le Bot Token (câest ce que vous mettez dans
DISCORD_BOT_TOKEN)
2) Activer les intents de passerelle necessaires a OpenClaw¶
Discord bloque les « privileged intents » a moins de les activer explicitement.
Dans Bot â Privileged Gateway Intents, activez :
- Message Content Intent (requis pour lire le texte des messages dans la plupart des guildes ; sans lui vous verrez « Used disallowed intents » ou le bot se connectera sans reagir aux messages)
- Server Members Intent (recommande ; requis pour certaines recherches de membres/utilisateurs et la correspondance des allowlists dans les guildes)
Vous nâavez generalement pas besoin de Presence Intent. Definir la presence du bot (action setPresence) utilise lâOP3 de la passerelle et ne requiert pas cet intent ; il nâest necessaire que si vous souhaitez recevoir des mises a jour de presence dâautres membres de guilde.
3. Generer une URL dâinvitation (OAuth2 URL Generator)¶
Dans votre application : OAuth2 â URL Generator
Scopes
- â
bot - â
applications.commands(requis pour les commandes natives)
Bot Permissions (base minimale)
- â View Channels
- â Send Messages
- â Read Message History
- â Embed Links
- â Attach Files
- â Add Reactions (optionnel mais recommande)
- â Use External Emojis / Stickers (optionnel ; seulement si vous les voulez)
Evitez Administrator sauf pour le debogage et si vous faites entierement confiance au bot.
Copiez lâURL generee, ouvrez-la, choisissez votre serveur et installez le bot.
4. Recuperer les id (guilde/utilisateur/canal)¶
Discord utilise des id numeriques partout ; la config OpenClaw prefere les id.
- Discord (bureau/web) â User Settings â Advanced â activez Developer Mode
- Clic droit :
- Nom du serveur â Copy Server ID (id de guilde)
-
#help) â Copy Channel ID - Votre utilisateur â Copy User ID
5) Configurer OpenClaw¶
Jeton¶
Definissez le jeton du bot via variable dâenvironnement (recommande sur les serveurs) :
DISCORD_BOT_TOKEN=...
Ou via la config :
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN",
},
},
}
Prise en charge multi-comptes : utilisez channels.discord.accounts avec des jetons par compte et name optionnel. Voir gateway/configuration pour le modele partage.
Allowlist + routage des canaux¶
Exemple « un seul serveur, mâautoriser uniquement, autoriser seulement #help » :
{
channels: {
discord: {
enabled: true,
dm: { enabled: false },
guilds: {
YOUR_GUILD_ID: {
users: ["YOUR_USER_ID"],
requireMention: true,
channels: {
help: { allow: true, requireMention: true },
},
},
},
retry: {
attempts: 3,
minDelayMs: 500,
maxDelayMs: 30000,
jitter: 0.1,
},
},
},
}
Notes :
requireMention: truesignifie que le bot ne repond que lorsquâil est mentionne (recommande pour les canaux partages).agents.list[].groupChat.mentionPatterns(oumessages.groupChat.mentionPatterns) comptent aussi comme des mentions pour les messages de guilde.- Surcharge multi-agent : definissez des motifs par agent sur
agents.list[].groupChat.mentionPatterns. - Si
channelsest present, tout canal non liste est refuse par defaut. - Utilisez une entree de canal
"*"pour appliquer des valeurs par defaut a tous les canaux ; les entrees explicites de canal remplacent le joker. - Les fils (threads) heritent de la config du canal parent (allowlist,
requireMention, skills, prompts, etc.) sauf si vous ajoutez explicitement lâid du canal du fil. - Indice proprietaire : lorsquâune allowlist
userspar guilde ou par canal correspond a lâexpediteur, OpenClaw traite cet expediteur comme proprietaire dans le prompt systeme. Pour un proprietaire global entre canaux, definissezcommands.ownerAllowFrom. - Les messages rediges par des bots sont ignores par defaut ; definissez
channels.discord.allowBots=truepour les autoriser (vos propres messages restent filtres). - Avertissement : si vous autorisez les reponses a dâautres bots (
channels.discord.allowBots=true), evitez les boucles bot-a-bot avec des allowlistsrequireMention,channels.discord.guilds.*.channels.<id>.userset/ou des garde-fous clairs dansAGENTS.mdetSOUL.md.
6. Verifier le fonctionnement¶
- Demarrez la Gateway (passerelle).
- Dans votre canal de serveur, envoyez :
@Krill hello(ou quel que soit le nom de votre bot). - Si rien ne se passe : consultez Depannage ci-dessous.
Problemes courants¶
- Dâabord : lancez
openclaw doctoretopenclaw channels status --probe(avertissements actionnables + audits rapides). - « Used disallowed intents » : activez Message Content Intent (et probablement Server Members Intent) dans le Developer Portal, puis redemarrez la Gateway (passerelle).
- Le bot se connecte mais ne repond jamais dans un canal de guilde :
- Message Content Intent manquant, ou
- Le bot nâa pas les permissions du canal (View/Send/Read History), ou
- Votre config exige des mentions et vous ne lâavez pas mentionne, ou
- Votre allowlist de guilde/canal refuse le canal/lâutilisateur.
requireMention: falsemais toujours aucune reponse :channels.discord.groupPolicyest par defaut sur allowlist ; definissez-le sur"open"ou ajoutez une entree de guilde souschannels.discord.guilds(listez optionnellement les canaux souschannels.discord.guilds.<id>.channelspour restreindre).- Si vous ne definissez que
DISCORD_BOT_TOKENet ne creez jamais de sectionchannels.discord, le runtime metgroupPolicypar defaut aopen. Ajoutezchannels.discord.groupPolicy,channels.defaults.groupPolicy, ou une allowlist de guilde/canal pour verrouiller. requireMentiondoit se trouver souschannels.discord.guilds(ou un canal specifique).channels.discord.requireMentionau niveau racine est ignore.- Audits de permissions (
channels status --probe) ne verifient que les ID numeriques de canal. Si vous utilisez des slugs/noms comme cleschannels.discord.guilds.*.channels, lâaudit ne peut pas verifier les permissions. - Les Messages prives ne fonctionnent pas :
channels.discord.dm.enabled=false,channels.discord.dm.policy="disabled", ou vous nâavez pas encore ete approuve (channels.discord.dm.policy="pairing"). - Approbations dâexec dans Discord : Discord prend en charge une interface a boutons pour les approbations dâexec en Messages prives (Autoriser une fois / Toujours autoriser / Refuser).
/approve <id> ...est reserve aux approbations transferees et ne resoudra pas les invites a boutons de Discord. Si vous voyezâ Failed to submit approval: Error: unknown approval idou si lâUI nâapparait jamais, verifiez : channels.discord.execApprovals.enabled: truedans votre config.- Que votre ID utilisateur Discord figure dans
channels.discord.execApprovals.approvers(lâUI nâest envoyee quâaux approbateurs). - Utilisez les boutons dans l'invite de MP (Autoriser une fois, Toujours autoriser, Refuser).
- Voir Exec approvals et Slash commands pour le flux global dâapprobations et de commandes.
Capacites et limites¶
- Messages prives et canaux texte de guilde (les fils sont traites comme des canaux distincts ; la voix nâest pas prise en charge).
- Indicateurs de frappe envoyes au mieux ; le decoupage des messages utilise
channels.discord.textChunkLimit(defaut 2000) et separe les longues reponses par nombre de lignes (channels.discord.maxLinesPerMessage, defaut 17). - Decoupage optionnel par nouvelle ligne : definissez
channels.discord.chunkMode="newline"pour decouper sur les lignes vides (limites de paragraphes) avant le decoupage par longueur. - Televersements de fichiers pris en charge jusquâa la valeur configuree
channels.discord.mediaMaxMb(defaut 8 Mo). - Reponses de guilde conditionnees par mention par defaut pour eviter les bots bruyants.
- Le contexte de reponse est injecte lorsquâun message reference un autre message (contenu cite + id).
- Le fil de reponse natif est desactive par defaut ; activez-le avec
channels.discord.replyToModeet des balises de reponse.
Politique de nouvelle tentative¶
Les appels sortants a lâAPI Discord reessaient en cas de limitation de debit (429) en utilisant retry_after de Discord lorsque disponible, avec backoff exponentiel et jitter. Configurez via channels.discord.retry. Voir Retry policy.
Configuration¶
{
channels: {
discord: {
enabled: true,
token: "abc.123",
groupPolicy: "allowlist",
guilds: {
"*": {
channels: {
general: { allow: true },
},
},
},
mediaMaxMb: 8,
actions: {
reactions: true,
stickers: true,
emojiUploads: true,
stickerUploads: true,
polls: true,
permissions: true,
messages: true,
threads: true,
pins: true,
search: true,
memberInfo: true,
roleInfo: true,
roles: false,
channelInfo: true,
channels: true,
voiceStatus: true,
events: true,
moderation: false,
presence: false,
},
replyToMode: "off",
dm: {
enabled: true,
policy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["123456789012345678", "steipete"],
groupEnabled: false,
groupChannels: ["openclaw-dm"],
},
guilds: {
"*": { requireMention: true },
"123456789012345678": {
slug: "friends-of-openclaw",
requireMention: false,
reactionNotifications: "own",
users: ["987654321098765432", "steipete"],
channels: {
general: { allow: true },
help: {
allow: true,
requireMention: true,
users: ["987654321098765432"],
skills: ["search", "docs"],
systemPrompt: "Keep answers short.",
},
},
},
},
},
},
}
Les reactions dâaccuse de reception sont controlees globalement via messages.ackReaction +
messages.ackReactionScope. Utilisez messages.removeAckAfterReply pour effacer la reaction
dâaccuse apres la reponse du bot.
dm.enabled: definissezfalsepour ignorer tous les Messages prives (defauttrue).dm.policy: controle dâacces aux Messages prives (pairingrecommande)."open"requiertdm.allowFrom=["*"].dm.allowFrom: allowlist des Messages prives (id utilisateurs ou noms). Utilisee pardm.policy="allowlist"et pour la validationdm.policy="open". Lâassistant accepte les noms dâutilisateur et les resout en id lorsque le bot peut rechercher des membres.dm.groupEnabled: activer les Messages prives de groupe (defautfalse).dm.groupChannels: allowlist optionnelle pour les id ou slugs de canaux de Messages prives de groupe.groupPolicy: controle la gestion des canaux de guilde (open|disabled|allowlist) ;allowlistrequiert des allowlists de canaux.guilds: regles par guilde indexees par id de guilde (prefere) ou slug.guilds."*": parametres par defaut par guilde appliques lorsquâaucune entree explicite nâexiste.guilds.<id>.slug: slug convivial optionnel utilise pour les noms dâaffichage.guilds.<id>.users: allowlist utilisateur optionnelle par guilde (id ou noms).guilds.<id>.tools: surcharges optionnelles de politique dâoutils par guilde (allow/deny/alsoAllow) utilisees lorsque la surcharge de canal est absente.guilds.<id>.toolsBySender: surcharges optionnelles de politique dâoutils par expediteur au niveau de la guilde (sâapplique lorsque la surcharge de canal est absente ; joker"*"pris en charge).guilds.<id>.channels.<channel>.allow: autoriser/refuser le canal lorsquegroupPolicy="allowlist".guilds.<id>.channels.<channel>.requireMention: conditionnement par mention pour le canal.guilds.<id>.channels.<channel>.tools: surcharges optionnelles de politique dâoutils par canal (allow/deny/alsoAllow).guilds.<id>.channels.<channel>.toolsBySender: surcharges optionnelles de politique dâoutils par expediteur dans le canal (joker"*"pris en charge).guilds.<id>.channels.<channel>.users: allowlist utilisateur optionnelle par canal.guilds.<id>.channels.<channel>.skills: filtre de skill (omis = tous les Skills, vide = aucun).guilds.<id>.channels.<channel>.systemPrompt: prompt systeme supplementaire pour le canal. Les sujets de canal Discord sont injectes comme contexte non fiable (pas comme prompt systeme).guilds.<id>.channels.<channel>.enabled: definissezfalsepour desactiver le canal.guilds.<id>.channels: regles de canal (cles = slugs ou id de canaux).guilds.<id>.requireMention: exigence de mention par guilde (remplacable par canal).guilds.<id>.reactionNotifications: mode dâevenement du systeme de reactions (off,own,all,allowlist).textChunkLimit: taille de decoupage du texte sortant (caracteres). Defaut : 2000.chunkMode:length(defaut) ne decoupe que lorsquetextChunkLimitest depasse ;newlinedecoupe sur les lignes vides (limites de paragraphes) avant le decoupage par longueur.maxLinesPerMessage: nombre maximal souple de lignes par message. Defaut : 17.mediaMaxMb: plafonner les medias entrants sauvegardes sur disque.historyLimit: nombre de messages recents de guilde a inclure comme contexte lors dâune reponse a une mention (defaut 20 ; repli surmessages.groupChat.historyLimit;0desactive).dmHistoryLimit: limite dâhistorique des Messages prives en tours utilisateur. Surcharges par utilisateur :dms["<user_id>"].historyLimit.retry: politique de nouvelle tentative pour les appels sortants a lâAPI Discord (tentatives, minDelayMs, maxDelayMs, jitter).pluralkit: resoudre les messages proxifies par PluralKit afin que les membres du systeme apparaissent comme expediteurs distincts.actions: garde-fous dâoutils par action ; omettre pour autoriser tout (definirfalsepour desactiver).reactions(couvre react + lecture des reactions)stickers,emojiUploads,stickerUploads,polls,permissions,messages,threads,pins,searchmemberInfo,roleInfo,channelInfo,voiceStatus,eventschannels(creer/modifier/supprimer canaux + categories + permissions)roles(ajout/suppression de roles, defautfalse)moderation(timeout/expulsion/bannissement, defautfalse)presence(statut/activite du bot, defautfalse)execApprovals: Messages prives dâapprobation dâexec propres a Discord (UI a boutons). Prend en chargeenabled,approvers,agentFilter,sessionFilter.
Les notifications de reactions utilisent guilds.<id>.reactionNotifications :
off: aucun evenement de reaction.own: reactions sur les propres messages du bot (defaut).all: toutes les reactions sur tous les messages.allowlist: reactions provenant deguilds.<id>.userssur tous les messages (liste vide desactive).
Prise en charge de PluralKit (PK)¶
Activez les recherches PK afin que les messages proxifies se resolvent vers le systeme + membre sous-jacent.
Lorsquâactive, OpenClaw utilise lâidentite du membre pour les allowlists et libelle
lâexpediteur comme Member (PK:System) afin dâeviter les pings Discord accidentels.
{
channels: {
discord: {
pluralkit: {
enabled: true,
token: "pk_live_...", // optional; required for private systems
},
},
},
}
Notes sur les allowlists (PK active) :
- Utilisez
pk:<memberId>dansdm.allowFrom,guilds.<id>.users, ou par canalusers. - Les noms dâaffichage des membres sont aussi compares par nom/slug.
- Les recherches utilisent lâID du message Discord original (avant proxy), de sorte que lâAPI PK ne le resout que dans sa fenetre de 30 minutes.
- Si les recherches PK echouent (par ex., systeme prive sans jeton), les messages proxifies
sont traites comme des messages de bot et sont ignores sauf si
channels.discord.allowBots=true.
Action par défaut de l'outil¶
| Groupe dâactions | Par dĂ©faut | Notes |
|---|---|---|
| reactions | active | React + lister reactions + emojiList |
| stickers | active | Envoyer des stickers |
| emojiUploads | active | Televerser des emojis |
| stickerUploads | active | Televerser des stickers |
| polls | active | Creer des sondages |
| permissions | active | Instantane des permissions de canal |
| messages | active | Lire/envoyer/modifier/supprimer |
| threads | active | Creer/lister/repondre |
| pins | active | Epingler/retirer/lister |
| search | active | Recherche de messages (fonctionnalite apercu) |
| memberInfo | active | Infos membre |
| roleInfo | active | Liste des roles |
| channelInfo | active | Infos canal + liste |
| channels | active | Gestion canaux/categories |
| voiceStatus | active | Recherche d'état vocal |
| events | active | Lister/creer des evenements programmes |
| rĂŽles | desactive | Ajout/suppression de roles |
| modération | desactive | Timeout/expulsion/bannissement |
| présence | desactive | Statut/activite du bot (setPresence) |
replyToMode:off(defaut),first, ouall. Sâapplique uniquement lorsque le modele inclut une balise de reponse.
Balises de reponse¶
Pour demander une reponse en fil, le modele peut inclure une balise dans sa sortie :
[[reply_to_current]]â repondre au message Discord declencheur.[[reply_to:<id>]]â repondre a un id de message specifique depuis le contexte/historique. Les id de messages courants sont ajoutes aux prompts comme[message_id: âŠ]; les entrees dâhistorique incluent deja des id.
Le comportement est controle par channels.discord.replyToMode :
off: ignorer les balises.first: seul le premier bloc sortant/piece jointe est une reponse.all: chaque bloc sortant/piece jointe est une reponse.
Notes sur la correspondance des allowlists :
allowFrom/users/groupChannelsacceptent des id, noms, balises ou mentions comme<@id>.- Les prefixes comme
discord:/user:(utilisateurs) etchannel:(Messages prives de groupe) sont pris en charge. - Utilisez
*pour autoriser nâimporte quel expediteur/canal. - Lorsque
guilds.<id>.channelsest present, les canaux non listes sont refuses par defaut. - Lorsque
guilds.<id>.channelsest omis, tous les canaux de la guilde autorisee sont permis. - Pour nâautoriser aucun canal, definissez
channels.discord.groupPolicy: "disabled"(ou conservez une allowlist vide). - Lâassistant de configuration accepte les noms
Guild/Channel(publics + prives) et les resout en ID lorsque possible. - Au demarrage, OpenClaw resout les noms de canaux/utilisateurs des allowlists en ID (lorsque le bot peut rechercher des membres) et journalise la correspondance ; les entrees non resolues sont conservees telles quelles.
Notes sur les commandes natives :
- Les commandes enregistrees reflĂštent les commandes de chat dâOpenClaw.
- Les commandes natives respectent les memes allowlists que les Messages prives/messages de guilde (
channels.discord.dm.allowFrom,channels.discord.guilds, regles par canal). - Les slash commands peuvent rester visibles dans lâUI Discord pour des utilisateurs non autorises ; OpenClaw applique les allowlists a lâexecution et repond « not authorized ».
Actions dâoutils¶
Lâagent peut appeler discord avec des actions telles que :
react/reactions(ajouter ou lister des reactions)sticker,poll,permissionsreadMessages,sendMessage,editMessage,deleteMessage- Les charges utiles lire/rechercher/epingler incluent des
timestampMsnormalises (epoch ms UTC) ettimestampUtcaux cotes destimestampDiscord bruts. threadCreate,threadList,threadReplypinMessage,unpinMessage,listPinssearchMessages,memberInfo,roleInfo,roleAdd,roleRemove,emojiListchannelInfo,channelList,voiceStatus,eventList,eventCreatetimeout,kick,bansetPresence(activite du bot et statut en ligne)
Les id de messages Discord sont exposes dans le contexte injecte ([discord message id: âŠ] et les lignes dâhistorique) afin que lâagent puisse les cibler.
Les emojis peuvent etre unicode (par ex., â
) ou utiliser la syntaxe dâemoji personnalise comme <:party_blob:1234567890>.
Securite et exploitation¶
- Traitez le jeton du bot comme un mot de passe ; privilegiez la variable dâenvironnement
DISCORD_BOT_TOKENsur des hĂŽtes supervises ou verrouillez les permissions du fichier de configuration. - Nâaccordez au bot que les permissions necessaires (generalement Lire/Envoyer des messages).
- Si le bot est bloque ou limite par le debit, redemarrez la Gateway (passerelle) (
openclaw gateway --force) apres avoir confirme quâaucun autre processus ne detient la session Discord.