Skip to content

Releases: ChiangJingYing/queue-linebot

v1.6.5

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 07 Jun 14:10

Full Changelog: v1.6.4...v1.6.5

v1.6.4

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 25 May 06:56

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 25 May 06:16

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 18 May 14:06

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 18 May 13:36

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 18 May 13:21

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 16 May 17:22

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 16 May 06:34

更新重點

  • 新增 /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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 15 May 13:35

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

Choose a tag to compare

@ChiangJingYing ChiangJingYing released this 09 May 10:09

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_sessions dict 追蹤每位 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_id session 追蹤。
  • 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