iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
自我挑戰組

用 Discord Bot 玩轉 DevOps系列 第 24

用BOT手動查看更新日誌

  • 分享至 

  • xImage
  •  

今天要做的功能是讓使用者可以自行輸入想要查詢的天數,例如查看 1 天內、3 天內或更多天前的 changelog,方便快速了解最近的更新內容


撰寫程式碼

def get_merged_prs_since(since_date):
    """獲取指定時間後合併的 PR"""
    try:
        if not GH_TOKEN:
            return None, "❌ GitHub Token 未設定"
        
        headers = {
            'Authorization': f'token {GH_TOKEN}',
            'Accept': 'application/vnd.github.v3+json'
        }
        
        url = f'https://api.github.com/search/issues'
        query = f'repo:{GITHUB_OWNER}/{GITHUB_REPO} is:pr is:merged merged:>={since_date}'
        params = {'q': query, 'sort': 'updated', 'order': 'desc'}
        
        response = requests.get(url, headers=headers, params=params)
        response.raise_for_status()
        
        data = response.json()
        return data.get('items', []), None
        
    except Exception as e:
        return None, f"❌ 獲取 PR 時出錯: {str(e)}"
@bot.command()
async def changelog(ctx, days: int = None):
    """顯示近期更新日誌"""
    if days is None:
        days = CHECK_INTERVAL_DAYS
    
    if days > 30:
        await ctx.send("❌ 最多只能查詢 30 天內的更新")
        return
    
    wait_msg = await ctx.send(f"🔄 正在生成最近 {days} 天的更新日誌...")
    
    since_date = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d")
    prs, error = get_merged_prs_since(since_date)
    
    if error:
        await wait_msg.edit(content=error)
        return
    
    if not prs:
        await wait_msg.edit(content=f"📭 最近 {days} 天沒有合併的 PR")
        return
    
    detailed_changelog = f"🚀 **最近 {days} 天更新日誌**\n\n"
    for pr in prs:
        pr_number = pr['number']
        pr_title = pr['title']
        pr_url = pr['html_url']
        merged_at = pr['pull_request']['merged_at']
        author = pr['user']['login']
        
        merged_time = datetime.fromisoformat(merged_at.replace('Z', '+00:00'))
        formatted_time = merged_time.strftime("%m/%d %H:%M")
        
        detailed_changelog += f"**#{pr_number}** - {pr_title}\n"
        detailed_changelog += f"⏰ {formatted_time} | 👤 {author}\n"
        detailed_changelog += f"🔗 [查看PR]({pr_url})\n\n"
    
    await wait_msg.edit(content=detailed_changelog)

成果展示
https://ithelp.ithome.com.tw/upload/images/20251007/201693292c01nKxnNP.png


上一篇
用BOT自動發 changelog(6)
系列文
用 Discord Bot 玩轉 DevOps24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言