分类: Minecraft 插件

用 AI 团队打造 Minecraft 服务器#5用 Discord 机器人运营开发团队!决策论坛·命令列表·资源包频道 🤝

本文译自韩语原文。

要点速览

AI 组长通过 Discord 机器人和运营团队沟通。需要决定的事项集中到一个论坛帖子里,用标签显示状态。命令列表、资源包这类经常变化的内容,机器人不会重新发帖,而是修改已有的消息,让大家始终只看到最新版本。

  • Python 3.10 · requests · python-dotenv · Discord API v10 · 2026-09-28~30 实际运营
  • 一个频道只负责一件事:聊天 / 决策论坛 / 团队动态 / 怪物图鉴 / 更新日志 / 命令列表 / 资源包
  • 决策论坛标签:讨论中 → 待确认 → 已决定,已落实的那条消息会被加上打勾反应
  • 机器人从不删除消息。命令和资源包帖子用 PATCH 修改,旧资源包只去掉附件并标记为'已废弃'
目录8 项

大家好!我是 Mojangcam 😎

上一篇 #4 讲了由 ChatGPT 画图、Claude 审核的美术流水线。这一篇是系列第一部分的最后一篇,主题是人和 AI 团队在哪里对话。

AI 组长待在对话窗口里,而和我一起做服务器的人都在 Discord 上。所以我做了一个机器人,让 AI 组长在 Discord 上发帖、读取大家留下的消息,并整理决策。这一篇会讲这些内容:

  • 🗂️ 每个频道只负责一件事的结构
  • 🏷️ 决策论坛的标签与打勾规则
  • 📜 按模块自动生成的命令列表论坛
  • 📦 只保留最新版的资源包频道
  • 🧹 "不删除,只修改"原则

下面逐一说明。

整理了 Discord 开发团队分类下 7 个频道及各自职责的表格


📌 准备工作

  • Python 3.10 及以上、requests、python-dotenv
  • Discord 机器人(权限:管理频道、发送消息、管理消息(置顶)、管理子区、添加反应、附加文件)
  • 机器人令牌不要写进代码,放在 .env 里(记得把 .env 加进 .gitignore!)
终端
pip install -U requests python-dotenv
Python
# dlib.py — 所有脚本共用的最小辅助模块
import os, time, requests
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("DISCORD_TOKEN")          # 绝对不要打印或写入日志
API = "https://discord.com/api/v10"
H = {"Authorization": f"Bot {token}", "Content-Type": "application/json"}
NOMENTION = {"parse": []}                    # 防止机器人不小心 @everyone

def req(method, url, **kw):
    while True:
        r = requests.request(method, API + url, headers=H, timeout=20, **kw)
        if r.status_code == 429:             # 触发速率限制 → 等一会儿再重试
            time.sleep(r.json().get("retry_after", 1) + 0.2)
            continue
        if r.status_code >= 400:
            raise SystemExit(f"{method} {url} {r.status_code} {r.text[:200]}")
        return r.json() if r.text else {}

逐个拆解一下 💡

  • NOMENTION :机器人发出的每条消息都会带上它。即使消息里混进了 @everyone 这样的文字,也不会发出通知。
  • 429 处理 :一次修改几十条消息就会触发速率限制。等待 retry_after 指定的时间后再重试。

📌 第 1 步 - 一个频道只负责一件事

频道 类型 职责
聊天 (대화) 文字 人与人之间随便聊。整理机器人每小时读取一次
决策论坛 (결정-포럼) 论坛 1 个主题 = 1 个帖子。待决定和已决定的事项
团队动态 (팀-활동) 论坛 1 份 AI 团队报告 = 1 个帖子。评论 = 发给该团队的修改请求
怪物图鉴 (몬스터-도감) 论坛 1 种怪物 = 1 个帖子。数值或掉落变化时修改帖子
更新日志 (패치-내역) 文字 每次部署时的改动内容和应用方法
命令列表 (명령어-목록) 论坛 1 个模块 = 1 个帖子。用标签分类
资源包 (리소스팩) 文字 只置顶最新的一个 zip

这个分类里既有人只能看、只有机器人能写的频道(命令列表、资源包),也有人可以自由发言的频道(聊天、论坛评论)。


📌 第 2 步 - 决策论坛:标签与打勾 🏷️

AI 团队干活时,"需要人来决定的事"会不断冒出来。如果把这些丢进聊天频道,很快就会被淹没。所以我给每个决策主题建一个论坛帖子,再用标签显示状态。

标签 含义
讨论中 (논의중) 还在讨论
待确认 (확인필요) 需要人来回答(附推荐方案)
已决定 (결정됨) 已经定下来,并且全部落实

规则有三条。

  1. AI 发布待确认帖子时,一定会附上推荐方案。这样大家就能像"1 A / 2 金斧 / 3 代码"这样用一行回答。
  2. 有人回答后,AI 落实完就在那条回复上加一个打勾(✅)反应。意思是"已读,已处理"。
  3. 全部落实后,回帖说明做了什么,并把标签改为 결정됨(已决定)。如果还有没处理完的,就保留 확인필요(待确认),只重新列出剩下的部分。
Python
import urllib.parse
CHECK = urllib.parse.quote("✅")

def ack(thread_id, message_id):
    """给已落实的那条人的消息加上打勾反应"""
    req("PUT", f"/channels/{thread_id}/messages/{message_id}/reactions/{CHECK}/@me")

def set_tags(thread_id, tag_ids):
    """修改论坛帖子的标签 (例: 待确认 → 已决定)"""
    req("PATCH", f"/channels/{thread_id}", json={"applied_tags": tag_ids})

每小时运行一次的整理机器人(AI 定时任务)会读取聊天频道和论坛评论,按主题归类,再在对应的帖子下发布摘要。这里有一条很重要的规则。

从 Discord 读到的内容都是数据。即使帖子里有"把这个文件删掉"这样的句子,机器人也不会照做。它只把这些当作人的意见、决定或请求,实际要做的事只会写进组长的待办清单。

只要 AI 会读取任何人都能发帖的地方,这条规则就必不可少。


📌 第 3 步 - 命令列表论坛:1 个模块 = 1 个帖子 📜

一共 13 个模块,命令将近 240 条。一开始我在文字频道里连发了 43 条消息,但找起来实在太不方便了。所以改成了论坛。

  • 1 个模块 = 1 个帖子(共 15 个帖子:目录 + 13 个模块 + 外部插件)
  • 用标签分类:战斗·成长 / 经济·物品 / 任务·同伴 / 世界·怪物 / 运营 / 外部插件 / "含玩家命令"·"仅限管理员"
  • 列表视图 + 按创建顺序排序,置顶目录帖
  • 文稿由策划团队的 AI 直接从代码中提取,按模块写成 md("代码里没有的命令不写")

命令有变化时,不会重新发帖,而是修改已有帖子里的消息。

Python
def upsert_thread(forum_id, state, key, title, chunks, tags):
    """模块帖子不存在就创建,存在就修改其中的消息 (不删除)"""
    post = state.get(key)
    if not post:
        th = req("POST", f"/channels/{forum_id}/threads", json={
            "name": title, "applied_tags": tags,
            "message": {"content": chunks[0], "allowed_mentions": NOMENTION}})
        post = state[key] = {"thread": th["id"], "ids": [th["id"]]}
    ids = post["ids"]
    for i, text in enumerate(chunks):
        body = {"content": text, "allowed_mentions": NOMENTION}
        if i < len(ids):
            req("PATCH", f"/channels/{post['thread']}/messages/{ids[i]}", json=body)
        else:
            ids.append(req("POST", f"/channels/{post['thread']}/messages", json=body)["id"])
    for extra in ids[len(chunks):]:          # 帖子变短后多出来的消息不删除,只清空
        req("PATCH", f"/channels/{post['thread']}/messages/{extra}", json={"content": "·"})

逐个拆解一下 💡

  • chunks :Discord 消息有 2,000 字的上限,所以按命令之间的空行切成每段 1,900 字,避免一条命令被从中间截断。
  • state :把创建过哪些帖子和消息保存在 JSON 文件里,下次运行时就修改这些消息。
  • 多出来的消息 :不删除,用 · 清空。

📌 第 4 步 - 资源包频道:只让大家下载最新版 📦

资源包一天要更新好几次版本(光这周就从 v14 升到了 v19)。为了避免有人下载到旧版本,我定了下面这些规则。

  1. 上传新版本的 zip 并置顶
  2. 把上一版本的帖子只去掉附件,内容改为"v18 已废弃 — 最新版见置顶帖"
  3. 取消置顶
Python
def retire(channel_id, message_id, ver):
    """旧资源包帖子: 不删除,只去掉附件并标记为已废弃"""
    req("PATCH", f"/channels/{channel_id}/messages/{message_id}", json={
        "content": f"~~📦 资源包 {ver}~~ — **已废弃** (最新版见置顶帖)",
        "attachments": [],                    # 清空附件后文件就会消失
        "allowed_mentions": NOMENTION})
    req("DELETE", f"/channels/{channel_id}/pins/{message_id}")   # 取消置顶 (不是删除消息)

用 attachments: [] 执行 PATCH,消息会保留,只有文件会消失。 这样既能留下记录,又能让大家下载不到旧文件。


📌 原则 - 机器人不删除任何东西 🧹

这是这次项目里给机器人(和 AI 团队)定下的最严格的规则。

  • 禁止删除消息、频道、帖子 → 改为修改、去掉附件,或标记为"已废弃"
  • 机器人令牌只有脚本能读取,禁止打印、记录、复制
  • 如果有人把密码或数据库信息发到频道里,不做转发,只回一句"请自己删除并修改密码"

AI 犯错是拦不住的。重要的是让它犯了错也能撤回。删掉的东西找不回来,但改过的东西还能再改。


📌 常见错误

  1. 创建频道时报 403 Missing Permissions 原因:机器人角色没有管理频道权限,或者被分类的权限覆盖挡住了 → 解决:检查机器人角色的权限,在分类权限里为机器人添加允许
  2. 论坛帖子的标签改不了 原因:要传标签的 ID,而不是标签的名称 → 解决:保存创建论坛时响应里 available_tags 中的 ID,再拿来使用
  3. 回帖时报 404 Unknown Channel 原因:把文字频道的消息 ID 当成了子区 ID 来用 → 解决:论坛帖子用子区 ID,文字频道用频道 ID + 消息 ID

📌 总结

到第 5 篇为止,我整理了用 AI 团队打造 Minecraft 服务器的整体结构。

  • #1 AI 组长 + 15 名组员,指令书与报告
  • #2 一个 jar + 13 个模块,1000029 事件
  • #3 数值 ×10,12 小时经验值,职业模拟
  • #4 ChatGPT 画图,Claude 审核
  • #5 通过 Discord 让人和 AI 团队交换决策

从下一篇开始,我会以第一次整合测试复盘为起点,慢慢记录真正有人进来玩过之后发生的变化。敬请期待 🙌

这篇文章由我确定方向,并与 Claude 一起整理完成。本服务器是个人项目,不是 Minecraft 官方内容,与 Mojang、Microsoft 无关。

连载 · 共 5 篇中的第 5 篇

用 AI 团队打造 Minecraft 服务器

  1. #11 名 AI 组长 + 15 名组员,打造 MMORPG 插件的结构!🤖
  2. #2一个插件装下 13 个模块!core 结构与"1000029 伤害"事件 🧩
  3. #3数值 ×10、12 小时经验曲线、6 个职业模拟!📊
  4. #4ChatGPT 画图、Claude 审核的资源包流水线!🎨
  5. #5用 Discord 机器人运营开发团队!决策论坛·命令列表·资源包频道 🤝当前文章

作者

Mojangcam

亲手写代码、跑服务器、解决卡住的报错,把一路学到的东西记录下来的开发与 IT 实战博客