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