FiveUnityManual

Content creators

Give your streamers a role, let them link their own channels, and FiveUnity posts in your go-live channel the moment they start streaming on Twitch, YouTube, Kick or TikTok.

Note

Where: Dashboard โ†’ Content โ†’ Content creators ยท In Discord: /link

The module is off by default. Nothing is checked, nobody can link anything, and no message is posted until you turn it on.

#Turning it on

Four things have to be in place. The page tells you which one is still missing at the top, in this order.

SettingWhat it does
EnabledThe switch in the Go-live announcements header. Off, the module does nothing at all.
Creator rolesWho may link a channel and be announced. Pick as many as you like, up to 10. Any one of them is enough, so "Partner", "Content Creator" and "Streamer" can all qualify without setting the module up three times. Pick none and nobody may link.
Go-live channelWhere the announcement is posted.
PlatformsAt least one of Twitch, YouTube, Kick or TikTok.

Two more are optional:

SettingWhat it does
Ping roleMentioned alongside the creator on each announcement. Left unset, only the creator themselves is pinged.
Live roleGiven to a creator while they are streaming and taken back when they stop. A role carrying Administrator is never handed out, whatever you pick.

Once someone holds a creator role, they run /link in your Discord. Nothing about it is public: every reply is only visible to them.

CommandWhat it does
/link add platform: channel:Links one channel. channel takes the account name or the full link: ninja, twitch.tv/ninja, @mrbeast, youtube.com/channel/UCโ€ฆ, kick.com/xqc, tiktok.com/@name.
/link remove platform:Unlinks one channel.
/link listShows what they have linked here, and whether each one is live.

One account per platform per member, and one member per account: if somebody has already claimed a channel on your server, nobody else can. Running /link add again for the same platform replaces the channel rather than adding a second one.

You can see every linked channel under Linked channels on the dashboard, with who claimed it and when they were last live, and unlink one if the wrong account was claimed. Adding a link stays in Discord on purpose: holding the role is how a creator proves the channel is theirs.

#The announcement

The go-live message is one line above an embed. The embed carries the stream title, category, viewer count and thumbnail, coloured by platform, and links straight to the stream.

PlaceholderBecomes
{user}A mention of the creator
{name}Their channel name
{platform}Twitch, YouTube, Kick or TikTok
{title}The stream title
{url}The link to the stream
{game}The category they are streaming under, where the platform reports one

The default is {user} is now live on {platform}!, and the message is capped at 500 characters.

Everything that comes from the streaming platform is escaped before it is posted, and an announcement can only ever mention the creator and the ping role you chose, so a stream titled @everyone free nitro cannot ping your server.

SettingWhat it does
Repeat cooldownMinutes before the same channel may be announced again, 0 to 1440. Defaults to 60. A creator whose connection drops and comes back would otherwise be posted twice, because the platform treats the reconnection as a new stream.
Delete when the stream endsRemoves the announcement once they stop, for a channel that should show only who is live right now. Off by default.

Re-announce live streams forgets every stream that has already been posted, so anyone live right now is announced again on the next check. Use it after fixing a wrong go-live channel; it is the only way to get a stream posted that FiveUnity has already recorded.

#Platforms

Only the platforms you turn on are checked, and only those can be linked.

PlatformHow it is checked
TwitchThe official Twitch API. Needs an application on the bot host (see below). Up to 100 channels per request, so it is the cheapest platform to watch at scale.
KickKick's public channel endpoint. No credentials needed.
YouTubeThe channel's own /live page. No credentials and no API quota needed.
TikTokThe same live-state endpoint TikTok's own web app uses, which answers without credentials. TikTok publishes no live API to anybody, so this one is best effort and can change without notice.

Everyone is checked every three minutes, so an announcement lands within about three minutes of a stream starting.

A switch you cannot turn on is one this bot has not been given credentials for. It says so on the page, and members are told the same thing if they try to link there.

Note

Self-hosting? Twitch needs TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRET in your .env, from an application registered at dev.twitch.tv/console/apps. Any OAuth redirect URL will do; FiveUnity only uses the app credentials, never a user login. The other three platforms need nothing.

#Stream metrics

Every stream the module announces is also counted. Nothing extra to switch on: while the module is on, FiveUnity records each stream's platform, how long it ran, the viewer counts it saw while live, and whether the announcement went out.

The numbers appear in two places:

WhereWhat it shows
/streamstats in DiscordA private leaderboard of the last 30 days, ranked by time live, plus /streamstats member:@someone for one member's all-time totals. Open to every member; every reply is private.
Dashboard โ†’ Content creatorsStream metrics panel under the settings: streams announced all-time, hours live over 30 days, the peak viewer count, and the same leaderboard.
FigureWhat it is exactly
Streams announcedOne per stream. A restart, a dropped connection or a repeat cooldown never double-counts a stream. The all-time count never falls, even as detail ages out.
Time liveFrom when the platform says the stream started to the last check that saw it live.
ViewersPeak and average across the checks while the stream ran. YouTube does not report viewer counts, so those streams show none.
Announcement postedWhether the go-live message actually went out. A stream behind a lost creator role is still counted: the metrics measure the stream, not the post.

Individual streams are kept 90 days; the 30-day leaderboard reads inside that. Nothing is deleted when the module is turned off: the numbers simply stop growing until it is back.

Tip

The leaderboard is grouped per member per platform. A member streaming on both Twitch and Kick appears twice; use /streamstats member:@them for their totals across everything they have linked.

#When a check fails

A check that fails is never treated as "offline". If it were, a service blocking the bot for ten minutes would end every stream in your Discord and re-announce them all when it came back.

Instead the failure is counted on that channel and shown under Linked channels with the reason. A channel that keeps failing is checked less and less often, down to once an hour, until it starts working again, usually because the account was renamed or deleted. Unlink it and link the new name.

If every check against one platform fails twice in a row (roughly six minutes), the bot's emergency contact is sent one critical alert for that platform, and a second message when the checks recover. One channel failing, or a platform being flaky while some checks still succeed, alerts nobody. This is how a platform quietly changing what its checks read gets noticed the same day rather than when a streamer asks why they were never announced.

An answer the checker cannot understand (a bot challenge, a consent wall, a page that changed shape) is a failed check, never "offline": the same rule that keeps a block from ending every stream in your Discord is what feeds the alert.

#What Discord sees

  • /link is open to every member, and refuses anybody without a creator role. It never posts publicly.
  • The announcement is the only message the module sends, and only in the go-live channel.
  • Nothing is ever deleted except an announcement whose stream has ended, and only with Delete when the stream ends on.
  • Unlinking a channel, turning the module off, or removing a creator's role all stop announcements immediately. Nothing already posted is touched.