WebHooker/config.example.yaml
RhenCloud 3dce114cec
feat(groups): optional forge source label in message footers
- Group.forgeLabel (default off, editable per group in the console) shows the
  source forge on every message the group's routes dispatch
- Discord embed footer: forge name next to the repo + the site's favicon as
  icon_url (Gitea instance's own favicon from its origin)
- Telegram footer: hyperlinked site name (GitHub or Gitea hostname); custom
  webhooks render a plain 'Custom' label
- forgeInfo() derives branding from event.provider + repository.html_url;
  dispatch attaches it to the NeutralMessage like mentionRoleIds
- validateGroups accepts forgeLabel booleans; GroupEditor gains the toggle
- tests: forgeInfo unit, discord/telegram footer render, dispatch on/off
- docs: groups.md + message-format.md (en/zh), config.example.yaml, AGENTS.md
- fix: wrangler.jsonc compatibility_date was an incomplete '2026-'
2026-08-14 08:10:04 +08:00

109 lines
3.4 KiB
YAML

# Routes
# Each route defines a filter chain and one or more target destinations
# (Discord channel/thread and/or Telegram chat/topic). See docs/guide/configuration.md.
# Groups scope admin access and can restrict which org/user events flow in.
groups:
- id: default
name: "Default"
# Members with roles (owner / admin / viewer); legacy adminIds still work and are treated as owners.
members:
- login: "your-github-id"
role: owner
# owners: ["myorg"] # restrict events to this org/user (optional)
# providers: ["github", "gitea"] # restrict to source platforms (optional; empty = all)
# installationId: 12345678 # GitHub App installation binding (auto-created on installation.created)
# emoji: true # include emoji in messages (default true)
# forgeLabel: false # show the forge source (GitHub / Gitea / custom) in message footers (default false)
# lang: "en" # message language for this group's routes (en/zh, default en)
# Webhook log channel: a Discord channel/thread or Telegram chat/topic that
# receives a summary of every webhook this group's routes dispatch.
# logTarget:
# platform: discord
# channelId: "CHANNEL_ID_HERE"
# threadId: "" # optional
# logTarget:
# platform: telegram
# chatId: "-1001234567890"
# topicId: "" # optional
routes:
- id: all-push
name: "All Push Events"
enabled: true
groupId: default
filters:
- type: event
match: push
targets:
- platform: discord
channelId: "CHANNEL_ID_HERE"
# - id: specific-repo
# name: "Specific Repo"
# enabled: true
# groupId: default
# filters:
# - type: repo
# match: "org/repo"
# - type: event
# match: [pull_request, issues]
# targets:
# - platform: discord
# channelId: "CHANNEL_ID_HERE"
# threadId: "THREAD_ID_HERE"
# - platform: telegram
# chatId: "-1001234567890"
# topicId: "9876543210"
# - id: exclude-bot
# name: "Exclude Bot Actions"
# enabled: true
# groupId: default
# filters:
# - type: actor
# match: "[bot]"
# exclude: true
# targets:
# - platform: discord
# channelId: "CHANNEL_ID_HERE"
# Discord role mentions: when this route fires, the listed role ids are
# pinged in every Discord target (Telegram targets ignore this field).
# - id: mention-on-release
# name: "Mention Roles on Release"
# enabled: true
# groupId: default
# discordRoleIds: ["111111111111111111", "222222222222222222"]
# filters:
# - type: event
# match: release
# - type: action
# match: published
# targets:
# - platform: discord
# channelId: "CHANNEL_ID_HERE"
# Fallback routes only fire when no other (non-fallback) route matched.
# - id: fallback-all
# name: "Fallback: everything else"
# enabled: true
# groupId: default
# fallback: true
# filters: []
# targets:
# - platform: telegram
# chatId: "-1001234567890"
# Stop routes stop processing further routes when matched.
# - id: exclusive-push
# name: "Exclusive Push"
# enabled: true
# groupId: default
# stop: true
# filters:
# - type: event
# match: push
# targets:
# - platform: discord
# channelId: "CHANNEL_ID_HERE"