透過 ChatGPT Web 生成圖片的 Telegram Bot。CloakBrowser 驅動,支援文字 prompt、以圖生圖、連續修改、多使用者排隊與 Admin 通知。
| 功能 | 說明 |
|---|---|
/imagine <prompt> |
文字 prompt 生圖 |
| 傳送照片 | 以圖為參考,再輸入提示詞 |
| 連續修改模式 | 出圖後直接傳文字修改(無限迭代) |
/done |
結束修改模式 |
| 排隊機制 | 同時只能處理一個請求,多的自動排隊 |
| 訪客驗證 | 非 Admin 需輸入密碼 JUJU 解鎖 |
| Admin 通知 | 其他使用者生圖完成/失敗時自動通知 Admin(可透過 /notify 開關) |
cd ~/.hermes/chatgpt-bot
./manage.sh setup # 建立 venv + 安裝套件- 打開 Telegram,搜尋
@BotFather - 傳
/newbot→ 取名 → 取 username - BotFather 給你 token(格式:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz) - 傳
/setprivacy→ 選你的 bot →Disable(關閉 privacy mode)
搜尋 @userinfobot → 傳任意訊息 → 取得 numeric ID
cp .env.example .env編輯 .env:
TG_BOT_TOKEN=你的_token
TG_ADMIN_ID=你的_id
./manage.sh login這會開啟一個可見的 Chrome 視窗,導向 chat.openai.com。
手動登入後,按 Enter 鍵保存 session。
Cookie 過期時
/status會顯示未登入,執行./manage.sh login重登。
# 方法 1: 手動背景執行
./manage.sh start
# 方法 2: launchd 服務(自動重啟)
./install_service.sh./manage.sh status # 查看狀態
./manage.sh logs # 即時日誌
./manage.sh stop # 停止
./manage.sh restart # 重啟
./manage.sh login # 重新登入 ChatGPT| 輸入 | 說明 | 權限 |
|---|---|---|
/imagine <prompt> |
文字生圖 | 已驗證使用者 |
| 傳送照片 | 存照片 → 問提示詞 → 以圖生圖 | 已驗證使用者 |
| 傳文字 | 出圖後修改模式下:送修改 prompt | 已驗證使用者 |
/done |
結束修改模式 | 已驗證使用者 |
/cancel |
取消等待中的提示詞 | 已驗證使用者 |
/status |
系統狀態 + 完整指令面板 | Admin 限定 |
/login |
開始 ChatGPT 手動登入 | Admin 限定 |
/login_done |
確認手動登入完成 | Admin 限定 |
/restart |
重啟瀏覽器 session | Admin 限定 |
/notify |
開關其他使用者的生圖通知 | Admin 限定 |
/start / /help |
顯示歡迎訊息(一般使用者指令) | all |
使用者 → /imagine 貓咪
Bot → 📤 正在處理...
Bot → ChatGPT Web 生成中...
Bot → ✅ [圖片] | prompt: 貓咪
Bot → 回傳文字可繼續修改這張圖,或傳 /done 結束
使用者 → 把貓變成橘色的
Bot → 📤 正在處理...
Bot → ✅ [修改後圖片]
Bot → 回傳文字可繼續修改...
使用者 → 加上墨鏡
Bot → ✅ [再次修改圖片]
使用者 → /done
Bot → 修改模式已結束
使用者 → [傳送照片]
Bot → 圖片已收到。請輸入提示詞...
使用者 → 把這個產品放在沙灘上
Bot → ✅ [生成圖片]
使用者 A → /imagine 城市夜景 (第 1 位)
使用者 B → /imagine 日落 (第 2 位,排隊中)
A 完成後 B 自動開始
Admin 收到 A 完成通知
Admin 收到 B 完成通知
- Admin(TG_ADMIN_ID):直接使用,無需密碼
- 其他人:首次使用時輸入密碼
JUJU解鎖 - 密碼存在記憶體中,Bot 重啟後需重新輸入
出圖後 Bot 自動進入修改模式:
- 傳送任意文字 → 在同一個 ChatGPT 對話串追加修改 prompt
- 每次修改完成後再次進入修改模式(可無限迭代)
/done→ 退出- 修改期間不影響其他使用者的佇列排隊
- CloakBrowser 驅動的 stealth Chromium
- Cookie 持久化:重啟自動複用 session
generate_image(prompt, image_path=None, new_conversation=True):new_conversation=True:開新對話生圖new_conversation=False:在同個對話追加 prompt(修改模式)
- 失敗時自動擷取 GPT 回覆文字傳回使用者
python-telegram-bot框架- 單線程佇列(
_job_queue),一次處理一個生成 _modifiable_chats:追蹤哪些 chat 處於修改模式_admin_notify_enabled+_notify_admin():Admin 通知開關 + 自動推送
--login:互動式 ChatGPT 登入--status:快速健康檢查- 正常模式:啟動 Telegram polling + ChatGPT session
~/.hermes/chatgpt-bot/
├── config.py # 環境變數 & 路徑設定
├── chatgpt.py # CloakBrowser ChatGPT 自動化引擎
├── bot.py # Telegram Bot handler
├── main.py # 入口點
├── manage.sh # 管理腳本
├── install_service.sh # launchd 服務安裝
├── com.laban.chatgpt-bot.plist # launchd 設定
├── .env.example # 環境變數範例
├── .gitignore
├── requirements.txt # Python 依賴
├── README.md # 本文件
├── docs/ # 文件圖片(demo.jpg)
├── venv/ # Python 虛擬環境
├── cookies/ # ChatGPT session cookies
├── temp/ # 暫存圖片(ref / generated / debug)
└── logs/ # 日誌
- ChatGPT 登入 cookie 約 1-2 個月過期,需重新登入
- 生成的圖像解析度取決於 ChatGPT 使用的 DALL-E / GPT-4o 版本
- 單線程佇列 — 一次只能處理一個生成請求
- ChatGPT 前端更新時可能需調整 selectors(
chatgpt.py開頭的SELECTORSdict)
ChatGPT 前端頻繁更新,當 Bot 無法正常生圖時,檢查 chatgpt.py 的 SELECTORS:
| Key | 用途 | 常見 DOM 特徵 |
|---|---|---|
chat_input |
輸入框 | #prompt-textarea, div[contenteditable="true"] |
send_button |
傳送按鈕 | button[data-testid="send-button"] |
generated_image |
生成的圖片 | img[alt*="已產生"] |
streaming_indicator |
串流中指示器 | button[data-testid="stop-button"] |
assistant_message |
失敗時擷取 GPT 回覆 | [data-message-author-role="assistant"] |
new_chat_button |
開新對話 | a[href="/"], "New chat" 按鈕 |
file_input |
上傳圖片 | input[type="file"] |
git log # 檢視紀錄
git diff # 檢視修改
git commit -m "說明" # 提交