name: QQ Notify on: issues: types: [opened] pull_request_target: types: [opened, closed] release: types: [published, released] jobs: notify: runs-on: ubuntu-latest if: ${{ github.event_name != 'release' || (!github.event.release.draft && !github.event.release.prerelease) }} steps: - name: Build message id: msg env: EVENT_NAME: ${{ github.event_name }} EVENT_ACTION: ${{ github.event.action }} ISSUE_TITLE: ${{ github.event.issue.title }} ISSUE_URL: ${{ github.event.issue.html_url }} ISSUE_USER: ${{ github.event.issue.user.login }} PR_TITLE: ${{ github.event.pull_request.title }} PR_URL: ${{ github.event.pull_request.html_url }} PR_USER: ${{ github.event.pull_request.user.login }} PR_MERGED: ${{ github.event.pull_request.merged }} PR_MERGED_BY: ${{ github.event.pull_request.merged_by.login }} RELEASE_TAG: ${{ github.event.release.tag_name }} RELEASE_NAME: ${{ github.event.release.name }} RELEASE_URL: ${{ github.event.release.html_url }} RELEASE_BODY: ${{ github.event.release.body }} run: | python3 - <<'PYEOF' import os event = os.environ["EVENT_NAME"] action = os.environ.get("EVENT_ACTION", "") msg = None if event == "issues": title = os.environ["ISSUE_TITLE"] url = os.environ["ISSUE_URL"] user = os.environ["ISSUE_USER"] msg = "\n".join([ "━━━━━━━━━━━━━━━", "📋 新 Issue", "━━━━━━━━━━━━━━━", f"标题: {title}", f"提交者: {user}", f"链接: {url}", "━━━━━━━━━━━━━━━", ]) elif event == "release": tag = os.environ["RELEASE_TAG"] name = os.environ["RELEASE_NAME"] url = os.environ["RELEASE_URL"] body = os.environ.get("RELEASE_BODY", "")[:800] import re body = re.sub(r'#{1,6}\s*', '', body) body = re.sub(r'\*\*(.+?)\*\*', r'\1', body) body = re.sub(r'\*(.+?)\*', r'\1', body) body = re.sub(r'`(.+?)`', r'\1', body) body = re.sub(r'\[(.+?)\]\(.+?\)', r'\1', body) body = re.sub(r'\n{3,}', '\n\n', body) body = body.strip() msg = "\n".join([ "━━━━━━━━━━━━━━━", f"🚀 新版本发布 {tag}", "━━━━━━━━━━━━━━━", "", body, "", f"下载: {url}", "━━━━━━━━━━━━━━━", ]) elif event in ("pull_request", "pull_request_target"): title = os.environ["PR_TITLE"] url = os.environ["PR_URL"] if action == "opened": user = os.environ["PR_USER"] msg = "\n".join([ "━━━━━━━━━━━━━━━", "🔀 新 Pull Request", "━━━━━━━━━━━━━━━", f"标题: {title}", f"提交者: {user}", f"链接: {url}", "━━━━━━━━━━━━━━━", ]) elif action == "closed" and os.environ.get("PR_MERGED") == "true": user = os.environ.get("PR_MERGED_BY", "unknown") msg = "\n".join([ "━━━━━━━━━━━━━━━", "✅ PR 已合并", "━━━━━━━━━━━━━━━", f"标题: {title}", f"合并者: {user}", f"链接: {url}", "━━━━━━━━━━━━━━━", ]) with open(os.environ["GITHUB_OUTPUT"], "a") as f: if msg: f.write(f"skip=false\n") delim = "EOF_MSG" f.write(f"msg<<{delim}\n{msg}\n{delim}\n") else: f.write(f"skip=true\n") PYEOF - name: Send to QQ group if: steps.msg.outputs.skip != 'true' env: SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} HOST: ${{ secrets.DEPLOY_HOST }} ASTRBOT_API_KEY: ${{ secrets.ASTRBOT_API_KEY }} MSG_CONTENT: ${{ steps.msg.outputs.msg }} run: | mkdir -p ~/.ssh echo "$SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan -H "$HOST" >> ~/.ssh/known_hosts 2>/dev/null MSG=$(echo "$MSG_CONTENT" | jq -Rs .) ssh "root@${HOST}" "curl -s -X POST http://localhost:6185/api/v1/im/message \ -H 'Authorization: Bearer ${ASTRBOT_API_KEY}' \ -H 'Content-Type: application/json' \ -d '{\"umo\": \"default:GroupMessage:1087880322\", \"message\": ${MSG}}'"