Releases: ChiangJingYing/queue-linebot
Releases · ChiangJingYing/queue-linebot
Release list
v1.6.5
Full Changelog: v1.6.4...v1.6.5
v1.6.4
Highlights
- 修正 Telegram 管理通知中「管理員」與「對象」的顯示邏輯:只有管理員會優先顯示 LINE profile display name;叫號對象與管理操作對象則維持
/register註冊資料,例如B12345678(A-1)。 - 補齊 Telegram command / notification 與 LINE handler 的回歸測試,避免之後再把對象顯示誤改回 LINE profile 名稱。
Details
Telegram Admin Notification Target Labels
TelegramAdminNotificationService現在會分開處理 admin 與 target 的 user reference formatting。- 對 LINE user id:管理員欄位可解析為 LINE profile display name;目標對象欄位固定保留註冊顯示名稱,不再顯示原始 user id。
broadcast_event與broadcast_serve_event都已套用相同規則,讓Demo完成通知、跳過通知、管理叫號通知的格式一致。
Regression Test Alignment
- 新增 Telegram admin notification 測試,明確驗證「管理員用 LINE display name、對象保留註冊 label」。
- 更新 Telegram command 與 LINE handler 整合測試 expectation,與新的通知格式對齊。
Validation
pytest -q通過(622 passed,coverage 81.78%)。
v1.6.3
Highlights
- 修正 Telegram admin 操作通知內容:排隊/取消事件不再顯示 user id,管理員相關 LINE 使用者改顯示 LINE display name,且通知推播改為非阻塞 dispatch。
- 修正
/admin/apply list在 LINE 上可能噴 400 Bad Request 的問題,並穩定顯示申請者名稱。 - 修正 dashboard 右上角 Served hover 的最近叫號重複顯示問題,避免同一次叫號出現多筆。
Details
Telegram Admin Notifications And Apply List
- Telegram admin 通知現在會對 queue / cancel 類型隱藏 user id,只保留 display name;admin 操作相關通知若目標是 LINE user id,會優先查 LINE profile 並顯示 display name。
- 管理員操作通知改走背景 dispatcher,避免叫號或其他正常流程被通知推播阻塞。
/admin/apply list修正了 LINE 400 的根因:quick reply label 曾直接帶完整 LINE user id,超出 LINE payload 限制。現在改用顯示名稱、限制每頁 quick reply 數量,並將名稱解析順序固定為 LINE profile -> application display name -> stored profile -> user id。- 同步加入「隊列未開啟」阻擋情境的 Telegram error 類型通知。
Dashboard Recent Served Dedupe
serve_queue現在只會真正 serve 最早的一筆 active queue row,避免同一使用者的重複 active row 一次全被標成 served。- 對於污染資料造成的重複 active row,系統會改用內部 release 標記清理,讓它退出 active queue,但不會被誤算進 skipped/cancelled 統計。
- dashboard recent served 會以
user_id + served_time去重,因此同一次叫號不會重複顯示,但不同時間的合法叫號紀錄仍會保留。 - 補上
/admin/apply list、Telegram admin 通知、dashboard served hover 與 queue stats 的 regression tests。
Validation
pytest通過(628 passed,coverage 81.79%)。
v1.6.2
Highlights
- 修正 dashboard 在 homework demo 關閉時無法先驗證 Google Sheet 設定並預覽工作表清單的問題。
- 修正 admin 選單候選名單與 LINE 顯示名稱查詢邏輯,避免非 LINE id 觸發無效 profile lookup。
Details
Homework Settings Validation
/settings/homework/validate現在會強制執行設定驗證,即使 homework demo 目前是關閉狀態,也能先檢查 spreadsheet id / URL 並取得工作表清單。- 這讓 dashboard 調整設定時,可以先完成 Google Sheet 驗證,再決定是否啟用功能,避免因為
enabled=false而拿不到預期的驗證結果。
Admin Options And LINE Profile Lookup
- dashboard 的 admin options 現在會同時納入靜態環境變數中的 admin ids 與資料庫中的 admin 紀錄,避免候選名單漏掉尚未寫入 profile 的管理員。
services/line_profile_lookup.py新增 LINE user id 格式判斷,遇到電話、Telegram id 或其他非 LINE identifier 時會直接略過 profile lookup,避免不必要的 SDK 載入與失敗日誌。- 補上對應 regression tests,覆蓋 dashboard admin options、disabled homework validation,以及非 LINE id lookup skip 行為。
Validation
pytest -q通過(606 tests passed)。
v1.6.1
Highlights
- 修正被降為一般使用者後,LINE rich menu 不會自動切回一般 user menu 的問題。
Details
Rich Menu Demotion Fix
- 當使用者原本掛著 admin rich menu,但實際上已經不再具有 admin 權限時,若再次觸發 admin 專屬指令,系統現在會先把 rich menu 校正回一般使用者 page1。
- 這個修正涵蓋一般 admin 指令與
/admin/apply子命令未授權分支,避免使用者長時間停留在 admin rich menu。 - 補上對應 regression test,驗證「已被降權但仍停在 admin menu」的使用者,在執行 admin 指令後會被重新綁回一般 user menu。
Validation
pytest -q通過(602 tests passed)。
v1.6.0
Highlights
- 新增 homework demo booking system,支援以 TA / 時段為核心的預約、查詢、取消與歷史紀錄流程。
- 補上 late cancel application review flow,讓管理端可以處理逾期取消申請與後續審核。
- 將 admin / user rich menu 升級為雙頁切換版,並改成不發送訊息的 alias switch 體驗。
Details
Homework Demo Booking
- 新增 homework demo 預約主流程,包含可預約時段查詢、建立預約、取消預約與歷史紀錄等使用場景。
- 以設定驅動管理 TA 順序、名額上限、黑名單、可預約條件與時間欄位映射,方便依課程實際需求調整。
- 新增對應的 presenter / handler wiring,讓 bot 與既有服務層可以共用同一套 demo booking 邏輯。
Admin Review And Dashboard Settings
- 加入 late cancel application review flow,讓管理員可以列出、核准與拒絕逾期取消申請。
- 擴充 dashboard settings 與相關設定模型,讓 homework demo 的啟用狀態與細部參數能透過現有管理介面維護。
- 補上 README / config 說明,讓部署與後續維運能更清楚掌握新功能所需欄位。
Rich Menu And Upload Flow
- admin 與一般使用者 rich menu 都改為雙頁切換配置,上方 tab 固定切換 page1 / page2,下方保留功能鍵區。
- rich menu 切換改用 alias + rich menu switch,不再透過傳送訊息觸發,切頁時不會再出現未知指令回覆。
scripts/upload_rich_menus.py現在支援 user page2、admin / user alias 同步、partial upload 保留既有 page2 ID,並統一只讀寫 repo root.env。
Validation
pytest -q通過(601 tests passed)。
v1.5.1
Highlights
- 新增 dashboard 鎖定狀態燈號,將「已叫號但尚未 release」與一般已註冊狀態區分開來。
- 修正 Telegram
/admin/apply指令分流,讓/admin/apply list、approve、reject能正確觸發。 - 更新 LINE
/admin/apply list與 settings 頁 special serve rule admin 選擇提示,優先透過 LINE API 取得 display name,失敗時再 fallback。
Details
Dashboard
- 在 dashboard legend 與格位狀態中加入
locked狀態。 - 近期剛叫號的使用者會先短暫顯示為
served閃爍,再進入locked,直到 release 後回到registered。
Admin Apply Flow
- LINE
/admin/apply list改為優先顯示 LINE profile display name。 - Telegram admin 申請列表與審核指令補齊 routing 與顯示名稱解析。
- 共用 LINE profile lookup helper,統一 apply review 與 settings 頁的名稱來源策略。
Validation
pytest -q通過(525 tests passed)。
v1.5.0
更新重點
- 新增
/settings系統設定頁,支援可視化編輯與原文 YAML 編輯config/queue_config.yaml - 新增
registration.location_options、Special Serve Rules等可視化編輯器 - 儲存設定後可同步套用支援熱更新的項目,並提供容器重啟按鈕處理需重啟生效的設定
- 新增深色 / 淺色模式切換,以及未儲存修改離頁警示
/dashboard/login支援登入後回跳到原本目標頁面- 將系統設定頁路由從
/dashboard/settings調整為/settings /與未知頁面現在會導向/dashboard- 修正登入失敗時直接顯示 JSON 的問題,改為回到登入頁並顯示錯誤訊息
- 修正
registration.location_options儲存後的 YAML 輸出格式,維持 inline list 樣式 - 修正
/settings頁中可由 YAML / DB 值觸發的前端 HTML 注入風險
其他調整
- 移除已不再使用的 timeout 設定欄位與
vip.coffee_url設定欄位 - 更新 README,補充
/settings路由、容器重啟、Docker Compose port mapping 與目前/coffee為硬編碼連結等說明 - 新增與更新 settings / auth / smoke 測試
驗證
pytest -q tests/test_dashboard_settings.py tests/test_web_ui_auth.py tests/test_web_ui_smoke.py --no-cov- 32 tests passed
v1.4.8
Highlights
- Added config-driven special serve rules under
queue.special_serve_rules - Supports multiple targets per admin
- Unified special serve behavior across LINE and Telegram
/admin/serve - Fixed Telegram
/admin/serve [id]so explicit target serving bypasses special rules - Updated config examples, README, and test coverage
Validation
pytest -q- Result: 502 passed, coverage 82.84%
v1.4.7
What's Changed
自 v1.4.6 以來,這個版本帶入叫號鎖定機制的完整實作,包含自動解除、位置編號解除、以及相關修正與測試補齊。
叫號鎖定機制(Called-but-not-released Lock)
- 管理員叫號後,被叫號的使用者進入「已叫號待解除」狀態,無法重新加入隊列,直到管理員執行
/admin/release解除。 - 此機制在 LINE、Telegram、Discord 三個平台同步生效。
Admin Serve 自動解除前一位鎖定
- 當管理員再次執行
/admin/serve(或指定叫號),若上一次叫的人尚未被 release,系統會自動靜默 release 前一位,並在回覆訊息中提示。 - 使用 in-memory
_admin_serve_sessionsdict 追蹤每位 admin 的叫號配對,多 admin 並存時互不干擾。 - 自動解除無條件發生——即使目前隊列已空(叫號本身失敗),前一位的鎖定仍會被解除。
/admin/release 改為位置編號操作
/admin/release [位置編號](例如/admin/release A-1)取代原本的 user_id 參數。- 只需該位置編號有對應的登記紀錄(profile)即可執行;不需要 queue entry 存在或已 served——若無 queue entry,仍視為成功(空操作)。
- 叫號完成後的快捷按鈕自動帶入被叫號者的位置編號,管理員可一鍵點擊解除。
/status 修正
- 修正叫號鎖定中的使用者無法查看排隊狀態的問題,現在
/status在任何狀態下都可正常顯示整體排隊人數。
測試補齊
core/database.py:find_user_profile_by_location、find_called_user_by_location、force_release_queue三個方法補上單元測試。services/admin_flow.py:release_user()成功、位置不存在、無 queue entry 三種情境。services/serve_flow.py:location、auto_released_display_name欄位及admin_user_idsession 追蹤。services/user_flow.py:called 狀態使用者查詢/status的行為驗證。core/queue_manager.py:TestAdminServeSessionsAutoRelease類別,覆蓋 session 機制的 9 種情境。- LINE / Telegram handler:
/admin/release位置不存在時的錯誤回覆。
Full Changelog: woody0509/queue-linebot@v1.4.6...v1.4.7