93 lines
3.3 KiB
YAML
93 lines
3.3 KiB
YAML
name: Discord — New Issue Notification
|
|
|
|
on:
|
|
issues:
|
|
types: [opened]
|
|
|
|
jobs:
|
|
notify:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Send issue to Discord
|
|
env:
|
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_ISSUES }}
|
|
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, urllib.request
|
|
|
|
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"]
|
|
webhook = os.environ["DISCORD_WEBHOOK"]
|
|
|
|
# Truncate body
|
|
short_body = body[:300] + ("..." if len(body) > 300 else "")
|
|
if not short_body.strip():
|
|
short_body = "*(no description)*"
|
|
|
|
# Labels
|
|
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
|
|
}]
|
|
}
|
|
|
|
data = json.dumps(payload).encode()
|
|
req = urllib.request.Request(
|
|
webhook,
|
|
data=data,
|
|
headers={"Content-Type": "application/json"},
|
|
method="POST"
|
|
)
|
|
try:
|
|
with urllib.request.urlopen(req) as resp:
|
|
print(f"Discord response: {resp.status}")
|
|
except urllib.error.HTTPError as e:
|
|
body_err = e.read().decode()
|
|
print(f"Discord error: {e.code} {e.reason} — {body_err}")
|
|
raise SystemExit(1)
|
|
PYEOF
|