iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

用 Discord Bot 玩轉 DevOps系列 第 8

用 Webhook 打通 Discord 通知管道

  • 分享至 

  • xImage
  •  

上一篇用GitHub Actions成功跑出一個最簡單的 Hello World workflow後,大致上了解Workflow 是怎麼被觸發的還有他是在哪裡執行,現在要做的是將pipeline的結果傳送到外部,實現自動化回饋的機制,我會使用一個很常見的工具叫webhook來做初步的嘗試


Webhook是什麼

Webhook 是一種「被動式」的訊息傳遞機制。它讓一個系統在事件發生時,自動把資料推送(push)到另一個系統,而不是另一個系統要不斷「主動查詢(polling)」有沒有新事件

例如說:

  • LINE Bot / Discord Bot
    當有人傳訊息給 Bot,LINE 或 Discord 的伺服器就會透過 Webhook,把使用者的訊息推送到你設定好的伺服器。

  • 金流系統(例如綠界 / 藍新)
    當用戶付款成功,金流平台會用 Webhook 通知你的伺服器「這筆訂單付款完成了」。

實作流程

Step 1:在discord中找到「建立webhook」
https://ithelp.ithome.com.tw/upload/images/20250921/20169329802OKRa4Ve.png

Step 2:建立好後點選複製網址
https://ithelp.ithome.com.tw/upload/images/20250921/20169329u8gc2NjZae.png

Step 3:接著來到github將剛剛複製的網址貼入secret中
https://ithelp.ithome.com.tw/upload/images/20250921/20169329MDRTM8iMOH.png

Step 4:然後就可以開始寫workflow

name: 🤖 Discord Bot CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  code-quality:
    name: ✅ 程式碼品質檢查
    runs-on: ubuntu-latest
    
    steps:
    - name: 📦 獲取程式碼
      uses: actions/checkout@v4
      
    - name: 🐍 設定 Python 3.10
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'
        
    - name: 📦 安裝依賴套件
      run: |
        python -m pip install --upgrade pip
        pip install discord.py python-dotenv
        echo "✅ 依賴安裝完成"
        
    - name: 🔍 Python 語法檢查
      run: |
        python -m py_compile bot.py
        echo "✅ 語法檢查通過"
        
    - name: 🧪 模組導入測試
      run: |
        # 只測試基礎導入,不觸發需要 Token 的功能
        python -c "
        import discord
        from discord.ext import commands
        print('✅ 基礎模組導入成功')
        "
        echo "✅ 導入測試完成"
    
    - name: 📢 發送 Discord 通知
      if: always()  # 無論成功失敗都發送
      run: |
        # 使用簡單英文訊息避免編碼問題
        if [ "${{ job.status }}" = "success" ]; then
          MESSAGE="🎉 CI/CD Success! All tests passed. By ${{ github.actor }}"
        else
          MESSAGE="❌ CI/CD Failed! Please check errors. By ${{ github.actor }}"
        fi
        
        # 發送到 Discord Webhook
        curl -X POST \
          -H "Content-Type: application/json" \
          -d "{\"content\": \"$MESSAGE\"}" \
          "${{ secrets.DISCORD_WEBHOOK }}"
          
        # 根據執行狀態傳遞參數
        if [ "${{ job.status }}" = "success" ]; then
          python scripts/send_notification.py success
        else
          python scripts/send_notification.py failure
        fi

以上是以github提供的模板去做修改,添加了語法檢查、安全導入測試、以及結果整合通知

pipeline過程

https://ithelp.ithome.com.tw/upload/images/20250921/20169329d7l3cteL58.png

discord bot通知

https://ithelp.ithome.com.tw/upload/images/20250921/20169329gQg2vYpBr6.png


上一篇
實現簡單的workflow
下一篇
切換Bot模式
系列文
用 Discord Bot 玩轉 DevOps9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言