Discord (Bot API)
Status: siap untuk DM dan saluran guild melalui gateway Discord resmi.Pairing
Slash commands
Pemecahan masalah saluran
Penyiapan cepat
Anda perlu membuat aplikasi baru dengan bot, menambahkan bot ke server Anda, lalu memasangkannya ke OpenClaw. Kami merekomendasikan menambahkan bot Anda ke server pribadi Anda sendiri. Jika Anda belum punya, buat dulu (pilih Create My Own > For me and my friends).Buat aplikasi dan bot Discord
Aktifkan intent istimewa
- Message Content Intent (wajib)
- Server Members Intent (direkomendasikan; wajib untuk allowlist peran dan pencocokan nama-ke-ID)
- Presence Intent (opsional; hanya diperlukan untuk pembaruan presence)
Salin token bot Anda
Buat URL undangan dan tambahkan bot ke server Anda
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (opsional)
Aktifkan Developer Mode dan kumpulkan ID Anda
- Klik User Settings (ikon roda gigi di samping avatar Anda) → Advanced → aktifkan Developer Mode
- Klik kanan ikon server Anda di bilah sisi → Copy Server ID
- Klik kanan avatar Anda sendiri → Copy User ID
Izinkan DM dari anggota server
Setel token bot Anda dengan aman (jangan kirim di chat)
openclaw gateway run.Konfigurasikan OpenClaw dan lakukan pairing
- Minta agen Anda
- CLI / config
“Saya sudah menetapkan token bot Discord saya di config. Tolong selesaikan penyiapan Discord dengan User ID<user_id>dan Server ID<server_id>.”
Setujui pairing DM pertama
- Minta agen Anda
- CLI
“Setujui kode pairing Discord ini: <CODE>”
DISCORD_BOT_TOKEN hanya digunakan untuk akun default.
Untuk panggilan outbound lanjutan (aksi alat pesan/saluran), token eksplisit per panggilan digunakan untuk panggilan tersebut. Ini berlaku untuk aksi bergaya kirim dan baca/probe (misalnya read/search/fetch/thread/pins/permissions). Pengaturan kebijakan/retry akun tetap berasal dari akun yang dipilih dalam snapshot runtime aktif.Rekomendasi: siapkan workspace guild
Setelah DM berfungsi, Anda dapat menyiapkan server Discord Anda sebagai workspace penuh di mana setiap saluran mendapatkan sesi agen sendiri dengan konteksnya sendiri. Ini direkomendasikan untuk server pribadi yang hanya berisi Anda dan bot Anda.Tambahkan server Anda ke guild allowlist
- Minta agen Anda
- Config
“Tambahkan Server ID Discord saya <server_id> ke guild allowlist”
Izinkan respons tanpa @mention
- Minta agen Anda
- Config
“Izinkan agen saya merespons di server ini tanpa harus di-@mention”
Rencanakan memori di saluran guild
- Minta agen Anda
- Manual
“Saat saya mengajukan pertanyaan di saluran Discord, gunakan memory_search atau memory_get jika Anda memerlukan konteks jangka panjang dari MEMORY.md.”
#coding, #home, #research, atau apa pun yang sesuai dengan alur kerja Anda.
Model runtime
- Gateway memiliki koneksi Discord.
- Perutean balasan bersifat deterministik: balasan masuk dari Discord dikembalikan ke Discord.
- Secara default (
session.dmScope=main), chat langsung berbagi sesi utama agen (agent:main:main). - Saluran guild adalah kunci sesi terisolasi (
agent:<agentId>:discord:channel:<channelId>). - Group DM diabaikan secara default (
channels.discord.dm.groupEnabled=false). - Slash command native berjalan dalam sesi perintah terisolasi (
agent:<agentId>:discord:slash:<userId>), sambil tetap membawaCommandTargetSessionKeyke sesi percakapan yang dirutekan.
Saluran forum
Saluran forum dan media Discord hanya menerima posting thread. OpenClaw mendukung dua cara untuk membuatnya:- Kirim pesan ke induk forum (
channel:<forumId>) untuk membuat thread otomatis. Judul thread menggunakan baris pertama pesan Anda yang tidak kosong. - Gunakan
openclaw message thread createuntuk membuat thread secara langsung. Jangan berikan--message-iduntuk saluran forum.
channel:<threadId>).
Komponen interaktif
OpenClaw mendukung container komponen v2 Discord untuk pesan agen. Gunakan alat pesan dengan payloadcomponents. Hasil interaksi dirutekan kembali ke agen sebagai pesan masuk biasa dan mengikuti pengaturan Discord replyToMode yang ada.
Blok yang didukung:
text,section,separator,actions,media-gallery,file- Baris aksi mengizinkan hingga 5 tombol atau satu menu pilih
- Tipe select:
string,user,role,mentionable,channel
components.reusable=true agar tombol, select, dan formulir dapat digunakan berkali-kali sampai kedaluwarsa.
Untuk membatasi siapa yang dapat mengeklik tombol, tetapkan allowedUsers pada tombol tersebut (ID pengguna Discord, tag, atau *). Jika dikonfigurasi, pengguna yang tidak cocok akan menerima penolakan ephemeral.
Slash command /model dan /models membuka pemilih model interaktif dengan dropdown provider dan model serta langkah Submit. Balasan pemilih bersifat ephemeral dan hanya pengguna yang memanggilnya yang dapat menggunakannya.
Lampiran file:
- blok
fileharus menunjuk ke referensi lampiran (attachment://<filename>) - Berikan lampiran melalui
media/path/filePath(satu file); gunakanmedia-galleryuntuk beberapa file - Gunakan
filenameuntuk mengganti nama unggahan saat harus cocok dengan referensi lampiran
- Tambahkan
components.modaldengan hingga 5 field - Tipe field:
text,checkbox,radio,select,role-select,user-select - OpenClaw otomatis menambahkan tombol pemicu
Kontrol akses dan perutean
- Kebijakan DM
- Kebijakan guild
- Mention dan group DM
channels.discord.dmPolicy mengontrol akses DM (legacy: channels.discord.dm.policy):pairing(default)allowlistopen(memerlukanchannels.discord.allowFrommencakup"*"; legacy:channels.discord.dm.allowFrom)disabled
pairing).Prioritas multi-akun:channels.discord.accounts.default.allowFromhanya berlaku untuk akundefault.- Akun bernama mewarisi
channels.discord.allowFromsaatallowFrommereka sendiri tidak ditetapkan. - Akun bernama tidak mewarisi
channels.discord.accounts.default.allowFrom.
user:<id>- mention
<@id>
Perutean agen berbasis peran
Gunakanbindings[].match.roles untuk merutekan anggota guild Discord ke agen yang berbeda berdasarkan ID peran. Binding berbasis peran hanya menerima ID peran dan dievaluasi setelah binding peer atau parent-peer dan sebelum binding khusus guild. Jika suatu binding juga menetapkan field pencocokan lain (misalnya peer + guildId + roles), semua field yang dikonfigurasi harus cocok.
Penyiapan Developer Portal
Buat aplikasi dan bot
Buat aplikasi dan bot
- Discord Developer Portal -> Applications -> New Application
- Bot -> Add Bot
- Salin token bot
Intent istimewa
Intent istimewa
- Message Content Intent
- Server Members Intent (direkomendasikan)
setPresence) tidak memerlukan pembaruan presence untuk anggota diaktifkan.Cakupan OAuth dan izin baseline
Cakupan OAuth dan izin baseline
- scopes:
bot,applications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions (opsional)
Administrator kecuali benar-benar diperlukan.Salin ID
Salin ID
- ID server
- ID saluran
- ID pengguna
Perintah native dan autentikasi perintah
commands.nativesecara default bernilai"auto"dan diaktifkan untuk Discord.- Override per saluran:
channels.discord.commands.native. commands.native=falsesecara eksplisit menghapus perintah native Discord yang sebelumnya terdaftar.- Autentikasi perintah native menggunakan allowlist/kebijakan Discord yang sama seperti penanganan pesan biasa.
- Perintah mungkin tetap terlihat di UI Discord bagi pengguna yang tidak berwenang; eksekusi tetap menerapkan autentikasi OpenClaw dan mengembalikan “not authorized”.
ephemeral: true
Detail fitur
Tag balasan dan balasan native
Tag balasan dan balasan native
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode:off(default)firstallbatched
off menonaktifkan threading balasan implisit. Tag [[reply_to_*]] eksplisit tetap dihormati.
first selalu melampirkan referensi balasan native implisit ke pesan Discord keluar pertama untuk giliran tersebut.
batched hanya melampirkan referensi balasan native implisit Discord ketika
giliran masuk adalah batch terdebounce dari beberapa pesan. Ini berguna
ketika Anda menginginkan balasan native terutama untuk chat yang ambigu dan ramai, bukan untuk setiap
giliran satu pesan.ID pesan dimunculkan dalam konteks/riwayat sehingga agen dapat menargetkan pesan tertentu.Pratinjau live stream
Pratinjau live stream
channels.discord.streamingmengontrol streaming pratinjau (off|partial|block|progress, default:off).- Default tetap
offkarena edit pratinjau Discord dapat dengan cepat terkena batas laju, terutama ketika beberapa bot atau gateway berbagi akun atau lalu lintas guild yang sama. progressditerima untuk konsistensi lintas saluran dan dipetakan kepartialdi Discord.channels.discord.streamModeadalah alias legacy dan dimigrasikan otomatis.partialmengedit satu pesan pratinjau saat token tiba.blockmengeluarkan potongan seukuran draf (gunakandraftChunkuntuk menyesuaikan ukuran dan breakpoint).
block (dibatasi ke channels.discord.textChunkLimit):Riwayat, konteks, dan perilaku thread
Riwayat, konteks, dan perilaku thread
channels.discord.historyLimitdefault20- fallback:
messages.groupChat.historyLimit 0menonaktifkan
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Thread Discord dirutekan sebagai sesi saluran
- metadata thread induk dapat digunakan untuk keterkaitan sesi induk
- config thread mewarisi config saluran induk kecuali ada entri khusus thread
Sesi terikat thread untuk subagen
Sesi terikat thread untuk subagen
/focus <target>mengikat thread saat ini/baru ke target subagen/sesi/unfocusmenghapus binding thread saat ini/agentsmenampilkan run aktif dan status binding/session idle <duration|off>memeriksa/memperbarui auto-unfocus karena tidak aktif untuk binding yang difokuskan/session max-age <duration|off>memeriksa/memperbarui usia maksimum keras untuk binding yang difokuskan
session.threadBindings.*menetapkan default global.channels.discord.threadBindings.*menggantikan perilaku Discord.spawnSubagentSessionsharus bernilai true untuk membuat/mengikat thread otomatis bagisessions_spawn({ thread: true }).spawnAcpSessionsharus bernilai true untuk membuat/mengikat thread otomatis bagi ACP (/acp spawn ... --thread ...atausessions_spawn({ runtime: "acp", thread: true })).- Jika thread binding dinonaktifkan untuk suatu akun,
/focusdan operasi thread binding terkait tidak tersedia.
Binding saluran ACP persisten
Binding saluran ACP persisten
bindings[]dengantype: "acp"danmatch.channel: "discord"
/acp spawn codex --bind heremengikat saluran atau thread Discord saat ini di tempat dan menjaga agar pesan mendatang tetap dirutekan ke sesi ACP yang sama.- Itu masih dapat berarti “memulai sesi ACP Codex baru”, tetapi tidak dengan sendirinya membuat thread Discord baru. Saluran yang ada tetap menjadi permukaan chat.
- Codex mungkin tetap berjalan dalam
cwdatau workspace backend tersendiri di disk. Workspace itu adalah state runtime, bukan thread Discord. - Pesan thread dapat mewarisi binding ACP saluran induk.
- Dalam saluran atau thread yang terikat,
/newdan/resetmereset sesi ACP yang sama di tempat. - Thread binding sementara tetap berfungsi dan dapat menggantikan resolusi target saat aktif.
spawnAcpSessionshanya diperlukan ketika OpenClaw perlu membuat/mengikat thread anak melalui--thread auto|here. Ini tidak diperlukan untuk/acp spawn ... --bind heredi saluran saat ini.
Notifikasi reaksi
Notifikasi reaksi
offown(default)allallowlist(menggunakanguilds.<id>.users)
Reaksi ack
Reaksi ack
ackReaction mengirim emoji pengakuan saat OpenClaw sedang memproses pesan masuk.Urutan resolusi:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- fallback emoji identitas agen (
agents.list[].identity.emoji, jika tidak ada ”👀”)
- Discord menerima emoji unicode atau nama emoji kustom.
- Gunakan
""untuk menonaktifkan reaksi untuk saluran atau akun.
Penulisan config
Penulisan config
/config set|unset (saat fitur perintah diaktifkan).Nonaktifkan:Proxy gateway
Proxy gateway
channels.discord.proxy.Dukungan PluralKit
Dukungan PluralKit
- allowlist dapat menggunakan
pk:<memberId> - nama tampilan anggota dicocokkan berdasarkan nama/slug hanya ketika
channels.discord.dangerouslyAllowNameMatching: true - lookup menggunakan ID pesan asli dan dibatasi oleh jendela waktu
- jika lookup gagal, pesan yang diproksikan diperlakukan sebagai pesan bot dan dibuang kecuali
allowBots=true
Konfigurasi presence
Konfigurasi presence
- 0: Playing
- 1: Streaming (memerlukan
activityUrl) - 2: Listening
- 3: Watching
- 4: Custom (menggunakan teks activity sebagai status state; emoji opsional)
- 5: Competing
autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(mendukung placeholder{reason})
Persetujuan di Discord
Persetujuan di Discord
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(opsional; fallback kecommands.ownerAllowFromjika memungkinkan)channels.discord.execApprovals.target(dm|channel|both, default:dm)agentFilter,sessionFilter,cleanupAfterResolve
enabled tidak ditetapkan atau "auto" dan setidaknya satu approver dapat diresolusikan, baik dari execApprovals.approvers atau dari commands.ownerAllowFrom. Discord tidak menyimpulkan approver exec dari allowFrom saluran, dm.allowFrom legacy, atau defaultTo direct-message. Tetapkan enabled: false untuk menonaktifkan Discord sebagai klien persetujuan native secara eksplisit.Saat target adalah channel atau both, prompt persetujuan terlihat di saluran. Hanya approver yang dapat diresolusikan yang dapat menggunakan tombol; pengguna lain menerima penolakan ephemeral. Prompt persetujuan menyertakan teks perintah, jadi hanya aktifkan pengiriman saluran di saluran tepercaya. Jika ID saluran tidak dapat diturunkan dari session key, OpenClaw kembali ke pengiriman DM.Discord juga merender tombol persetujuan bersama yang digunakan oleh saluran chat lain. Adapter Discord native terutama menambahkan perutean DM approver dan fanout saluran.
Saat tombol-tombol itu ada, tombol tersebut adalah UX persetujuan utama; OpenClaw
hanya seharusnya menyertakan perintah /approve manual ketika hasil alat menyatakan
persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.Autentikasi gateway untuk handler ini menggunakan kontrak resolusi kredensial bersama yang sama seperti klien Gateway lainnya:- autentikasi lokal env-first (
OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORDlalugateway.auth.*) - dalam mode lokal,
gateway.remote.*dapat digunakan sebagai fallback hanya ketikagateway.auth.*tidak ditetapkan; SecretRef lokal yang dikonfigurasi namun tidak dapat diresolusikan gagal secara tertutup - dukungan mode remote melalui
gateway.remote.*bila berlaku - override URL aman terhadap override: override CLI tidak menggunakan ulang kredensial implisit, dan override env hanya menggunakan kredensial env
- ID yang diawali
plugin:diresolusikan melaluiplugin.approval.resolve. - ID lainnya diresolusikan melalui
exec.approval.resolve. - Discord tidak melakukan lompatan fallback exec-ke-plugin tambahan di sini; prefiks id menentukan metode gateway mana yang dipanggil.
Alat dan gerbang aksi
Aksi pesan Discord mencakup pesan, administrasi saluran, moderasi, presence, dan aksi metadata. Contoh inti:- pesan:
sendMessage,readMessages,editMessage,deleteMessage,threadReply - reaksi:
react,reactions,emojiList - moderasi:
timeout,kick,ban - presence:
setPresence
event-create menerima parameter image opsional (URL atau path file lokal) untuk menetapkan gambar sampul event terjadwal.
Gerbang aksi berada di bawah channels.discord.actions.*.
Perilaku gerbang default:
| Kelompok aksi | Default |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled |
| roles | disabled |
| moderation | disabled |
| presence | disabled |
UI komponen v2
OpenClaw menggunakan komponen v2 Discord untuk persetujuan exec dan penanda lintas konteks. Aksi pesan Discord juga dapat menerimacomponents untuk UI kustom (lanjutan; memerlukan pembuatan payload komponen melalui alat discord), sementara embeds legacy tetap tersedia tetapi tidak direkomendasikan.
channels.discord.ui.components.accentColormenetapkan warna aksen yang digunakan oleh container komponen Discord (hex).- Tetapkan per akun dengan
channels.discord.accounts.<id>.ui.components.accentColor. embedsdiabaikan ketika komponen v2 ada.
Saluran suara
OpenClaw dapat bergabung ke saluran suara Discord untuk percakapan realtime yang berkelanjutan. Ini terpisah dari lampiran pesan suara. Persyaratan:- Aktifkan perintah native (
commands.nativeatauchannels.discord.commands.native). - Konfigurasikan
channels.discord.voice. - Bot memerlukan izin Connect + Speak di saluran suara target.
/vc join|leave|status untuk mengontrol sesi. Perintah ini menggunakan agen default akun dan mengikuti aturan allowlist dan group policy yang sama seperti perintah Discord lainnya.
Contoh auto-join:
voice.ttsmenggantikanmessages.ttshanya untuk pemutaran suara.- Giliran transkrip suara menurunkan status owner dari Discord
allowFrom(ataudm.allowFrom); pembicara non-owner tidak dapat mengakses alat khusus owner (misalnyagatewaydancron). - Voice diaktifkan secara default; tetapkan
channels.discord.voice.enabled=falseuntuk menonaktifkannya. voice.daveEncryptiondanvoice.decryptionFailureTolerancediteruskan ke opsi join@discordjs/voice.- Default
@discordjs/voiceadalahdaveEncryption=truedandecryptionFailureTolerance=24jika tidak ditetapkan. - OpenClaw juga memantau kegagalan dekripsi saat menerima dan melakukan pemulihan otomatis dengan keluar/bergabung ulang ke saluran suara setelah kegagalan berulang dalam jangka waktu singkat.
- Jika log penerimaan berulang kali menampilkan
DecryptionFailed(UnencryptedWhenPassthroughDisabled), ini mungkin bug penerimaan upstream@discordjs/voiceyang dilacak di discord.js #11419.
Pesan suara
Pesan suara Discord menampilkan pratinjau waveform dan memerlukan audio OGG/Opus beserta metadata. OpenClaw menghasilkan waveform secara otomatis, tetapi memerlukanffmpeg dan ffprobe tersedia di host gateway untuk memeriksa dan mengonversi file audio.
Persyaratan dan batasan:
- Berikan path file lokal (URL ditolak).
- Hilangkan konten teks (Discord tidak mengizinkan teks + pesan suara dalam payload yang sama).
- Format audio apa pun diterima; OpenClaw mengonversi ke OGG/Opus bila diperlukan.
Pemecahan masalah
Menggunakan intent yang tidak diizinkan atau bot tidak melihat pesan guild
Menggunakan intent yang tidak diizinkan atau bot tidak melihat pesan guild
- aktifkan Message Content Intent
- aktifkan Server Members Intent saat Anda bergantung pada resolusi pengguna/anggota
- mulai ulang gateway setelah mengubah intent
Pesan guild diblokir secara tidak terduga
Pesan guild diblokir secara tidak terduga
- verifikasi
groupPolicy - verifikasi guild allowlist di bawah
channels.discord.guilds - jika peta
channelsguild ada, hanya saluran yang tercantum yang diizinkan - verifikasi perilaku
requireMentiondan pola mention
Require mention false tetapi masih diblokir
Require mention false tetapi masih diblokir
groupPolicy="allowlist"tanpa guild/channel allowlist yang cocokrequireMentiondikonfigurasi di tempat yang salah (harus di bawahchannels.discord.guildsatau entri saluran)- pengirim diblokir oleh allowlist
usersguild/channel
Handler yang berjalan lama timeout atau balasan terduplikasi
Handler yang berjalan lama timeout atau balasan terduplikasi
Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATESlow listener detected ...discord inbound worker timed out after ...
- akun tunggal:
channels.discord.eventQueue.listenerTimeout - multi-akun:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout
- akun tunggal:
channels.discord.inboundWorker.runTimeoutMs - multi-akun:
channels.discord.accounts.<accountId>.inboundWorker.runTimeoutMs - default:
1800000(30 menit); tetapkan0untuk menonaktifkan
eventQueue.listenerTimeout untuk penyiapan listener yang lambat dan inboundWorker.runTimeoutMs
hanya jika Anda menginginkan katup pengaman terpisah untuk giliran agen yang masuk ke antrean.Ketidakcocokan audit izin
Ketidakcocokan audit izin
channels status --probe hanya berfungsi untuk ID saluran numerik.Jika Anda menggunakan kunci slug, pencocokan runtime masih dapat berfungsi, tetapi probe tidak dapat sepenuhnya memverifikasi izin.Masalah DM dan pairing
Masalah DM dan pairing
- DM dinonaktifkan:
channels.discord.dm.enabled=false - kebijakan DM dinonaktifkan:
channels.discord.dmPolicy="disabled"(legacy:channels.discord.dm.policy) - menunggu persetujuan pairing dalam mode
pairing
Loop bot ke bot
Loop bot ke bot
channels.discord.allowBots=true, gunakan aturan mention dan allowlist yang ketat untuk menghindari perilaku loop.
Lebih pilih channels.discord.allowBots="mentions" agar hanya menerima pesan bot yang menyebut bot.Voice STT terputus dengan DecryptionFailed(...)
Voice STT terputus dengan DecryptionFailed(...)
- pastikan OpenClaw tetap terbaru (
openclaw update) agar logika pemulihan penerimaan voice Discord tersedia - konfirmasi
channels.discord.voice.daveEncryption=true(default) - mulai dari
channels.discord.voice.decryptionFailureTolerance=24(default upstream) dan sesuaikan hanya jika diperlukan - pantau log untuk:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- jika kegagalan berlanjut setelah bergabung ulang otomatis, kumpulkan log dan bandingkan dengan discord.js #11419
Penunjuk referensi konfigurasi
Referensi utama: Field Discord dengan sinyal tinggi:- startup/auth:
enabled,token,accounts.*,allowBots - kebijakan:
groupPolicy,dm.*,guilds.*,guilds.*.channels.* - perintah:
commands.native,commands.useAccessGroups,configWrites,slashCommand.* - antrean event:
eventQueue.listenerTimeout(anggaran listener),eventQueue.maxQueueSize,eventQueue.maxConcurrency - inbound worker:
inboundWorker.runTimeoutMs - balasan/riwayat:
replyToMode,historyLimit,dmHistoryLimit,dms.*.historyLimit - pengiriman:
textChunkLimit,chunkMode,maxLinesPerMessage - streaming:
streaming(alias legacy:streamMode),draftChunk,blockStreaming,blockStreamingCoalesce - media/retry:
mediaMaxMb,retrymediaMaxMbmembatasi unggahan Discord keluar (default:100MB)
- aksi:
actions.* - presence:
activity,status,activityType,activityUrl - UI:
ui.components.accentColor - fitur:
threadBindings,bindings[]tingkat atas (type: "acp"),pluralkit,execApprovals,intents,agentComponents,heartbeat,responsePrefix
Keamanan dan operasi
- Perlakukan token bot sebagai rahasia (
DISCORD_BOT_TOKENlebih disukai di lingkungan yang diawasi). - Berikan izin Discord seminimal mungkin.
- Jika deploy/state perintah basi, mulai ulang gateway dan periksa ulang dengan
openclaw channels status --probe.