iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
AI 自動化

AI 公司模擬器:Discord x Multi-Agent 架構實作系列 第 3

DAY 3|用 Python 啟動 Discord Bot,讓第一位 AI 員工開始工作

  • 分享至 

  • xImage
  •  

昨天我們完成了 Discord 應用程式與 Bot 的設定,也把 Bot 加入測試伺服器。

不過,Bot 目前仍然顯示離線。這是因為我們只有建立 Bot 帳號,還沒有執行真正讓它工作的程式。

今天要用 Python 啟動 Discord Bot,並建立第一個文字指令:

!hello

這次除了讓 Bot 上線,另一個重點是如何安全保存 Discord Bot Token,避免把它直接寫進程式碼。

上一篇:DAY 2|建立 Discord Bot,讓第一位 AI 員工上線

今天要完成什麼?

  • 建立 Python 專案與虛擬環境
  • 安裝 discord.pypython-dotenv
  • 建立 .env.gitignorerequirements.txt
  • .env 讀取 Discord Bot Token
  • 啟動 Bot 並測試 !hello

建立 Python 專案

先建立專案資料夾:

mkdir discord-ai-company
cd discord-ai-company

接著建立並啟用虛擬環境。

macOS 或 Linux:

python3 -m venv .venv
source .venv/bin/activate

Windows PowerShell:

py -m venv .venv
.venv\Scripts\Activate.ps1

虛擬環境可以讓這個專案擁有自己的 Python 套件,不會和其他專案混在一起。啟用成功後,終端機前面通常會出現 (.venv)

安裝今天需要的套件:

python -m pip install -U discord.py python-dotenv

再把目前安裝的套件記錄到 requirements.txt

python -m pip freeze > requirements.txt

完成後,專案結構會是:

discord-ai-company/
├── .venv/
├── .env
├── .gitignore
├── bot.py
└── requirements.txt

為什麼 Token 要放在 .env?

Discord Bot Token 是 Bot 登入 Discord 的憑證,可以把它想成 Bot 的密碼。

最直接的寫法,是把 Token 放進 Python 程式:

bot.run("你的DiscordBotToken")

雖然這樣可以執行,但 Token 會和程式碼放在一起。只要把程式碼貼到文章、傳給其他人,或上傳到 GitHub,就可能連同 Token 一起公開。

因此,我們不把 Token 寫死在 bot.py,而是放進獨立的 .env

DISCORD_TOKEN=在這裡貼上你的DiscordBotToken

這樣做有幾個原因:

把 Token 放進 .env,主要是避免登入憑證和程式碼混在一起。分享 bot.py 或上傳 GitHub 時,就不會順便公開 Token。
.env 還要加入 .gitignore。如果它曾經被提交到 Git,即使後來加入忽略清單,舊紀錄仍然存在,這時應該重新產生 Token。

Bot Token 不要放進文章、截圖或 GitHub。如果 Token 曾經公開,請立即回到 Discord Developer Portal 重設權杖,讓舊 Token 失效。

建立 .gitignore

在專案根目錄建立 .gitignore

.env
.venv/
__pycache__/
*.pyc

其中最重要的是:

.env

它會告訴 Git 不要追蹤 .env

不過,如果 .env 已經被提交過,再把它加入 .gitignore 並不會清除舊紀錄。只要 Token 曾經進入 Git 紀錄,最安全的做法仍然是重新產生 Token。


從 .env 讀取 Token

bot.py 中,先載入 .env

import os
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("DISCORD_TOKEN")

load_dotenv() 會讀取 .env,並把裡面的設定載入環境變數。

接著,os.getenv("DISCORD_TOKEN") 會取得我們放在 .env 裡的 Token。程式只知道要讀取名為 DISCORD_TOKEN 的設定,不需要知道實際內容。

如果 .env 沒有設定 Token,可以先停止程式:

if not token:
    raise RuntimeError("找不到 DISCORD_TOKEN,請檢查 .env。")

這樣可以比 Discord 登入失敗更早發現設定問題。


建立第一個 !hello 指令

完整的 bot.py 如下:

import os

import discord
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("DISCORD_TOKEN")

if not token:
    raise RuntimeError("找不到 DISCORD_TOKEN,請檢查 .env。")

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)


@bot.event
async def on_ready():
    print(f"Bot 已登入:{bot.user}")


@bot.command()
async def hello(ctx):
    await ctx.send("Hello!我已經上線了。")


bot.run(token)

這裡設定 command_prefix="!",代表 Bot 的文字指令會以 ! 開頭。

@bot.command() 則會把 hello() 註冊成指令。因此,當 Discord 頻道收到 !hello,Bot 就會回覆訊息。

另外,文字指令需要讀取訊息內容,所以除了 DAY 2 在 Discord Developer Portal 開啟 Message Content Intent,程式裡也要設定:

intents.message_content = True

啟動並測試 Bot

確認虛擬環境已啟用後,執行:

python bot.py

如果成功連上 Discord,終端機應該會顯示:

https://ithelp.ithome.com.tw/upload/images/20260917/20183880o85utwcaDV.png

回到 Discord 測試伺服器,在 Bot 可以查看並傳送訊息的頻道輸入:

!hello

Bot 預期會回覆:

https://ithelp.ithome.com.tw/upload/images/20260917/20183880PW7T7QwAff.png


今天的成果

執行 python bot.py 後,Bot 會從離線變成上線。在 Discord 輸入 !hello,確認它能讀取訊息並回覆。
目前的 Bot 只會執行預先寫好的指令。下一步要準備本地語言模型,讓它可以根據問題產生回答。


上一篇
DAY 2|建立 Discord Bot,讓第一位 AI 員工上線
下一篇
DAY 4|安裝 Ollama,在本機執行 Qwen
系列文
AI 公司模擬器:Discord x Multi-Agent 架構實作9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言