iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
自我挑戰組

用 Discord Bot 玩轉 DevOps系列 第 27

非同步模式在bot的實戰應用

  • 分享至 

  • xImage
  •  

自動化排程

bot的其中一個功能就是自動化的每週檢查排程,設定每周一早上九點發送檢查結果,而這背後的運作原理來自於 Task 系統讓 Bot 能夠在背景執行定期任務

@tasks.loop(hours=24)
async def check_new_prs_task():
    # 檢查是否達到設定的間隔天數
    time_since_last_check = datetime.now() - last_check_time
    if time_since_last_check.days < CHECK_INTERVAL_DAYS:
        return
    
    print(f"🔍 進行手動每週檢查...")
    prs, error = await get_merged_prs_since(since_date)
    # 處理 PR 資料並發送報告

透過非同步設計,它不會阻塞其他指令的處理,在等待間隔時間時,Bot仍然可以即時回應使用者的指令

錯誤處理與恢復

在分散式系統中,錯誤是不可避免的,Bot會透過非同步錯誤處理機制確保單點故障不影響整體服務
多層錯誤處理策略:

  • 指令層錯誤處理:單一指令失敗不影響其他功能
  • API 層錯誤處理:GitHub API 錯誤有適當的重試機制
  • 任務層錯誤處理:排程任務失敗會記錄日誌並繼續運行
  • 系統層錯誤處理:連線異常時自動重新連接
async def execute_scheduled_check():
    try:
        prs, error = await get_merged_prs_since(since_date)
        if error:
            # 非同步發送錯誤通知
            await send_changelog_to_channel(f"❌ 自動檢查失敗: {error}")
            return
        # 正常處理流程...
    except Exception as e:
        # 非同步錯誤記錄
        logger.error("scheduled_check_failed", error=str(e))
        # 不拋出異常,避免崩潰

總結:非同步程式設計帶來的業務價值

  • 高可用性:7x24 小時不間斷服務
  • 高併發處理:同時服務多個團隊和專案
  • 資源效率:用最少的資源處理最多的任務
  • 錯誤恢復:自動從故障中恢復,減少人工干預
  • 可擴展性:輕鬆應對用戶數量和功能複雜度的增長

上一篇
解構bot非同步程式設計基礎
系列文
用 Discord Bot 玩轉 DevOps27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言