編寫腳本
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse# === 1. 配置釘釘機器人 ===
webhook = "https://oapi.dingtalk.com/robot/send?access_token=XXXXXX"
secret = "XXXXXXXX" # 如果沒有加簽驗證,請設置為 None# === 2. GitHub Releases API ===
GITHUB_API = "https://api.github.com/repos/tronprotocol/java-tron/releases"def get_latest_mandatory_release():try:response = requests.get(GITHUB_API, timeout=10)releases = response.json()for release in releases:body = release.get("body", "").lower()if "mandatory upgrade" in body:tag = release.get("tag_name")html_url = release.get("html_url")return tag, body.strip(), html_urlreturn None, None, Noneexcept Exception as e:return None, f"請求失敗: {e}", Nonedef gen_sign(secret):timestamp = str(round(time.time() * 1000))string_to_sign = f'{timestamp}\n{secret}'hmac_code = hmac.new(secret.encode(), string_to_sign.encode(), hashlib.sha256).digest()sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))return timestamp, signdef send_to_dingtalk(title, content, link):headers = {"Content-Type": "application/json"}message = {"msgtype": "markdown","markdown": {"title": title,"text": f"{title}\n\n{content}\n\n[查看詳情]({link})"}}url = webhookif secret:timestamp, sign = gen_sign(secret)url += f"×tamp={timestamp}&sign={sign}"resp = requests.post(url, headers=headers, data=json.dumps(message))if resp.status_code != 200:print(f"發送失敗: {resp.status_code}, {resp.text}")else:print("? 已發送釘釘通知")if __name__ == "__main__":version, note, url = get_latest_mandatory_release()if version and note:send_to_dingtalk(title=f"Java-Tron 發布 Mandatory 升級版本 {version}",content=note[:500], # 釘釘限制最大消息體link=url)else:print("未發現 Mandatory 升級版本或請求失敗")
編寫定時任務
root@iZj6c2h0zqqhn8um6xho5uZ:~/python3# crontab -l59 23 1,15 * * /usr/bin/python3 trx_mandatory_update.py
釘釘消息
點擊詳情就切換到當前最新版本,目前最新版本是
https://github.com/tronprotocol/java-tron/releases/tag/GreatVoyage-v4.8.0