Skip to content

Discord bot

The StreamerCatalyst Discord bot is the companion to your Twitch toolkit. Add it to your community server and it posts the moments that matter — going live, subs, cheers, raids, hype trains — auto-posts your clips and VODs, mirrors your Twitch schedule into Discord’s event calendar, offers self-serve role-picker buttons, and answers a set of slash commands.

Available on the Free tier and above.

The module has three pages in the dashboard sidebar under Discord: Servers, Announcements, and Button roles.

Capability What it does
Go-live announcements Rich embed with your stream title, category and a full-width stream preview the moment you go live, with an optional role ping and custom message
Subs, cheers & raids Independent toggles posting each event to a channel you choose
Hype trains Start and results announcements, configured per train type (Regular, Golden Kappa, Treasure, Shared, Mythic)
Clips & VODs New clips and stream VODs auto-posted (checked every 15 minutes)
Schedule sync Your Twitch schedule mirrored as native Discord scheduled events
Button roles Self-serve role-picker messages your members click to join/leave roles
Slash commands /status, /release, /docs, /feedback, and the /sc command group
Update feeds StreamerCatalyst release and system-status posts
Multiple servers Link as many servers as you like; each one is configured separately
Server snapshot & engagement Live server stats, plus opt-in counters and member growth
  1. Open Discord → Servers in your StreamerCatalyst dashboard.
  2. Click Add to Discord and pick a server you manage. (You need to be signed in to StreamerCatalyst — if you aren’t, you’re sent to sign in first.)
  3. Approve the requested permissions: View Channels, Send Messages, and Embed Links to post; Manage Roles for button roles; Create Events and Manage Events for schedule sync. Mention Everyone is not requested at install — grant it separately only if you want the bot to ping @everyone/@here or roles that aren’t marked mentionable.

When Discord sends you back, the server appears under Linked servers on the Servers page, linked to your StreamerCatalyst (Twitch) channel.

Re-inviting the bot to a server it’s already in doesn’t change the permissions its role already has — adjust them in Discord’s role settings if needed.

You can add the bot to as many servers as you like — use Add another server at the bottom of the list. Every server is configured separately: its announcement channels, toggles, go-live message, hype-train settings, button-role panels and event logging belong to that server alone. Every announcement goes to every linked server that has it switched on.

Each Discord page has a server switcher at the top showing which server you’re editing. The Servers list shows each server’s name, member count, how many channels are mapped and how many announcements are on, with Announcements and Button roles shortcuts that open that server directly.

Click Unlink next to a server on the Servers page. StreamerCatalyst stops posting to it right away, and any button-role panels already posted there stop working. Its channel routing and settings are kept, so adding the bot back restores them. Unlinking does not remove the bot from the Discord server — do that in Discord if you want it gone.

Once the bot is in a server, open Discord → Servers and click Register on the Slash commands card, so the commands appear when members type /. Registration is global — it covers every server the bot is in — and can take up to an hour to show everywhere. Run it again whenever StreamerCatalyst adds new commands (noted in release notes). If you click it repeatedly you’ll see “Too many attempts — wait a minute and try again.”

Configure these on Discord → Announcements, for the server shown in the switcher. For each category you pick a destination channel and toggle it on. Everything is off by default, and a toggle stays disabled until its destination channel is chosen. Changes save as you make them — the header shows “Saving…” while they settle.

Posts a rich embed — “Name is live on Twitch!”, your stream title, the Category, a link to your channel, and a full-width stream preview — the moment you go live. Duplicate online events for the same stream are suppressed, so one stream gets one announcement. You can:

  • Choose the channel it posts to.
  • Ping a role (a specific role, @everyone, or @here). Pings are resolved to real mentions only by the bot — literal @name text you type never pings by accident. The page warns you when the bot needs Mention Everyone (or the role needs to be marked mentionable) for the ping to work.
  • Add a custom message above the embed (up to 500 characters), with $(game), $(title), $(viewers), and $(channel) placeholders. The older {game} style also still works. A placeholder name the bot doesn’t know is left visible in the message rather than silently removed.

The page shows a live preview of how the message and embed will look in Discord.

The stream preview is Twitch’s live preview frame, and Twitch takes a minute or two to render one after a stream starts — so the announcement posts immediately without it and the bot edits the preview into the embed once Twitch has it (it checks every 15 minutes and gives up after about an hour, or when the stream ends). It never posts Twitch’s grey “no preview” placeholder.

One channel, three independent toggles:

Toggle Posts when…
New subscriptions, resubs & gifted subs Anyone subscribes (with tier), resubs (with tier, total months, streak and their resub message), or gifts subs
Bit cheers A chatter cheers bits (with their cheer message)
Incoming raids Another streamer raids you (with the viewer count and a link to their channel)

A gift bomb posts once — the gifter, how many subs and the tier — not once per recipient. Anonymous gifters and cheerers are shown as anonymous. A raid from another StreamerCatalyst channel is posted once, not twice. Bits spent on Power-ups are not announced as cheers.

Hype trains are configured per type — Regular, Golden Kappa, Treasure, Shared, and Mythic — each with independent controls:

  • When it starts — announce the train beginning.
  • Results — announce the final level, with the subs and bits contributed during the train.
  • A custom message and a role ping for each, supporting $(type), $(level), $(total), $(subs), $(bits), and $(channel) placeholders ($(subs) and $(bits) are the results totals).

All types share one hype-train channel; the start/results toggles unlock once it’s set. Each train is announced at most once at the start and once at the end — progress updates during the train are not posted.

Golden Kappa trains are recognised reliably from Twitch’s event data. Treasure, Shared and Mythic trains are recognised when Twitch’s event data identifies them; a train Twitch doesn’t label is announced (and configured) as a Regular train.

The results subs and bits count everything contributed to the train, including the contributions that triggered it and bits spent on Power-ups. They’re tallied the same way as the Hype Train overlay widget and the Numbers hype-train history, so all three show the same figures for the same train.

Optionally mirror platform news into your server (off by default), each with its own channel:

  • New releases — posts when a new StreamerCatalyst version ships, as soon as it’s published.
  • System status changes — posts when StreamerCatalyst goes down, degrades, or recovers (checked every 15 minutes). The same status is on the public status page.

These never re-announce the current release or status when first enabled — only genuinely new changes post afterward.

Two more opt-in feeds on the Announcements page, each with its own channel:

  • Clips — new clips of your channel are posted (title, who clipped it, and the clip link, which Discord unfurls into a playable embed) within about 15 minutes of creation, oldest first. Turning it on never floods the channel with old clips.
  • VODs — when your stream ends, the bot watches for the archive VOD and posts it (title, duration, link) once Twitch publishes it. It looks for about two hours after the stream ends; a VOD Twitch hasn’t published by then isn’t posted, and a channel that doesn’t save past broadcasts has nothing to post. Only streams that end after you enable the toggle are posted — old VODs are never back-filled.

Toggle Sync Twitch schedule to Discord events on (in the Stream schedule card) and the bot mirrors your Twitch schedule into native Discord scheduled events: upcoming, non-cancelled segments within the next 30 days (up to 10). Each event is titled after the segment (or “Live on Twitch” if it has no title), described as “Playing category” when the segment has one, and points to your Twitch channel. Edits to a segment update the Discord event, removed or cancelled segments delete it, and hand-deleted events are recreated on the next sync. Syncs run every 15 minutes; /sc syncevents forces one immediately and reports how many events it created, updated and removed.

Set the schedule itself in Twitch (Stream Manager → Schedule). Segments without an end time become two-hour events.

The bot needs Discord’s Create Events permission to create events (granted at install, along with Manage Events for editing them). If Discord refuses for lack of permission, automatic syncs pause for an hour; after fixing the permission, run /sc syncevents to sync straight away. If Discord rate-limits event creation, the bot backs off (up to six hours between attempts) while edits and deletions keep syncing.

Discord → Button roles builds self-serve role-picker messages for the server in the switcher. Click New panel, then give it a title, a description, a destination channel, and up to 20 buttons. Each button has a label and/or an emoji, a role, and a color (Blurple, Grey, Green, or Red); each role can have only one button per panel.

  • Save draft keeps your changes without touching Discord (a panel shows Draft until it’s posted).
  • Save & post to Discord posts the panel; once it’s live the button reads Save & update in Discord and edits the message in place. Changing the destination channel deletes the old message and posts a fresh one.
  • Delete removes the panel and its message from Discord.

Members click a button to toggle the role on or off, and get a private confirmation. The bot’s own role must sit above any role it hands out in Server Settings → Roles, or Discord rejects the change (the member sees a hint saying so). Managed/integration roles and @everyone can’t be offered. A button whose panel was deleted — or whose server was unlinked — answers “This button isn’t active anymore.”

Command What it does
/status Current StreamerCatalyst system status, per service
/release The latest release notes
/docs <query> Search the documentation (top five matches with links)
/feedback <type> <message> Send a bug report, feature request or general feedback to the team
/sc setup Link to configure this server in your dashboard
/sc stats Your channel’s numbers — this stream while you’re live, otherwise today: new followers, subs, bits, raids and hype trains, plus how long you’ve been live
/sc clips Your top 5 clips from the last 7 days, by views
/sc buttonroles Link to the button-roles dashboard
/sc syncevents Force a schedule sync right now

Any server member can use the commands. Replies to /feedback, /docs, /sc setup, /sc buttonroles and /sc syncevents are private (only the person who ran them sees them); the others post in the channel. The /sc commands answer “This server isn’t linked to a StreamerCatalyst channel yet” in a server that isn’t linked (or was unlinked).

The bot does not assign Discord roles from Twitch subscriptions, and that’s deliberate: a bot can’t see which Twitch account a Discord member is connected to. The transparent way to sync sub-tier roles is Discord’s own native Twitch integration:

  1. In Discord, open Server Settings → Integrations → Twitch and connect your broadcaster account.
  2. Enable the subscriber role(s) — Discord supports per-tier roles.
  3. Viewers connect their Twitch account once under User Settings → Connections → Twitch, and Discord keeps their role in sync automatically.

This requires a Twitch Affiliate or Partner account. See Discord’s guide for the full walkthrough.

The Server snapshot card on the Servers page shows a live view of the selected server: members and online-now (both Discord’s approximate counts), text channels, roles, server boosts and boost tier, and scheduled events — plus how many of the announcement routes have a channel mapped, when the server was linked, and how many slash commands are registered. It’s read from Discord when the page loads; Refresh re-reads it. No privileged member access is needed.

Discord doesn’t report announcement or command analytics, so the bot can record its own — opt-in per server. Click Enable event logging on the Engagement card on the Servers page. From then on it counts Announcements sent and Commands run for that server, and takes a daily member-count snapshot for New members · 7d (which needs a week of snapshots before it shows a number). Counts start when you turn logging on — nothing is back-filled. It uses only standard bot reads — no privileged member-list access. Disable event logging turns it off again.

  • Commands don’t appear — register them (Discord → Servers → Slash commands → Register); global commands can take up to an hour.
  • Nothing posts when I go live / get a sub — make sure the category is toggled on and a destination channel is set, on the right server in the switcher. Then check Settings → Modules → Discord → Health: the EventSub subscriptions should all show ✓. If one says it needs a scope, or the dashboard shows a “Missing Twitch scope” banner, click Re-authorize (the broadcaster has to do this).
  • A role ping doesn’t notify — the bot’s own role must be high enough in your server’s role list, and either the pinged role is marked mentionable or the bot has Mention Everyone.
  • A button role fails — move the bot’s role above the role being granted in Server Settings → Roles.
  • Schedule events aren’t created — the bot needs the Create Events permission; re-check its role permissions, then run /sc syncevents. Heavy edit bursts are rate-limited by Discord and retried on later syncs.
  • A server shows as “Server 123456…” instead of its name — the bot can’t read that server, usually because it was removed from it. Add the bot back, or Unlink the server.
  • “Could not load channels (is the bot still in the server?)” — the same cause: the bot can’t see that server’s channels or roles.
  • “Add to Discord” fails with an invalid redirect — this is a one-time setup item on the StreamerCatalyst side; contact support if you hit it.

See Discord — API endpoints for the full list of HTTP endpoints.

See Discord — Authentication & permissions for the OAuth scopes this module uses and the EventSub subscriptions it reads.