官方並未提供可直接加入伺服器的 Discord bot,Telegram 的情況較模糊——有官方整合的報導,但沒有可自由搜尋加入的官方 bot。因此「在群組裡用 Grok」實務上都是自己接:一個平台的 bot token,加上一把 xAI API 金鑰,中間用 OpenAI SDK 串起來。因為 xAI 的 API 與 OpenAI 相容,既有的聊天機器人程式多半只需要換 base URL 與模型名稱。
本篇給出兩個平台的最小可行版本,以及四個實際會卡住的地方。
📖 共通架構
使用者在群組發訊息
↓
平台(Telegram/Discord)把事件推給你的程式
↓
你的程式組出 messages,呼叫 api.x.ai
↓
Grok 回應(可帶 x_search 等伺服器端工具)
↓
你的程式把結果發回群組
三樣東西要準備:平台的 bot token、xAI API 金鑰(見 API 入門)、一台能持續執行的機器。
📖 Telegram
建立 bot
在 Telegram 裡找 BotFather,送出 /newbot,依指示命名,保存它回傳的 HTTP API token。
最小實作
import os
from openai import OpenAI
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, ContextTypes
xai = OpenAI(
api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1",
)
async def reply(update: Update, ctx: ContextTypes.DEFAULT_TYPE) -> None:
text = update.message.text
if not text:
return
r = xai.responses.create(model="grok-4.7", input=text)
await update.message.reply_text(r.output_text)
app = Application.builder().token(os.environ["TELEGRAM_TOKEN"]).build()
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, reply))
app.run_polling()套件為 python-telegram-bot 與 openai。
群組裡的 privacy mode
這是 Telegram 最常見的卡點:bot 預設處於 privacy mode,在群組中只收得到以 / 開頭的指令與直接回覆它的訊息,收不到一般對話。
兩種處理方式:在 BotFather 用 /setprivacy 關閉(bot 會看到群組所有訊息——權限很大,要想清楚),或是保持開啟並要求使用者用指令呼叫。對多數用途,保持開啟、改用指令觸發是比較負責任的選擇。
📖 Discord
建立 bot
到 Discord Developer Portal 建立應用程式與 bot,取得 token,再用 OAuth2 連結邀請進伺服器。
必須開啟 Message Content Intent
這是 Discord 最常見的卡點:若不在 Developer Portal 開啟 Message Content Intent,你的 bot 收得到訊息事件,但 message.content 會是空字串。症狀是程式沒報錯、bot 也在線,就是永遠不回應。
最小實作
import os
import discord
from openai import OpenAI
xai = OpenAI(
api_key=os.environ["XAI_API_KEY"],
base_url="https://api.x.ai/v1",
)
intents = discord.Intents.default()
intents.message_content = True # 必須,且 Portal 也要開
client = discord.Client(intents=intents)
@client.event
async def on_message(message: discord.Message) -> None:
if message.author.bot:
return # 避免 bot 回應 bot
if not client.user.mentioned_in(message):
return # 只回應被 tag 的訊息
prompt = message.content.replace(f"<@{client.user.id}>", "").strip()
async with message.channel.typing():
r = xai.responses.create(model="grok-4.7", input=prompt)
await message.reply(r.output_text[:2000])
client.run(os.environ["DISCORD_TOKEN"])社群範例專案(可參考但未經我驗證):cisnez/xAI_Discord、jdmsharpe/discord-grok(Pycord 2.0,需 Python 3.11+)、goim01/grokbot。
📖 四個實際會卡住的地方
一、訊息長度上限
Discord 單則訊息上限 2,000 字元,Grok 很容易超過。上面的範例用 [:2000] 粗暴截斷——正式版應該分段送出或改用 embed,否則使用者會看到句子斷在一半。Telegram 上限為 4,096 字元,同樣要處理。
二、無狀態與脈絡
上面兩個範例都是無記憶的:每則訊息都是獨立請求,bot 不記得前文。要支援多輪對話,必須自己維護一份 messages 歷史。
而歷史會變成成本問題。 每一輪都把完整歷史送回去,token 用量隨輪數線性成長。務必設上限——保留最近 N 輪,或用官方的脈絡壓縮。沒有上限的群組 bot,在熱絡的頻道裡可以把預算燒得很快。
三、要不要開啟伺服器端工具
加上 tools=[{"type": "x_search"}] 會讓 bot 能回答即時問題,但也讓成本變得不可預測——X 檢索按抓回的貼文數計費(見 計費陷阱)。
建議:預設關閉,用一個明確的指令開啟(例如 /search 關鍵字)。這樣既保有能力,又讓昂貴的路徑只在使用者明確要求時才走。
四、速率限制與濫用
任何開在公開群組的 bot 都會被濫用,不是會不會的問題。最少要做:
- 每位使用者的頻率限制(例如每分鐘 3 次)
- 每日總用量上限,達標即停並通知自己
- 白名單或只回應被 tag 的訊息(上面的 Discord 範例已採用後者)
- 過濾 bot 自己的訊息,避免兩個 bot 互相觸發成無限迴圈
最後一條特別值得強調:bot 互相回覆造成的迴圈會在幾分鐘內產生數千次 API 呼叫。範例中的 if message.author.bot: return 就是為此而存在。
📖 模型選擇
二手教學裡的模型名稱已經不一致(有的寫 grok-4.6、有的寫 grok-4-fast),而其中有些型號已不在官方價目表上。
不要把模型名稱寫死在程式裡。 放進環境變數或設定檔,並以 docs.x.ai 的模型頁 為準。聊天 bot 的典型選擇是 grok-4.3——脈絡 1M、價格只有旗艦約六成,而群組對話通常不需要旗艦的能力。
🧠 重點整理
官方沒有現成的 Discord bot,Telegram 也沒有可自由加入的官方 bot,都要自己接。
xAI API 與 OpenAI 相容,既有程式換 base URL 與模型名即可。
Telegram 的 privacy mode 讓 bot 在群組只收得到指令——保持開啟、用指令觸發通常較負責任。
Discord 一定要開 Message Content Intent,否則 message.content 是空的而且不會報錯。
訊息長度要處理:Discord 2,000 字元、Telegram 4,096 字元。
對話歷史要設上限,否則 token 成本隨輪數線性成長。
伺服器端工具預設關閉、用指令開啟,避免成本不可預測。
一定要過濾 bot 自己的訊息,否則會出現互相觸發的迴圈。
模型名稱放環境變數,不要寫死。
✍️ 動手做
先做一個只有自己能用的版本,約一小時:
- 建一個 Telegram bot,只加自己一個人的私聊,不要加進群組。
- 跑通上面的最小實作,確認能一問一答。
- 加上對話歷史,並設定只保留最近 5 輪。
- 加一個
/search指令,只有這個指令才帶x_search工具。 - 連續用 20 則訊息測試,然後去 console 看實際花了多少錢。
第 5 步是整個練習的重點。在把 bot 放進任何公開群組之前,你必須先知道 20 則訊息的成本是多少——乘以群組的實際訊息量,常常會得到一個讓人決定加上限額的數字。
🔗 資料來源
- xAI 開發者文件 — 快速開始、模型——OpenAI 相容性、端點與型號(一手,2026-10-22)。
- 社群範例專案:cisnez/xAI_Discord、jdmsharpe/discord-grok、goim01/grokbot——均為第三方專案,我未實際執行驗證。
- 「官方不提供 Discord bot」與 Telegram 整合現況取自二手指南(2026 年),非官方聲明,見 主張 vs 可佐證。
- 本篇的兩段程式碼為我按官方 API 規格撰寫的最小示例,非官方範例,未在正式環境驗證。