OpenClaw

Canal Discord OpenClaw

Messagerie
Facile

Connectez OpenClaw à Discord via l'API Discord.js Bot Gateway. Créez un bot Discord dans le Developer Portal, activez les intents requis, invitez le bot sur votre serveur, et votre assistant IA est opérationnel sur Discord. Prend en charge les messages directs, les conversations dans les salons de serveur, les réactions, les fils de discussion, les commandes slash et les médias enrichis. L'un des canaux les plus faciles à configurer.

Info rapide
DifficultéFacile
CatégorieMessagerie
Fonctionnalités prises en charge5 / 6

Discord Fonctionnalités prises en charge

Messages texte

Pris en charge

Médias et fichiers

Pris en charge

Réactions

Pris en charge

Fils de discussion

Pris en charge

Messages vocaux

Non pris en charge

Discussion de groupe

Pris en charge

Discord Prérequis

  • Un compte Discord avec accès au Discord Developer Portal
  • Un Bot Token depuis le Discord Developer Portal (Applications → New Application → Bot)
  • Le Message Content Intent activé dans les Privileged Gateway Intents
  • OpenClaw Gateway en cours d'exécution et configuré

Discord Configuration rapide

1

Créer un bot Discord et activer les intents

Rendez-vous sur le Discord Developer Portal (discord.com/developers), créez une New Application, ajoutez un utilisateur Bot, et copiez le Bot Token. Sous Privileged Gateway Intents, activez 'Message Content Intent' (requis) et 'Server Members Intent' (recommandé pour la recherche de membres).

2

Ajouter la configuration du canal Discord

Ajoutez la configuration du canal Discord dans ~/.openclaw/openclaw.json. Définissez le token (ou utilisez la variable d'environnement DISCORD_BOT_TOKEN) et configurez dm.policy pour contrôler qui peut envoyer des messages directs au bot.

3

Inviter le bot sur le serveur et tester

Dans le Developer Portal, accédez à OAuth2 → URL Generator. Sélectionnez les scopes 'bot' et 'applications.commands'. Choisissez les permissions : View Channels, Send Messages, Read Message History, Embed Links, Attach Files, Add Reactions. Ouvrez l'URL générée pour inviter le bot sur votre serveur. Envoyez '@NomDuBot bonjour' pour tester.

Discord Exemple de configuration

config.json
{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_DISCORD_BOT_TOKEN",
      "dm": {
        "policy": "pairing"
      }
    }
  }
}

Discord Documentation Détaillée

Vue d'ensemble de l'architecture

OpenClaw se connecte à Discord via la bibliothèque discord.js — un puissant module Node.js pour interagir avec l'API Discord Bot Gateway. Le bot se connecte via WebSocket au gateway de Discord, recevant en temps réel les événements de messages, réactions et autres interactions. Le routage des sessions diffère selon le contexte : les conversations en message direct sont regroupées dans la session principale de l'agent (agent:main:main), tandis que les conversations dans les salons de serveur créent des sessions isolées par salon (agent:<agentId>:discord:channel:<channelId>). Les commandes slash obtiennent leurs propres sessions isolées par utilisateur. Les DM de groupe sont désactivés par défaut.
Le bot token peut être défini via la variable d'environnement DISCORD_BOT_TOKEN ou dans votre configuration sous channels.discord.token.
Activez le Mode Développeur dans Discord (Paramètres utilisateur → Avancé) pour copier facilement les Guild ID, Channel ID et User ID par clic droit.

Créer votre bot

La mise en place d'un bot Discord nécessite la création d'une application dans le Discord Developer Portal : 1. Rendez-vous sur discord.com/developers/applications 2. Cliquez sur 'New Application' et nommez-la 3. Accédez à la section Bot et cliquez sur 'Add Bot' 4. Copiez le Bot Token — conservez-le en lieu sûr 5. Sous Privileged Gateway Intents, activez : • Message Content Intent (requis — sans cela, le bot ne peut pas lire le contenu des messages) • Server Members Intent (recommandé pour la recherche de membres/rôles) 6. Accédez à OAuth2 → URL Generator 7. Sélectionnez les scopes : 'bot' et 'applications.commands' 8. Sélectionnez les permissions : View Channels, Send Messages, Read Message History, Embed Links, Attach Files, Add Reactions 9. Copiez l'URL générée et ouvrez-la pour inviter le bot sur votre serveur
Évitez d'accorder la permission Administrator sauf en cas de débogage. Utilisez les permissions minimales requises pour une meilleure sécurité.
Gardez votre bot token secret. Toute personne disposant du token peut contrôler votre bot. En cas de compromission, régénérez-le dans le Developer Portal.
Le Message Content Intent est requis pour que le bot puisse lire le texte des messages. Sans cela, le bot se connectera mais ne pourra voir aucun contenu de message.

Politiques de DM

Les politiques de DM (Message Direct) contrôlent qui peut interagir avec votre assistant IA en conversations privées. OpenClaw prend en charge quatre politiques : • pairing (par défaut) — Les expéditeurs inconnus reçoivent un code de couplage limité dans le temps (expire après 1 heure). Approuvez via 'openclaw pairing approve discord <code>' dans votre terminal. Une fois approuvé, ils peuvent discuter librement. • allowlist — Seuls les identifiants utilisateur explicitement listés dans dm.allowFrom peuvent envoyer des messages au bot. Tous les autres sont silencieusement ignorés. • open — Toute personne envoyant un DM au bot obtient une réponse. Nécessite dm.allowFrom=["*"] pour fonctionner. À utiliser avec prudence. • disabled — Le traitement des DM est complètement désactivé. Le bot ne répondra à aucun message direct.
openclaw.json
{
  "channels": {
    "discord": {
      "dm": {
        "policy": "pairing",
        "allowFrom": ["123456789012345678"]
      }
    }
  }
}

Configuration des salons de serveur

Les salons de serveur (guild) sont l'endroit où se déroulent la plupart des interactions Discord. OpenClaw offre un contrôle précis sur les serveurs et salons dans lesquels le bot opère. Paramètres de niveau supérieur : • groupPolicy — Contrôle la gestion des salons de serveur. Options : open (répondre dans tous les salons), disabled (ignorer tous les messages de serveur), allowlist (restreindre aux serveurs configurés) La configuration par serveur vous permet de personnaliser le comportement pour chaque serveur : • slug — Identifiant convivial pour l'affichage • users — Liste blanche des utilisateurs (ID ou noms) • requireMention — Si le bot doit être @mentionné • reactionNotifications — Contrôle des notifications de réactions (off, own, all, allowlist) Les règles par salon permettent un contrôle encore plus fin au sein d'un serveur : • allow — Activer/désactiver le salon • requireMention — Filtrage par mention spécifique au salon • users — Liste blanche des utilisateurs du salon • skills — Filtre de compétences (omettre pour toutes) • systemPrompt — Instructions de contexte supplémentaires pour l'IA
openclaw.json
{
  "channels": {
    "discord": {
      "groupPolicy": "open",
      "guilds": {
        "YOUR_GUILD_ID": {
          "slug": "my-server",
          "requireMention": true,
          "channels": {
            "CHANNEL_ID": {
              "allow": true,
              "requireMention": false,
              "systemPrompt": "You are a helpful assistant in this channel."
            }
          }
        }
      }
    }
  }
}
Activez le Mode Développeur dans Discord (Paramètres utilisateur → Avancé) pour copier par clic droit les Guild ID, Channel ID et User ID.
Le systemPrompt par salon vous permet de donner à l'IA des personnalités ou instructions différentes selon les salons.

Réactions et accusés de réception

OpenClaw prend en charge le système de réactions de Discord pour accuser réception des messages et recevoir des notifications de réactions. Réactions d'accusé de réception : Le bot peut réagir aux messages entrants avec un emoji pour signaler qu'il les traite. Configurez via messages.ackReaction. La réaction peut être automatiquement supprimée après la réponse de l'IA en utilisant messages.removeAckAfterReply. Notifications de réactions : Configurez par serveur quelles réactions déclenchent des notifications à l'agent : • off — Pas de notifications de réactions • own — Uniquement les réactions aux messages du bot • all — Toutes les réactions dans le salon • allowlist — Réactions des utilisateurs autorisés uniquement
openclaw.json
{
  "channels": {
    "discord": {
      "messages": {
        "ackReaction": "👀",
        "removeAckAfterReply": true
      },
      "guilds": {
        "GUILD_ID": {
          "reactionNotifications": "own"
        }
      }
    }
  }
}

Formatage et découpage des messages

Discord a une limite de 2 000 caractères par message. OpenClaw gère automatiquement les longues réponses de l'IA en les découpant. Paramètres clés : • textChunkLimit — Nombre maximum de caractères par segment de message (par défaut : 2000) • maxLinesPerMessage — Limite souple de lignes par message (par défaut : 17) • chunkMode — Stratégie de découpage : 'length' (par défaut, limite stricte de caractères) ou 'newline' (découpage aux limites de paragraphes) Le bot injecte également le contexte des messages récents du serveur (configurable via historyLimit, par défaut 20 messages) pour que l'IA puisse participer naturellement aux conversations en cours.
openclaw.json
{
  "channels": {
    "discord": {
      "textChunkLimit": 2000,
      "chunkMode": "newline",
      "historyLimit": 20
    }
  }
}

Commandes slash et actions d'outils

OpenClaw enregistre automatiquement les commandes slash natives de Discord au démarrage du bot (par défaut : auto, configurable via commands.native). Définir commands.native à false supprime les commandes précédemment enregistrées. Les commandes suivent les mêmes règles de liste blanche que les messages — les utilisateurs non autorisés voient les commandes dans l'interface Discord mais reçoivent une réponse 'non autorisé'. Isolation des sessions : Les commandes slash utilisent des clés de session séparées (agent:<agentId>:discord:slash:<userId>) plutôt que la session principale partagée, offrant une isolation par utilisateur. L'agent prend en charge un ensemble riche d'actions d'outils pour interagir avec Discord : • Messagerie — Envoyer, modifier, supprimer, épingler/désépingler des messages, rechercher des messages • Fils — Créer des fils, lister les fils, répondre dans les fils • Réactions — Réagir aux messages, lister les réactions • Modération — Mettre en sourdine, expulser, bannir des membres (désactivé par défaut) • Infos serveur — Infos membres, infos rôles, infos salons, liste des emojis • Présence — Définir le statut du bot (désactivé par défaut) Les balises de réponse permettent aux modèles de contrôler le threading des messages : • [[reply_to_current]] — Réponse en fil au message déclencheur • [[reply_to:<id>]] — Réponse en fil à un message spécifique par ID
Assurez-vous que le scope 'applications.commands' est inclus dans votre URL d'invitation OAuth2 pour que les commandes slash apparaissent.
Les outils de modération (mise en sourdine, expulsion, bannissement) et la gestion des rôles sont désactivés par défaut. Activez-les explicitement dans votre configuration si nécessaire.

Médias et gestion des fichiers

OpenClaw prend en charge l'envoi et la réception de fichiers multimédias via Discord. La taille maximale d'upload par défaut est de 8 Mo (configurable via mediaMaxMb). Opérations prises en charge : • Recevoir des pièces jointes (images et fichiers) des utilisateurs • Envoyer des images, documents et autres fichiers dans les réponses • Intégrer des liens avec aperçus enrichis Le bot nécessite la permission 'Attach Files' pour envoyer des médias dans les salons de serveur.
La limite de taille de fichier de Discord dépend du niveau de boost du serveur. Par défaut, c'est 8 Mo pour les serveurs non boostés, 50 Mo pour le Niveau 2, et 100 Mo pour le Niveau 3.

Intégration PluralKit

OpenClaw prend en charge optionnellement la résolution des messages proxy PluralKit, permettant au bot d'identifier correctement les messages provenant de systèmes PluralKit. Lorsque cette option est activée, le bot résout les messages proxy vers leur identité de membre PluralKit d'origine. Ceci est utile pour les communautés qui utilisent PluralKit pour le routage de messages système/pluriel. Détails importants : • Utilisez le préfixe pk:<memberId> dans les listes blanches pour correspondre aux membres PluralKit • Les noms de membres sont également reconnus par nom d'affichage ou slug • Les recherches utilisent l'ID du message Discord original dans la fenêtre de 30 minutes de PluralKit • Si la recherche échoue, les messages proxy sont traités comme des messages de bot (ignorés sauf si allowBots=true)
openclaw.json
{
  "channels": {
    "discord": {
      "pluralkit": {
        "enabled": true,
        "token": "pk_live_..."
      }
    }
  }
}
Les systèmes PluralKit privés nécessitent un pluralkit.token pour résoudre les membres. Sans celui-ci, les messages proxy sont traités comme des messages de bot et ignorés.
Utilisez le préfixe pk:<memberId> dans les listes blanches pour une correspondance précise des membres PluralKit.

Approbations d'exécution (interface boutons)

Discord prend en charge un flux d'approbation par boutons pour les opérations d'exécution. Lorsque cette option est activée, le bot envoie des boutons interactifs (Autoriser une fois, Toujours autoriser, Refuser) aux approbateurs désignés en DM. Cela remplace le flux d'approbation par commande /approve avec une interface plus conviviale. Prérequis : • execApprovals.enabled doit être défini à true • L'identifiant Discord de l'approbateur doit être listé dans execApprovals.approvers • Les tableaux optionnels agentFilter et sessionFilter restreignent quels agents/sessions déclenchent les approbations Note : La commande /approve <id> n'est utilisée que pour les approbations transférées. L'interface boutons Discord remplace les approbations par commande pour les interactions directes.
openclaw.json
{
  "channels": {
    "discord": {
      "execApprovals": {
        "enabled": true,
        "approvers": ["USER_ID_1", "USER_ID_2"],
        "agentFilter": [],
        "sessionFilter": []
      }
    }
  }
}
Si les boutons d'approbation n'apparaissent pas ou si vous voyez des erreurs 'unknown approval id', vérifiez que l'identifiant utilisateur est listé dans execApprovals.approvers et que execApprovals.enabled est défini à true.

Portes d'action

OpenClaw offre un contrôle précis sur les actions d'outils Discord que l'agent peut effectuer. Les actions sont contrôlées via channels.discord.actions.<action> (true/false). Activées par défaut : • reactions, stickers, emojiUploads, stickerUploads, polls, permissions, messages, threads, pins, search, memberInfo, roleInfo, channelInfo, voiceStatus, events, channels Désactivées par défaut : • roles — Gestion des rôles (assigner/retirer des rôles) • moderation — Mise en sourdine, expulsion, bannissement de membres • presence — Définir le statut/activité du bot Désactivez des actions spécifiques pour réduire les capacités du bot et limiter les risques. Par exemple, définissez channels.discord.actions.moderation=false pour s'assurer que l'agent ne puisse jamais expulser ou bannir des membres.
Suivez le principe du moindre privilège : n'activez que les actions réellement nécessaires à votre cas d'utilisation.
Des surcharges d'outils par serveur et par salon sont disponibles via guilds.<id>.tools et guilds.<id>.channels.<id>.tools pour un contrôle plus granulaire.

Résolution des listes blanches et correspondance

OpenClaw prend en charge plusieurs formats pour spécifier les utilisateurs et salons dans les listes blanches : • ID numériques (recommandé) — ex. : "123456789012345678" • Noms d'utilisateur/salon Discord — ex. : "username", "#channel-name" • Mentions — ex. : "<@userId>", "<#channelId>" • Formats préfixés — discord:, user:, channel:, pk: (pour les membres PluralKit) • Joker — "*" pour un accès sans restriction Au démarrage, OpenClaw résout les noms en ID lorsque le bot peut rechercher des membres (nécessite le Server Members Intent). La correspondance est journalisée ; les entrées non résolues sont conservées telles quelles. Détection du propriétaire : Lorsqu'une liste blanche d'utilisateurs par serveur ou par salon correspond à l'expéditeur, OpenClaw traite l'expéditeur comme propriétaire dans le prompt système. Le propriétaire global est configuré via commands.ownerAllowFrom. Héritage des fils : Les fils héritent de la configuration du salon parent (liste blanche, requireMention, skills, prompts) sauf s'ils sont explicitement listés avec l'ID de canal du fil.
Utilisez les ID numériques autant que possible pour une correspondance fiable. La résolution par nom nécessite le Server Members Intent et peut échouer pour les grands serveurs.
Le format slug est en minuscules avec les espaces remplacés par des tirets (ex. : #my-help → slug my-help).
Les sujets des salons de serveur sont injectés comme contexte mais PAS comme prompt système — traitez-les comme des entrées non fiables.

Discord Référence de Configuration

enabled
Type: booleanDefault: true

Activer ou désactiver le canal Discord

token
Type: stringDefault: ""

Bot Token Discord. Peut aussi utiliser la variable d'environnement DISCORD_BOT_TOKEN

dm.policy
Type: stringDefault: "pairing"

Contrôle qui peut envoyer des DM au bot. Options : pairing, allowlist, open, disabled

dm.allowFrom
Type: string[]Default: []

Identifiants Discord des utilisateurs autorisés à envoyer des DM au bot (quand dm.policy est allowlist)

groupPolicy
Type: stringDefault: "allowlist"

Politique de gestion des salons de serveur. Options : open, disabled, allowlist

guilds
Type: objectDefault: {}

Configuration par serveur indexée par guild ID. Inclut slug, users, channels, requireMention, etc.

requireMention
Type: booleanDefault: true

Si le bot nécessite une @mention pour répondre dans les salons de serveur

messages.ackReaction
Type: stringDefault: ""

Emoji de réaction comme accusé de réception pendant le traitement du message

messages.removeAckAfterReply
Type: booleanDefault: false

Supprimer la réaction d'accusé de réception après la réponse de l'IA

textChunkLimit
Type: numberDefault: 2000

Nombre maximum de caractères par segment de message (la limite Discord est 2000)

chunkMode
Type: stringDefault: "length"

Comment découper les longues réponses. Options : length (limite stricte de caractères), newline (limites de paragraphes)

historyLimit
Type: numberDefault: 20

Nombre de messages récents du serveur à inclure comme contexte pour l'IA

mediaMaxMb
Type: numberDefault: 8

Taille maximale des fichiers multimédias en mégaoctets pour les uploads

replyToMode
Type: stringDefault: "off"

Mode de threading des réponses. Options : off, first (premier segment uniquement en fil), all (chaque segment en fil)

configWrites
Type: booleanDefault: true

Autoriser les mises à jour de configuration initiées par Discord via les commandes /config set|unset

allowBots
Type: booleanDefault: false

Traiter les messages d'autres bots. À utiliser avec prudence pour éviter les boucles

retry.attempts
Type: numberDefault: 3

Nombre de tentatives de réessai pour les appels échoués à l'API Discord

retry.minDelayMs
Type: numberDefault: 500

Délai minimum en millisecondes entre les tentatives de réessai

retry.maxDelayMs
Type: numberDefault: 30000

Délai maximum en millisecondes entre les tentatives de réessai

retry.jitter
Type: numberDefault: 0.1

Facteur de gigue appliqué aux délais de réessai pour la randomisation

dm.enabled
Type: booleanDefault: true

Accepter ou non les messages directs

dm.groupEnabled
Type: booleanDefault: false

Activer la gestion des DM de groupe

dm.groupChannels
Type: string[]Default: []

Liste blanche des canaux de DM de groupe

dmHistoryLimit
Type: numberDefault: -

Limite d'historique DM par utilisateur (surcharge)

maxLinesPerMessage
Type: numberDefault: 17

Limite souple du nombre de lignes par segment de message

commands.native
Type: string | booleanDefault: "auto"

Enregistrement des commandes slash natives. Options : auto (activé pour Discord), true, false

commands.text
Type: objectDefault: {}

Configuration des commandes texte nécessitant des messages /... autonomes

commands.useAccessGroups
Type: booleanDefault: false

Appliquer les vérifications de groupes d'accès pour les commandes

actions.*
Type: booleanDefault: varies

Portes d'action des outils. La plupart sont activées par défaut ; roles, moderation et presence sont désactivées par défaut

pluralkit.enabled
Type: booleanDefault: false

Activer la résolution des messages proxy PluralKit

Discord Questions Fréquentes

Discord Dépannage

Le bot se connecte mais ne répond pas aux messages

Le Message Content Intent n'est pas activé, le bot n'a pas les permissions du salon, ou les exigences de mention sont mal configurées.

Vérifiez que le Message Content Intent est activé dans le Discord Developer Portal (Bot → Privileged Gateway Intents). Confirmez que le bot a les permissions View Channels, Send Messages et Read Message History. Vérifiez si requireMention est défini à true et que le bot n'est pas @mentionné.
Les DM ne fonctionnent pas

Le traitement des DM est peut-être désactivé dans la configuration, ou l'approbation de couplage est en attente.

Vérifiez que dm.policy n'est pas défini sur 'disabled'. En mode pairing, vérifiez les couplages en attente avec 'openclaw pairing list' et approuvez via 'openclaw pairing approve discord <code>'. En mode allowlist, assurez-vous que l'ID Discord de l'utilisateur est dans dm.allowFrom.
Les commandes slash ne sont pas visibles dans Discord

Le scope 'applications.commands' n'a pas été inclus dans l'URL d'invitation OAuth2 du bot.

Rendez-vous dans le Developer Portal → OAuth2 → URL Generator, assurez-vous que les scopes 'bot' et 'applications.commands' sont tous deux sélectionnés, générez une nouvelle URL d'invitation, et réinvitez le bot sur votre serveur. Les commandes slash sont soumises aux mêmes listes blanches que les messages classiques.
Le bot est limité en débit ou bloqué

Les limites de débit de l'API Discord ont été atteintes, ou la connexion au gateway est dans un mauvais état.

Redémarrez le gateway avec 'openclaw gateway --force'. OpenClaw inclut une logique de réessai intégrée avec backoff exponentiel pour les limites de débit (réponses 429). Si le problème persiste, vérifiez la configuration des réessais sous channels.discord.retry.
requireMention est false mais le bot ne répond toujours pas

groupPolicy est défini par défaut sur 'allowlist', donc le bot ne répond que dans les serveurs/salons explicitement configurés.

Définissez groupPolicy sur 'open' pour répondre dans tous les salons, ou ajoutez les ID de serveur et de salon spécifiques à la configuration guilds. Assurez-vous que l'entrée du serveur inclut le salon avec allow: true.
Les boutons d'approbation d'exécution n'apparaissent pas en DM

execApprovals n'est pas activé, ou l'ID Discord de l'utilisateur n'est pas listé dans le tableau approvers.

Définissez execApprovals.enabled à true dans la configuration de votre canal Discord. Ajoutez l'ID Discord numérique de l'utilisateur au tableau execApprovals.approvers. Utilisez l'interface boutons (pas la commande /approve) pour les approbations directes Discord.