name: Discord โ€” New Issue Notification on: issues: types: [opened] jobs: notify: runs-on: ubuntu-latest steps: - name: Build Discord payload env: ISSUE_NUMBER: ${{ github.event.issue.number }} ISSUE_TITLE: ${{ github.event.issue.title }} ISSUE_URL: ${{ github.event.issue.html_url }} ISSUE_BODY: ${{ github.event.issue.body }} ISSUE_USER: ${{ github.event.issue.user.login }} ISSUE_AVATAR: ${{ github.event.issue.user.avatar_url }} ISSUE_CREATED_AT: ${{ github.event.issue.created_at }} REPO: ${{ github.repository }} LABELS_JSON: ${{ toJson(github.event.issue.labels) }} run: | python3 - <<'PYEOF' import json, os number = os.environ["ISSUE_NUMBER"] title = os.environ["ISSUE_TITLE"] url = os.environ["ISSUE_URL"] body = os.environ.get("ISSUE_BODY") or "" user = os.environ["ISSUE_USER"] avatar = os.environ["ISSUE_AVATAR"] repo = os.environ["REPO"] created_at = os.environ["ISSUE_CREATED_AT"] short_body = body[:300] + ("..." if len(body) > 300 else "") if not short_body.strip(): short_body = "*(no description)*" try: labels_raw = json.loads(os.environ.get("LABELS_JSON", "[]")) labels = ", ".join(f"`{l['name']}`" for l in labels_raw) if labels_raw else "*(none)*" except Exception: labels = "*(none)*" payload = { "content": "@everyone ๐Ÿ“ข **New issue reported on Velxio!**", "embeds": [{ "title": f"๐Ÿ› Issue #{number}: {title}", "url": url, "description": short_body, "color": 0xE74C3C, "fields": [ {"name": "๐Ÿ“ฆ Repository", "value": f"[`{repo}`](https://github.com/{repo})", "inline": True}, {"name": "๐Ÿท๏ธ Labels", "value": labels, "inline": True} ], "author": { "name": user, "url": f"https://github.com/{user}", "icon_url": avatar }, "footer": {"text": "Velxio ยท GitHub Issues"}, "timestamp": created_at }] } with open("/tmp/discord_payload.json", "w") as f: json.dump(payload, f) PYEOF - name: Send to Discord env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_ISSUES }} run: | HTTP_STATUS=$(curl -s -o /tmp/discord_response.txt -w "%{http_code}" \ -X POST \ -H "Content-Type: application/json" \ --data @/tmp/discord_payload.json \ "$DISCORD_WEBHOOK") echo "Discord response: $HTTP_STATUS" cat /tmp/discord_response.txt if [ "$HTTP_STATUS" -ne 204 ]; then echo "::error::Discord webhook failed with status $HTTP_STATUS" exit 1 fi