
Discord bot AI thông thường có vấn đề: mỗi câu reset ngữ cảnh, không nhớ user, không phân biệt server, không học style community. OpenClaw fix điều này bằng memory cross-session per-server. Bài này hướng dẫn dựng Discord bot OpenClaw production-ready: tạo app, scope intent đúng chuẩn, isolate memory per-server, rate limit, và moderation skill.
Vì sao bot Discord AI hay sai - và OpenClaw fix kiểu gì
Bot Discord chạy LLM thường vướng 3 lỗi:
- Stateless: mỗi câu là một request mới, không có short-term memory. User hỏi "thì sao?" sau câu trước, bot không hiểu.
- Memory leak cross-server: bot serve nhiều server, conversation Server A lẫn sang Server B. Bảo mật và UX đều tệ.
- Không học style: community game speak khác community dev speak. Bot generic trả lời cứng nhắc.
OpenClaw có 3 cơ chế:
- Session context per-channel: mỗi text channel có ngữ cảnh riêng, bot nhớ 30-50 turn gần nhất.
- Memory per-server (guild): long-term memory tách theo guild ID, dùng RAG để recall.
- Skill
style-mirror: bot phân tích lịch sử chat trong server, học cách dùng từ, emoji, tempo.
Bước 1: Tạo Discord Application và Bot
Vào discord.com/developers/applications, đăng nhập, bấm New Application. Đặt tên (ví dụ ClawBot) - tên này hiện cho user trong server.
Sang tab Bot bên sidebar:
- Reset Token, copy ngay - đây là bot token, lộ là cả bot bị chiếm.
- Bật 3 toggle:
- PRESENCE INTENT: optional, bật nếu muốn bot thấy ai online/offline.
- SERVER MEMBERS INTENT: nên bật, để bot biết member list.
- MESSAGE CONTENT INTENT: bắt buộc bật, không bật bot không đọc được nội dung tin nhắn ở server >100 member.
Bước 2: Generate invite URL với scope đúng
Sang tab OAuth2 -> URL Generator. Chọn:
- Scopes:
botvàapplications.commands(cho slash command). - Bot Permissions (chọn tối thiểu, đừng cấp Administrator):
- View Channels
- Send Messages
- Send Messages in Threads
- Read Message History
- Embed Links
- Attach Files (nếu cần upload file)
- Use External Emojis
- Add Reactions
Nếu định bật moderation skill, thêm: Manage Messages, Moderate Members, Kick Members. Không cấp Ban Members trừ khi thật cần.
Copy URL ở cuối, paste vào browser, chọn server của bạn, Authorize. Bot xuất hiện trong member list, offline.
Bước 3: Add Discord channel vào OpenClaw
SSH vào VPS, edit ~/.openclaw/openclaw.json:
{
"channels": {
"discord": {
"enabled": true,
"botToken": "MTM0NTY3ODkwMTIzNDU2Nzg5MA.GxxXxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"intents": ["GUILDS", "GUILD_MESSAGES", "MESSAGE_CONTENT", "GUILD_MEMBERS"],
"guilds": {
"987654321098765432": {
"name": "Dev Vietnam",
"memoryIsolation": "guild",
"stylePersona": "casual-vn-dev",
"rateLimit": { "msgPerMin": 20 }
},
"123450987612345678": {
"name": "Game Clan ABC",
"memoryIsolation": "guild",
"stylePersona": "gaming-vn",
"rateLimit": { "msgPerMin": 30 }
}
}
}
}
}
Field quan trọng:
- botToken: token từ Discord Developer Portal. Đẩy qua env var nếu được.
- intents: phải khớp với cái đã enable trong portal. Nếu portal ON nhưng config OFF, bot không nhận event.
- guilds.X.memoryIsolation:
guildlà tách hoàn toàn,channeltách theo từng text channel,globalchung (không khuyến nghị). - stylePersona: tên persona OpenClaw load - file ở
~/.openclaw/personas/casual-vn-dev.md. - rateLimit: chống user spam bot ăn token.
Restart gateway:
systemctl --user restart openclaw-gateway
journalctl --user -u openclaw-gateway -f | grep discord
Bot chuyển sang online. Test bằng @ClawBot chào trong server.
Bước 4: Cấu hình memory cross-session
OpenClaw memory layer dùng vector DB local (sqlite-vec default, có thể swap sang Postgres pgvector hoặc Qdrant). Mỗi guild có namespace riêng.
{
"memory": {
"backend": "sqlite-vec",
"embeddings": {
"provider": "openai",
"model": "text-embedding-3-small"
},
"policies": {
"shortTerm": { "turns": 40 },
"longTerm": {
"autoExtract": true,
"extractEveryNMessages": 20,
"categories": ["user_preferences", "facts_about_user", "decisions"]
}
}
}
}
Cách hoạt động:
- Mỗi 20 message trong một channel, OpenClaw gọi LLM extract facts dạng "user @nam thích Python, không thích Java", "channel #general có quy định không spam link", lưu vào vector store kèm guild_id.
- Khi user gửi message mới, OpenClaw embedding query, recall top-K facts cùng guild_id, inject vào system prompt.
- Server A và Server B không bao giờ thấy memory của nhau (vì filter guild_id ở query time).
Bước 5: Persona theo style community
File ~/.openclaw/personas/casual-vn-dev.md:
---
name: casual-vn-dev
description: Phong cách chat casual của cộng đồng dev VN trên Discord
---
# Tone
- Xưng "mình" hoặc "tớ", gọi user là "bạn" hoặc "ông/bà" tùy ngữ cảnh.
- Code-mixed VN-EN tự nhiên: "deploy", "container", "commit", "merge conflict" giữ nguyên.
- Reply ngắn gọn, không dài dòng. Dài quá 3 đoạn là sai.
- Dùng code block triple-backtick khi share code. Không bao giờ paste >40 line vào chat.
# Style guards
- Không emoji thừa, tối đa 1 emoji/reply.
- Không gọi user là "bạn yêu quý", "anh/chị thân mến" - cringe.
- Sai thì nhận sai, không vòng vo.
# Tool usage
- Khi user hỏi technical, gọi web-search trước khi guess.
- Khi user paste error log, đề nghị xem stack trace đầy đủ.
Reload không cần restart - OpenClaw watch file change.
Bước 6: Moderation skill (optional, nếu bot cấp Manage Messages)
Tạo ~/.openclaw/skills/discord-moderation/SKILL.md:
---
name: discord-moderation
description: Kiểm duyệt tự động khi user post spam, NSFW, hoặc link đáng nghi
---
# Khi nào dùng
Tự động trigger trên mọi message trong server, không cần user gọi.
# Hành động
1. Nếu message chứa >3 link rút gọn (bit.ly, t.co...): warn user, delete.
2. Nếu message bị OpenAI moderation flag NSFW/hate: delete + timeout 10 phút.
3. Nếu message là @everyone từ user join <1 giờ: delete, ping admin.
# Whitelist
- Channel #links: skip toàn bộ rule link.
- Role @Trusted: skip rule join time.
Skill này dùng Discord API DELETE /channels/{id}/messages/{id} và PUT /guilds/{id}/members/{user}/timeout. OpenClaw map sẵn nếu bot có Manage Messages + Moderate Members permission.
Rate limit & abuse
Bot AI public là target hấp dẫn cho user troll - 1 user spam 100 message/phút ăn $5 tiền LLM của bạn ngay. Cài rate limit ba lớp:
{
"rateLimit": {
"perUser": { "msgPerMin": 10, "tokensPerDay": 50000 },
"perGuild": { "msgPerMin": 100, "tokensPerDay": 500000 },
"perBot": { "tokensPerDay": 5000000 }
}
}
Vượt limit, bot trả emoji ⏳ thay vì call LLM. User abuse 3 lần thì auto-blacklist 24h.
tokensPerDay bằng 80% budget API thực của bạn. Còn 20% buffer để bot vẫn chạy được khi user thật chat lúc cuối ngày.Verify khi server vượt 75 guild
Discord bắt buộc bot verify (KYC) khi join >75 server. Quy trình:
- Vào Developer Portal -> Application -> Bot -> Verification.
- Submit form: lý do bot, chính sách bảo mật, support contact.
- Chờ 1-3 tuần review.
Trước verify, bot bị cap 75 guild - bot không join thêm được. Nếu bạn host bot cho community lớn, làm verify sớm.
VPS sizing
| Workload | VPS |
|---|---|
| 1-5 server, <500 message/ngày tổng | VPS 50 (4GB) đủ |
| 10+ server, có moderation skill chạy mọi message | VPS 80 (6GB) khuyến nghị |
| 50+ server, gần verify limit | VPS 80 + Postgres pgvector remote |
Moderation skill là phần tốn nhất vì OpenClaw gọi LLM (hoặc moderation endpoint) trên mọi message, không chỉ message ping bot. Với server 200 active member, traffic peak có thể đạt 50 msg/giây.
Gotchas Discord bot OpenClaw
- Gateway disconnect: Discord gateway hay ngắt sau 24h. OpenClaw tự reconnect, nhưng nếu bạn thấy bot offline thường xuyên, check log
journalctl --user -u openclaw-gateway | grep "gateway resumed". - Thread reply: Discord thread có channel ID riêng. Memory isolation theo
parentIdđể thread không "quên" topic của channel cha. - DM với bot: bot có thể nhận DM riêng. Set
dmPolicy: "denied"nếu bạn chỉ muốn bot chạy trong guild. - Slash command sync: lần đầu deploy slash command global mất 1 giờ propagate. Test bằng guild command (instant) trước.
- Emoji custom: bot không dùng được emoji custom của guild khác nếu không có Use External Emojis permission.
Slash command cho UX tốt hơn
Discord khuyến khích slash command thay vì mention-based. OpenClaw expose vài slash command built-in:
/ask: hỏi bot direct, không cần mention./summarize: tóm tắt 100 message gần nhất trong channel./memory list: xem fact bot nhớ về user./memory forget: xóa memory liên quan keyword (GDPR-friendly)./persona switch: admin server đổi persona on-the-fly.
Đăng ký slash command:
openclaw discord commands register --guild 987654321098765432
# Hoặc global (mất 1 giờ propagate):
openclaw discord commands register --global
Slash command có UI dropdown gợi ý param - UX dễ hơn nhiều với user không quen mention bot.
Backup memory database
Memory store tích lũy theo thời gian là tài sản. Mất là restart từ 0 - cộng đồng phải dạy lại bot mọi thứ.
# sqlite-vec memory store
cp ~/.openclaw/memory.db ~/backups/memory-$(date +%Y%m%d).db
# Hoặc dùng pgvector
pg_dump openclaw_memory > ~/backups/memory-$(date +%Y%m%d).sql
# Cron weekly
cat > ~/.config/systemd/user/openclaw-backup.timer << 'EOF'
[Unit]
Description=Weekly OpenClaw backup
[Timer]
OnCalendar=Sun 03:00
[Install]
WantedBy=timers.target
EOF
Restore khi VPS chết: dựng VPS mới, install OpenClaw, copy memory.db và openclaw.json về, restart gateway. Bot tiếp tục nhớ mọi thứ.
Tóm lại
OpenClaw làm Discord bot AI có ngữ cảnh đúng nghĩa: memory per-server không leak, persona learnable, moderation built-in, rate limit chống ăn token. Setup mất 1-2 giờ lần đầu nhưng config xong là chạy 24/7 không can thiệp.
Sàn VPS thật là 4GB RAM cho server nhỏ, 6GB cho có moderation hoặc multi-guild. Đọc bài tổng OpenClaw để nắm kiến trúc gateway. Stack đầy đủ cho dev cộng đồng VN tham khảo VPS cho vibe-coder.
Bài viết liên quan
VPS chạy Discord bot OpenClaw production, uptime >99.9%
TND Cloud VPS Ceph SSD Enterprise NVMe, RAM ECC, khởi tạo 60 giây. Gói 4GB RAM 639k/tháng đủ cho bot community nhỏ; gói 6GB RAM 999k/tháng cho bot có moderation hoặc 10+ server.

