1. Getting started
From Your servers, click Add next to any server you own or have the Administrator permission in but TrinketBot isn't in yet — that is what it takes for the server to show up there, and to manage it afterward. Once TrinketBot is in a server, click it in the list to open its dashboard. A server that has just been added and has set nothing up opens on Start here: the one step to do next, why it is worth doing and about how long it takes, then the short list of first steps (a log channel, a welcome message, roles, the safety basics, something fun), each ticked off when the server's own settings show it done. You can also let the setup wizard do the basics: say what kind of server it is and it switches on a sensible starting set of modules and sets up the channels they post in. While the list is unfinished, a small “Setup” card in the sidebar and a “Continue setup” card on the Overview point back to it.
Every server's dashboard shares the same shell:
- A sidebar on the left. The modules sit in rows under five headings — Protect, Members, Community & streaming, Activities and Tools — each row named for what you are trying to do (Safety, New members, Streams & uploads…). Open a row to see its pages; the row you are in stays open. An amber dot on a row or a module means the bot has noted something there that needs a look. A module's on/off switch is in the header of its own page.
- A yellow notice at the top of a module's page when something it does has quietly stopped working — TrinketBot can't delete messages in a channel, Discord refused a rule, a post can't be made, a giveaway's winners couldn't be announced, a level reward can't be given, go-live alerts can't be set up. It says what, and since when; the module's tile on the Overview says it needs a look. It goes by itself when the thing works again, and you can dismiss it once you have fixed it.
- Pop-up notifications in the bottom-right corner for the result of what you just did — "Changes saved", a test message sent, or an error and why. Confirmations disappear after a few seconds and errors stay longer; hover a notification to pause it, or click the × to close it. Longer explanations (limits, missing permissions, a setting that's turned off) stay on the page itself until the problem is fixed.
- Choosing a person is done by name: type part of a name or nickname and pick them (Moderation's action form and Cases filters, Activity Logging's ignored users, Live status, the Staff Digest's recipients). Pasting a Discord user ID works too — it is the only way to name someone who has left or was banned. And a length of time can be written the way you would say it:
10m,2h,7d,1h30m. - A server switcher in the top-left of the header — jump to a different server without going back to Your servers.
- A permission tip under a module's title when TrinketBot is missing a Discord permission that module uses. It names the permission, says what the module can't do without it, and how to grant it (Server Settings → Roles → TrinketBot, or re-invite the bot with the current link). The Overview page lists every missing permission in one place, with the modules that use it. A permission marked optional only affects one part of the module — a role reward, a ping, a picture. The check looks at the server-wide permissions; a channel's own settings can still stop the bot in that channel.
- A save bar that slides up from the bottom whenever a page has unsaved changes, with Discard (put everything back to what's saved) and Save changes (Ctrl+S, or ⌘S on a Mac, does the same). Nothing you type or toggle takes effect until you save — the one exception on most pages is a Send test/Post panel-style button, which always acts immediately since it's not something you'd want queued behind an unrelated edit. Send a test says what those buttons do.
- A History button under a module's title, which lists who changed that module's settings and when, and can put a change back — see History and undo.
The Overview page itself (the module grid shown when you open a server) also has a Who can use this dashboard card near the bottom — a read-only list of every role with Administrator, listed highest-in-the-role-list first (the server owner can always open it too). It's there so you can see at a glance who else can reach this dashboard, without having to check each role individually in Discord's own Server Settings. Manage Server alone does not open the dashboard.
Server health
When something in a server needs a look, the top of the Overview says so in one list, Server health. What is Not working comes first, then what Needs a look; each module is named once with a Fix link to its page, and the missing permissions come with it. Besides what a module's own page already says and the notes TrinketBot writes when something fails, it checks the channels and roles each module has saved: a module that is on but has no channel it cannot work without, a channel that was deleted or that TrinketBot can no longer see, a channel where TrinketBot may not post because of that channel's own permissions, a role that was deleted or that TrinketBot cannot give (it belongs to an integration, has a power automatic roles may not carry, or sits above TrinketBot's own role), and anything a plan's limit has paused. It covers Activity Logging, Starboard, Birthdays, Tickets, Leveling, Invite Tracking, Raid Lockdown, Join Guard, Games and Tournaments in this way; the other modules say the same on their own page and tile. It says All clear only when every part of it answered and found nothing; a part that could not run is named, not counted as fine. Under the list, How this is checked says what each check looks at and when it looks again. The checks read the settings TrinketBot has saved and what it already holds of your server; they ask Discord nothing and change nothing.
Send a test
A page that makes TrinketBot post something has a Send a test button, so you can see what members get before any member does: Suggestions, Polls, Giveaways, Events, Starboard, Verification, Tickets, Forms (one on each form), Modmail and Ban appeals, besides the pages that already had a test message of their own. A test is a sample, and it does nothing real:
- It is marked as a test. It says so in its text or its footer. It creates nothing real — no suggestion, poll, giveaway, event, ticket, appeal or form response is made, no vote or entry is counted, nobody is verified — every button on it is switched off, and it pings nobody.
- It goes where the real thing goes. To the channel the page is set to post in (on the Polls, Giveaways and Events pages, the channel you picked in the form), after the same checks of what TrinketBot can see and post in. Modmail and Ban appeals talk to a member by direct message, so their test comes to you by direct message instead, and says so if your DMs are closed to server members.
- If it cannot go out, it says why — the module is switched off, no channel is chosen, TrinketBot cannot post in the channel — and that does not use up your turn: fix it and press again. The pages that use a saved channel use what you have saved, so save first.
- Each page allows one test every ten seconds in a server; pressing sooner tells you how long to wait.
History and undo
Every module page has a History button under its title. It opens the latest changes made to that module's settings in the dashboard, ten at a time (Show older for more), each as a line like “Mallie changed Channel, Message · 2 days ago”: who, which settings, and when. It names the settings and never what they were set to.
- Restore next to a change puts the settings back as they were before that change. It asks first — anything changed since is replaced, and edits on the page that you have not saved are lost — and if the same settings were changed again after that entry, it asks a second time. A restore is recorded as a change of its own, so it can be undone the same way.
- It adds back and overwrites; it never removes. Putting settings back works like restoring a backup: something you added since — a list item, a template, a counter — is still there afterwards. When part of a change could not be put back (a channel or role that no longer exists is skipped, for example), the page says so in words. Secrets are not kept in the History and are never put back.
- Not every change can be put back. Restore appears only where putting the settings back is safe. The other modules keep their history without it and show “Can't be put back” in its place, and so does a change that has nothing to go back to: the first time a module's settings are saved, or settings too large to keep.
- What is not listed. A save that changed nothing. Restoring a backup, or applying a setup template, which change many modules at once. Anything done in Discord instead of the dashboard, such as with a slash command. A change made while many are being saved at once, which is left out rather than slowing the save down.
- Who sees it, and for how long. Anyone who can open the server's dashboard. A person is shown by the name they have in the server now (their nickname, else their Discord name), or as “A former member”. A change is kept for 90 days, and a server keeps its latest 300. The History goes when the server's data is deleted and is not part of a backup; the Privacy Policy says what is stored.
2. Setup templates
On the server's Start here page, the recommended step has a link, Set up the basics with a template, that switches on a sensible set of modules for the kind of server you run, in one go — a general community, a streamer or VTuber, an art or creator community, a gaming community, or a support or help-desk community. It is four short screens: the kind of server, where each module should post, a look at exactly what will be switched on, and then a way to see it. Leave it and come back: it remembers where you were in this browser, and Not now puts it off. The kind you pick is remembered too, and Start here puts its steps in the order that suits it: a streamer is led to announcing streams first, a gaming server to roles and something to chase.
- It only turns things on. A module that is already on is left exactly as it is; nothing is switched off, replaced or reset. If a module was half set up (a saved channel, your own settings), those are kept and it is just switched on. Run it a second time and nothing changes.
- What a template contains is listed before you apply it. Every template has moderation, activity logging, welcome messages and leveling; on top of those, a general community gets insights, a question of the day,
/todayand badges and thanks; a streamer or VTuber gets suggestions, insights and a question of the day; an art or creator community gets a starboard, suggestions, a question of the day and badges and thanks; a gaming community gets voice xp, suggestions, insights, a question of the day, games, trivia, tournaments and/today; a support or help-desk community gets suggestions, insights and badges and thanks. - Modules that post somewhere ask for a channel, under headings, and a template asks about seven at most. Where the name of a channel you already have looks right (daily-question,trivia, suggestions…) it is already chosen for you; change it if it is wrong. Or choose Make #name for me and TrinketBot creates the channel (it needs the Manage Channels permission and says so when it lacks it); the log channel is made private, so only administrators and TrinketBot can see it, because it records what members edit and delete. TrinketBot never changes a channel that already exists. A picker lists only channels TrinketBot is allowed to see (from 2026-11-16 Discord no longer tells a bot about the others), and it never suggests one it cannot see: if your private channel is missing, give TrinketBot's role View Channel there and press refresh; a channel you saved earlier that it can no longer see shows as Hidden or deleted channel instead of looking empty.
- A module that needs a channel is not set up without one — the question of the day, activity logging, welcome messages, suggestions and the starboard — and the review says needs a channel. Games, trivia and tournaments are marked optional: they are switched on either way, and a channel only adds a post (a place to share daily scores, a daily trivia question, the place tournaments are posted). The review also says what a module will post by itself, such as one question a day at 18:00 UTC, before anything is applied; the time can be changed on the module's own page.
- Streaming on Twitch? Say so on the first screen (a streamer or VTuber is asked already) and the last screen shows how to add TrinketBot to your Twitch chat as well — commands, timers, quotes, moderator helpers and thank-yous for follows, subs and raids. That is a page of its own (Twitch chat bot) with its own login, with Twitch; nothing is set up for it here.
- Seeing it: when the welcome messages are on, the last screen can send you a preview in your direct messages, or post a sample in the welcome channel (it pings nobody).
- What it can't do for you — connecting a Twitch or YouTube account, writing a form, following a feed — is listed under Next, you could as links to those pages.
Everything it sets up can be changed (or switched off) from that module's own page afterwards.
3. Twitch notifications
Announce in a channel whenever your server's Twitch channel goes live.
- Open Twitch in the sidebar and enter your server's Twitch channel, as a name or a link, to connect it — no login required.
- Under Discord setup, choose a notification channel (required) and, optionally, a role to ping. A channel connected here starts switched off: switch on the Enabled switch at the top of the Twitch page and press Save changes.
- Write a ping message — it supports
{mention}and{streamer}— and turn on the custom embed to control its title/description/color, or leave it off to use the built-in embed. - Instead of the built-in embed, you can attach a full message template from the dropdown for complete control over the embed and buttons.
The streamer can also switch the go-live alert on from their own page (Connect), without typing the channel name, once they have linked a Discord account that manages this server. It then shows here as an ordinary connection: you can change it or disconnect it like one you made yourself. A server has one main Twitch channel, so if it already has another the streamer's page says so and offers nothing. The steps are in Discord and Twitch together. This page, Raids & clips and Stream schedule each end with a line pointing to the Twitch chat bot, which has its own login with Twitch; the account menu has the same entry, marked Twitch login.
When the stream ends chooses what happens to the alert afterwards: mark it as ended with how long the stream ran — and a link to the saved replay, if Twitch saved the stream; the Watch button goes if it didn't, and a custom message template keeps its own buttons — leave it as it is, or delete it. A Twitch connection made now starts on mark it as ended; a server that connected before keeps what it chose. Disconnecting and connecting again counts as a new connection and goes back to mark it as ended, while switching to a different channel keeps the choice. TrinketBot waits until the stream has been offline for a couple of minutes, so a brief reconnect doesn't end it early. Only servers that choose to mark or delete the alert are checked, once a minute, for all watched streamers together.
Under mark it as ended there is also a checkbox, Add the stream's peak viewers and best clips. It is off until you switch it on, and off for every connection made before it existed. With it on, the note also says the most viewers TrinketBot saw (“highest we saw 1,240 viewers”), and up to 3 buttons next to Watch the replay open the stream's most-viewed clips, titled as whoever made them wrote them. TrinketBot looks at the viewer count once a minute, so a short spike can be missed, and it counts only from when the box was switched on. The clips are read once, when the alert is edited: a clip that Twitch lists later is not added, and one made just before the end may not have many views yet. With no clips, the note is all that is added. A custom message template that has no room left for the buttons gets the note without them. Kick and YouTube have the first half of it, the peak viewers, on their own pages; the clips are Twitch only. The choice is part of a server backup, and the viewer number is not.
Under mark it as ended and delete it (not under leave it as it is, where the alert would keep showing the viewers of a stream that is over) there is a second checkbox, Keep the alert up to date while the stream is on. It is off until you switch it on, and off for every connection made before it existed. With it on, TrinketBot edits the alert in place about every 5 minutes while the stream is on, to show the stream's current title, category and viewers, and a fresh picture of the stream about every 10 minutes. It uses the look at your stream that TrinketBot already takes once a minute, so it asks Twitch for nothing more, and it edits only when something the alert shows has changed. The viewers are rounded (exact up to nine, then to the nearest 5, 10 or 100), so a few people coming and going change nothing. The alert stays the message you set up: the built-in alert gets a Viewers field, and a custom message shows the count wherever it has {twitch.viewers} (it is in the variable list of the Messages page); a message that never uses it shows no count. An edit pings nobody, and the alert is never posted again. When the stream ends the alert is marked as ended or deleted as before: the built-in alert's Viewers field is taken off, and a custom message keeps the last count it showed. Discord limits how often a message that has been up for over an hour may be edited, and does not say how often. If it refuses an edit for that reason, or the alert was deleted, TrinketBot stops updating that alert, and it stays as its last update showed it until the stream ends. A message that is a random group of messages is not updated, since every edit would show another of them, and a followed channel's alert never is. The choice is part of a server backup.
Pings by game, under Discord setup, is for a server that doesn't want its role pinged for every game. List the games that are posted without a ping — Just Chatting, say — and, for up to ten games, a role of their own to ping instead of the Ping role. Any other game pings the Ping role as before, and while both lists are empty nothing changes. The game is matched by its name as Twitch spells it, whatever the capital letters, and exactly: Minecraft is not Minecraft Dungeons. A game that pings nobody is still announced, and an @everyone in the ping message is not sent for it either. A stream with no game set pings the Ping role. A followed channel's alert doesn't use the lists. They are part of a server backup, and Send test notification shows who the game would ping without pinging them.
Use Send test notification to preview what will post — it says it is a test and pings nobody, not even the role you set — and the Enabled switch at the top of the page to turn the whole module off without losing your configuration. TrinketBot needs View Channel, Send Messages and Embed Links in the notification channel. From 2026-11-16 Discord no longer shows a bot the channels it can't view, so if TrinketBot can't see it nothing is posted, and the page's Last error says “TrinketBot can't see the Discord live notification channel (…) — give it the View Channel permission there, or choose another one.” Send test notification shows the same message.
Followed channels
Besides your server's own Twitch channel, a server can follow friends' and teammates' channels and get the go-live alert for each in a Discord channel you choose. It has its own page, Followed channels, next to Twitch in the sidebar.
A followed channel gets the go-live alert and nothing else: the Live role, Raids & clips and the stream schedule work for your server's own channel only. TrinketBot only checks whether a followed channel is live. It does not follow them on Twitch, join their chat or ask for their login. A server can follow 3 channels on the free plan, 6 on TrinketSupporter and 10 on TrinketChad (see Premium & Patreon), and one past the limit is paused, never deleted.
Streamers posting here
When a streamer has chosen this server for their own Twitch chat bot — to post their follows, subs and raids, or their Twitch log, or to hand their events to your automations — a Streamers posting here card appears on this page, whether or not the server has a Twitch channel of its own connected. It is there because the streamer set it up on their own page, with a Discord account that manages this server, and you would otherwise never see it.
- For each channel it shows the Twitch name and picture, the Discord channel its events go to, and which events are switched on, as small chips. The Twitch log has a line of its own, with the channel it goes to and which parts are on, and so does what the channel hands to this server's automations. A channel that logs every chat message says so, with names, since that copies what viewers write into this server. It never shows the streamer's Discord account.
- Remove asks first, then stops that channel posting here, and stops handing its events to your automations. Nothing else of theirs changes, and the streamer can choose this server again from their own page for as long as the Discord account they linked still manages it, but has to switch the automations on again.
- Only channels set up by linking a Discord account are listed. A streamer can also post into a server through a Discord webhook, which TrinketBot can't tie to a server: look under Server Settings → Integrations → Webhooks in Discord.
- Three ways to stop a post: Remove here; take Manage Server from the Discord account the streamer linked, since TrinketBot checks it as it posts (on every event, and for the Twitch log at least once a minute); or deny TrinketBot Send Messages in that channel in Discord. Remove is the clean one. The other two leave the connection in place and show the streamer an error.
- A streamer who manages the server can set this up without asking you first. The card is how you find out, and removing a channel is yours to do at any time.
Roles for Twitch subscribers
TrinketBot doesn't give roles to subscribers, on purpose: it would need the streamer's own Twitch login, which TrinketBot never keeps. Discord has this built in, under Server Settings → Integrations, for Twitch Partners and Affiliates, and it works for YouTube members too. The steps, what to check, and what a subscriber role can be used for in TrinketBot are in Discord and Twitch together.
4. Kick notifications
Announce in a channel whenever a Kick channel goes live.
- Open Kick in the sidebar and enter the Kick channel name — a pasted
kick.com/…link works too, and no login is required. - Under Discord setup, choose a notification channel (required) and, optionally, a role to ping.
- Write a ping message — it supports
{mention}and{streamer}— and turn on the custom embed to control its title/description/color, or leave it off to use the built-in embed, which shows the stream's title, category and thumbnail. - Instead of the built-in embed, you can attach a full message template from the dropdown for complete control over the embed and buttons.
When the stream ends works as it does for Twitch: leave the alert as it is, mark it as ended with how long the stream ran, or delete it. Unlike a new Twitch connection, a Kick connection starts on leave the alert as it is (the default here). Kick offers no replay link, so a marked alert just says how long the stream ran. Under mark it as ended there is also a checkbox, Add the stream's peak viewers, off until you switch it on: the note then also says the most viewers TrinketBot saw while the stream was on (“highest we saw 310 viewers”). It reads the viewer count from the channel information it already checks about once a minute, so a short spike can be missed, and it counts only from when the box was switched on. Kick has no clips to link, so that half of the Twitch option is not there. The choice is part of a server backup, and the viewer number is not.
Pings by category works as Twitch's Pings by game does, with Kick's categories: list the categories that are posted without a ping, and up to ten that ping a role of their own instead of the Ping role. Every other category pings the Ping role, and both lists start empty. If Kick has not yet told TrinketBot the stream's category when the alert goes out, the Ping role is pinged.
Use Send test notification to preview what will post — it uses the channel's real stream if it's live at that moment and sample details if not, says it is a test and pings nobody, not even the role you set. Switching the module off pauses it without losing your configuration, and switching it back on picks up where it left off.
Kick tells TrinketBot the moment a stream starts, so the notification normally appears within seconds. A stream that ends posts nothing, and a stream that was already announced is never announced twice, even if Kick sends the news more than once. Several servers can watch the same channel and each is notified on its own settings. TrinketBot needs View Channel, Send Messages and Embed Links in the notification channel: if it can't see the channel, nothing is posted and the page's Last error says “TrinketBot can't see the Discord live notification channel (…) — give it the View Channel permission there, or choose another one.”
If the page says Kick isn't set up on this bot, whoever runs this TrinketBot hasn't connected it to Kick yet — there's nothing to change on your side until they do.
5. YouTube notifications
Announce in a channel whenever a YouTube channel uploads a new video or goes live.
- Open YouTube in the sidebar and enter a channel ID (starts with
UC…) or an @handle. To find your channel ID: open your channel page → About → More → Share channel → Copy channel ID. - Choose a notification channel and, optionally, a role to ping — the ping message supports
{mention}and{channel}. - By default YouTube notifications post as plain text and rely on Discord's own link preview. Turn on Custom embed if you'd rather control the title/description/color yourself, or attach a message template for full embeds and buttons.
Notify for Shorts is on by default, so Shorts (videos of 60 seconds or less) are announced like any other upload. Turn it off to announce only long-form videos. It is per server, so several servers watching the same channel can choose differently.
Announce live streams is on by default. When a stream or premiere goes live, TrinketBot posts a go-live alert with its own wording (and, if you like, its own message template) — the upload message says “new video”, which would be wrong for a stream. A stream that is only scheduled is not announced until it actually starts, and once it has ended it is never announced as an upload. YouTube limits how often a bot may ask, so a channel is checked every 5 minutes while a stream is on air or about to start, every 15 minutes if it posted something in the last day, and every 30 minutes otherwise: a go-live alert can arrive a few minutes after the stream starts, and an upload up to half an hour after it is published. A stream that has already been live for several hours when you switch this on is not announced as news, and neither is an upload more than two days old.
Also announce a stream before it starts, under it, is off until you switch it on. With it on, a stream or premiere that is scheduled to start within the next 24 hours gets one extra line the first time TrinketBot sees it: who is going live, a countdown that counts down in Discord (“in 3 hours”), the title and the link. It is the same line for everyone, uses none of your messages or templates, and pings nobody, not even the Ping role; the go-live alert, with its ping, still comes when the stream starts. A stream scheduled further ahead gets its line once it is within a day, a stream that is late gets none, and a line already sent is not edited or deleted when the stream ends or is cancelled. It costs no extra YouTube quota, and it is part of a server backup.
When the stream ends chooses what happens to the go-live alert once the stream is over and YouTube lists it as a replay: leave it (the default for a YouTube connection, unlike a new Twitch one), mark it as ended with how long the stream ran and a link to watch it back, or delete it. Under mark it as ended there is also a checkbox, Add the stream's peak viewers, off until you switch it on: the note then also says the most viewers TrinketBot saw (“highest we saw 310 viewers”). It uses the viewer count YouTube gives with a live video each time TrinketBot checks the channel (every few minutes while a stream is on), so a short spike can be missed and a stream YouTube gives no count for gets no number. YouTube has no clips to link here. The choice is part of a server backup, and the viewer number is not.
Use Send test notification to confirm it's wired up correctly before the channel's next real upload (a test says it is one and pings nobody, not even the role you set), and Send go-live test to see the go-live alert — it uses the stream that is on air, or your latest upload if nothing is live. TrinketBot needs View Channel, Send Messages and Embed Links in the notification channel: if it can't see the channel, nothing is posted and the page's Last error says “TrinketBot can't see the Discord YouTube notification channel (…) — give it the View Channel permission there, or choose another one.”
6. TikTok notifications
Announce in a channel whenever a TikTok account posts a new video.
- Open TikTok in the sidebar and click Log in with TikTok — this connects via TikTok's own login, not a channel name.
- Choose a notification channel and, optionally, a role to ping — the ping message supports
{mention}and{account}. - Turn on the info-card embed for a custom title/description/color, or attach a message template instead.
If the connected account ever shows a Needs reauth badge, click Change account and log in again — notifications pause until it's reconnected. TrinketBot needs View Channel, Send Messages and Embed Links in the notification channel: if it can't see the channel, nothing is posted and the page's Last error says “TrinketBot can't see the TikTok notification channel (…) — give it the View Channel permission there, or choose another one.”
Paused while TikTok reviews TrinketBot's TikTok app. Until TikTok approves the app, TrinketBot checks TikTok for nothing, so TikTok upload notifications are paused in every server. Nothing is wrong with your server and your settings are kept. Each server that has them on is told once in its notification channel, the TikTok page and /tiktok status say so too, and the Overview shows it. When TikTok approves the app the check starts again by itself and the server is told they are back. Videos posted while they were paused are not announced afterwards: only the ones posted after that are.
7. Live status
While a stream is on, give the streamer a Live now role and put a status line on a voice channel — both taken back automatically when it ends. It follows the streams of whichever of Twitch, Kick and YouTube this server has connected. Off until you turn it on.
- Live role is given to the person you name under Who streams (paste their Discord user ID, or press That's me). It must be a role without powerful permissions (not Administrator, Manage Server, and so on) and sit below TrinketBot's own role in Server Settings → Roles. A role the streamer already had is left alone when the stream ends.
- Voice channel status is the short line Discord shows under a voice channel's name.
{title}becomes the stream's title and{platform}becomes Twitch, Kick or YouTube; it is cleared when the stream ends. TrinketBot needs the Set Voice Channel Status permission on that channel — servers that added it before this existed have to grant it (or re-run the invite link). - You can use either part or both. If streams are on more than one platform at once, the role stays until the last one ends and the status shows the newest.
- A stream counts as over once it has looked offline for a couple of minutes, so a dropped connection doesn't switch the role off and on. Twitch and Kick are checked once a minute; a YouTube stream ends when the channel lists it as a replay, which can take a few minutes.
- Live status starts from the same “the stream went live” news as the go-live alert, so it only follows a platform whose own page is connected and switched on (the Enabled switch at the top of its page). It does not depend on the alert being posted: it still works if the alert's channel is missing or can't be posted in, and on YouTube it works with Announce live streams off. A platform that is connected but switched off is not followed, so turning the go-live alert off — including from the streamer's own page — stops Live status for that server too. Setting up the go-live alert does not set up Live status: the role and the voice status need their own settings here.
- Is it working? The page has a box that lists what has to be true, in the order a stream goes: a stream platform is connected, a connection is switched on, the Live role, the voice channel or both are chosen and TrinketBot can use them, and nothing has gone wrong applying it. The first one that fails is boxed, with what to do. A connection is switched on turns amber when a platform is connected but none of the connected ones is switched on, and links to that platform's page. When one is on and another is off, it stays green and only notes the other. That is the usual reason Live status does nothing for a server that connected a channel only for Raids & clips, because a new connection starts switched off. The box reads what is saved, so changes you haven't saved aren't counted; Check again reads it again after you fix something in Discord or on another page.
- What it keeps of a finished stream. While Live status is on, TrinketBot keeps one short record of each stream that ends: the platform, when it began and ended and the most viewers it saw (it looks about once a minute, so a short spike can be missed). No title, no chat and no names. The records are kept for 400 days and are what the Wrapped weekly digest and yearly recap use to say how many streams there were and for how many hours. They are deleted with the server's data and are not part of a backup.
8. Feeds
Follow a blog, a devlog, a subreddit or a Bluesky account, and its new posts appear in a channel as a small card — title, a few lines, a picture if it has one, and a link. A server can follow 1 feed, or 3 onTrinketSupporter and 10 on TrinketChad.
What you can follow
- A website: give the address of its RSS or Atom feed — or just the site's address, and TrinketBot looks for the feed the page advertises. Blogs, devlogs, itch.io developer pages and most creator sites have one.
- A subreddit:
r/vtubersor a link to it. Reddit sometimes turns automated readers away; when it does, the feed says so and TrinketBot tries again later. - A Bluesky account:
name.bsky.socialor a link to its profile. Only the account's own posts, not its replies or reposts.
Presets
When you follow a feed, Start from a preset saves you finding the feed's address. Choose a Steam game's news (its app number, or the address of its store page), a GitHub repository's releases, tags or commits (owner/repository), a YouTube channel's uploads (its channel ID, which starts with UC), a Mastodon account (@name@server), a Bluesky account or a subreddit, type the one or two things it asks for, and the form is filled in; you can still change it before you press Follow. A preset only builds the address: the feed is read, checked and posted like any other. For a YouTube channel's uploads with live streams and a role to ping, the YouTube page does more.
How it works
- When you follow a feed, TrinketBot reads it once to check it works and to see what is already there. None of that is posted — only what is published after.
- Every ten minutes it looks again. A feed several servers follow is fetched once. If many posts arrive at once, the newest five are posted and the rest are skipped, and a post dated more than a week ago is never announced (some feeds re-send old entries).
- Pings are optional: choose a role and it is mentioned with each post. Nothing in a feed's own text can ping anyone.
- Words and message (on each feed's card, or when you follow it) calm a busy feed. List up to 20 words that a post must have one of, and up to 20 that keep a post out; they are looked for in the post's title and its first lines, whatever the capital letters, and a card says how many words it filters. A post kept out is never posted later, even if you change the words. You can also write a line of text to go above each post, with
{title},{link},{author},{feed},{mention}and{guild.name}; the role is pinged only where the line says{mention}. A feed with no words and no line posts as before. Post the latest one now ignores the words. - Post the latest one now sends the newest post straight away, so you can see how it looks and that TrinketBot can post in the channel. It needs View Channel, Send Messages and Embed Links there.
- A feed that keeps failing is looked at less often, then every few hours; the reason is shown on its card. Pausing, changing the channel or resuming tries again at once.
TrinketBot only reads the feed's public posts. It never sends the address anywhere but to the site itself, and refuses addresses that point at private networks.
9. Stream schedule
Your Twitch schedule is the list of streams you plan in Twitch's Creator Dashboard (Stream Manager → Schedule). TrinketBot reads it every fifteen minutes and can turn it into Discord events and a weekly post, so your community sees when you'll be live without you posting it. It needs your Twitch channel connected on the Twitch page, and a schedule set up on Twitch.
Discord events
- Each stream planned for the next two weeks becomes a Discord event — an event “somewhere else” that links to your Twitch channel. A stream that changes time or title updates its event; a cancelled stream, or a stream you moved out of the window, has its event removed; a stream inside a Twitch vacation is skipped.
- Only events TrinketBot made are ever changed. One you made by hand is left alone. If you delete one of TrinketBot's by hand it stays deleted — it won't be made again.
- A stream that is already on air, or starts within a minute, doesn't get an event. Turning syncing off leaves the events already made; remove them from the Events page.
- TrinketBot needs the Create Events permission. Discord allows 100 scheduled events per server.
Weekly post
Once a week, on the day and hour you choose (in UTC), TrinketBot posts the coming week's streams to a channel, optionally pinging a role. Each time is a Discord timestamp, so every reader sees it in their own timezone. A week with nothing scheduled posts nothing. If TrinketBot was off for more than half a day after the time, it waits for next week instead of posting late. Post this week now sends it straight away.
Both are off until you turn them on. The settings, but not which event is which, are included in backups.
Want your Twitch chat to know when you stream? A command or a timer in the Twitch chat bot can say your next streams with {schedule}. It reads the same Twitch schedule, in UTC with the time left, and follows a change you make on Twitch within about 5 minutes. It needs no server and none of this page's switches. The chat bot has its own login, with Twitch.
10. Raids & clips
Go beyond “I'm live”: welcome the people who raid you, say where you took your own crowd, and share the clips your community makes. Both follow the channel from the Twitch page, so connect that first. Each has its own switch and its own channel, and a Post a card in a channel switch, on by default. With the card switched off nothing is posted and no channel is needed: the raids or the clips go only to this server's Automations and webhooks, which is what to use when a rule of yours posts instead and you don't want it announced twice. A third part, Most-watched clips, is a weekly post of its own.
Raids
- When a raid happens, a short card goes in the channel you chose — “Friendly is raiding with 42 viewers!” for one that comes to you, “Raiding Friendly with 42 viewers” for one you send — with a link to the other channel. Nothing in it can ping anyone, and a name that has formatting characters in it is shown as plain text.
- Announce picks the direction: raids on your channel, raids you send, or both. Smallest raid leaves out raids with fewer viewers than that (1 announces them all).
- Twitch tells TrinketBot about raids directly — you don't sign in to anything and no extra Twitch permission is needed. The subscription is made when you save and kept right every half hour; several servers following the same channel share one.
- The “Try the message” links post a sample (marked as a test) so you can see how it looks and that TrinketBot can post there. It needs View Channel, Send Messages and Embed Links.
- Each raid is also an event for this server's Automations (A Twitch raid) and for webhooks that listen for
stream.raid. Raids have to be switched on, and only the raids that Announce and Smallest raid let through are sent, whether or not the card is posted. TrinketBot's own card is posted as well, so a rule that posts its own message adds a second post: switch the card off if the rule is enough. The ready-made Welcome a raid rule under Automations starts from here. - Is it working? Once raids are switched on and saved, the Raids card has a box that lists, in order: this server has a main Twitch channel; TrinketBot can post in the raid channel (with what is missing, in words, if it can't); and nothing has gone wrong posting a raid card (the last error Discord gave, as it gave it). With the card off, the two channel rows give way to a line saying no card is posted. The first row that fails is boxed with what to do, and Check again reads it again. It can't see whether Twitch is sending the raid, so a box with every row fine does not prove a raid will arrive.
- If the streamer's own Twitch chat bot also posts raids here. The chat bot's Events page can post Incoming raid to a channel of this server. If that is the same channel as the raid channel here, only this card is posted there, and the page says so. If it is a different channel, both cards are posted. Raids under Smallest raid, and a server set to Raids I send, don't count as covered, so the chat bot's own post is made for them. Only these two built-in cards are de-duplicated: a Discord webhook set as the chat bot's web address, or a webhook of this server, can still add a second post. See Discord and Twitch together.
Clips
- Every 5 minutes TrinketBot looks for clips made of your channel and posts the new ones, oldest first, as a card with the title, the picture, the length, the game and who clipped it (public on Twitch), and a Watch clip button. Clips made before you switched this on are never posted.
- A card usually comes 1.5 to 6.5 minutes after the clip was made: a clip is posted once it has had about 90 seconds to finish, and the check runs every 5 minutes. That is how it goes for a clip made with Twitch's own Clip button, or any way other than the chat bot's clip command. A clip made with the Twitch chat bot's clip command is different: a card for it is posted as soon as Twitch has finished the clip, in each server whose main Twitch channel it is, with Post new clips and its card switched on and a clips channel TrinketBot can post in, and the check does not post it a second time. See Discord and Twitch together.
- A clip is posted once per channel: TrinketBot remembers the clips it has posted for about a day, so a round that failed halfway and is tried again doesn't post the first ones twice. If many are made at once, the newest five go out, and a closing line says how many more there were, with a link to the channel's clips on Twitch. If TrinketBot can't post (the channel was deleted, can't be seen, or a permission is missing) it doesn't lose them: they are posted once it works again, for up to a day back. It needs View Channel, Send Messages and Embed Links in the clips channel.
- Post the latest clip now sends the newest clip from the last week, so you can check the channel works. It counts as posted, so it isn't posted again. It needs the card switched on, and it is a test of the card: it doesn't tell your Automations or webhooks.
- Disconnecting the Twitch channel on the Twitch page, or connecting a different one, starts the clip feed afresh: only clips made after that are posted. The place the check had got to is forgotten with the connection.
- Each new clip is also an event for this server's Automations (A new Twitch clip) and for webhooks that listen for
clip.created, once per clip. With the card on, a clip is passed on once its card is in the channel, so a clip waits while the channel doesn't work; with the card off it is passed on when it is found. At most the newest five clips of one check are passed on. TrinketBot's own card is posted as well, so a rule that posts its own message adds a second post: switch the card off if the rule is enough. - Is it working? Once clips are switched on and saved, the Clips card has a box like the Raids one (a Twitch channel followed, a channel TrinketBot can post in, the last post error) and one more row, TrinketBot is checking for new clips, which says how far the checks have got. If that is longer ago than a working check leaves it, three checks in a row, the row turns amber: clips made after that time haven't been looked at, usually because Twitch didn't answer for a while or TrinketBot was restarting, and it picks up from there once checks go through again, as long as that is within a day. Under the box the card's timing is repeated, and Check again reads the page again.
Most-watched clips
Once a week, TrinketBot posts the 3 clips of the week that Twitch counts the most views for, in a channel you choose. It is a digest, and it is separate from Post new clips: that one posts every clip as it is made, this one looks back over a finished week, and either can be on without the other. Nobody has to vote.
- Switch on Post the most-watched clips once a week (it needs a connected Twitch channel), choose the channel, the Day and the Time (a list of hours in UTC; Monday 09:00 UTC to begin with) and, if you like, a role to ping. It is one message with the clips as cards, each with its place, its title, its picture, who clipped it, its views and a Watch button. The views are Twitch's, counted when the post goes out.
- Saving never posts. The first post comes at the next chosen time and covers the seven days before it, including days from before you switched this on. The same goes for moving the day or hour. A week without clips posts nothing, and that is not an error.
- TrinketBot checks every 5 minutes. If it was down at the chosen time it still posts within 12 hours; a post that fails (a channel it can't post in, or Twitch not answering) is tried again every few minutes until then, and after that the next try is the following week's. It posts once: the time is taken before the message is sent.
- The ping goes with the scheduled post only, never with Post it now, and only to a role that is still there; it is never
@everyone. Pinging a role that isn't set to “anyone can mention” needs the Mention Everyone permission (see Tips & troubleshooting). - Post it now posts the best clips of the last seven days up to now, to see how it looks and that TrinketBot can post there. It pings no one and isn't that week's post: the scheduled one still comes. It needs View Channel, Send Messages and Embed Links in the channel, and a problem with the channel is shown on the card.
- A clip that the clip check already posted in that channel shows again if it is among the most watched. Nothing about the clips is kept: TrinketBot reads them from Twitch when the post goes out.
- It is not Art & clips, whose weekly pick is for what your members post in a channel and vote on.
Raids & clips settings are included in backups, with the two card switches and the most-watched clips post; a backup made before the cards could be switched off restores with both on, and a server without a card is restored without needing a channel. Where the clips had got to, the list of clips already posted, and when the weekly post last went out are not included. This is not the same as Art & clips, which is for the art and videos your members share in a channel.
See also the Twitch chat bot, which thanks raiders and new followers in your Twitch chat and answers chat commands. It has its own login, with Twitch. The steps for using both are in Discord and Twitch together.
11. Message templates
Reusable, fully custom messages — plain text plus up to 10 embeds and 25 buttons each — built once and reused anywhere a module lets you attach one (Twitch/Kick/YouTube/TikTok notifications, ticket messages, welcome/DM/goodbye/boost/role messages, custom and word commands) or sent manually.
- Open Messages in the sidebar, then New template. Give it a name and write the message content, using variable buttons like
{mention},{guild.name}or{user.name}— click into a field first, then click a variable and it is inserted at your cursor (replacing anything you had selected). The Variables tab lists every variable with what it is, an example, and which messages fill it in ({channel.name}and{timestamp}, for one, are empty in a welcome message); choosing one puts it where your cursor was. - The editor has Edit and Preview tabs, and inside Edit the Visual, Raw and Variables views. On a wide screen the preview stays beside the editor and the Preview tab only points at it; on a narrow one the tabs switch between the two. Raw shows the message as JSON (
name,blocks,buttons,dynamicImageId) to copy or change: Apply has the bot check it the way a save does, and when it refuses shows its sentence beside the part of the message it is about. Under the blocks, Load replaces the editor's content with another message of your library, or with pasted JSON (never its name), and Clear empties it; both ask first when you have changes that are not saved. Each block can be collapsed and duplicated. - Every text field has a small smiley button — in the message text, embed title, description, footer, author name, field names and values, and each button's label. Click it to open the emoji picker: this server's own custom emoji first (animated ones are marked GIF), then every ordinary emoji by group. Search by name or by Discord's own shortcode (
:heart:,:tada:,:+1:), choose a skin tone for the ones that have them, and click one to put it in at your cursor — a custom one goes in as its code (<:name:id>), so there is no need to look it up in Discord. Hold Shift while clicking to add several in a row; the ones you used last are listed first. Custom emoji show in message text, embed descriptions, titles and field names, but Discord doesn't draw them in footers, author names or button labels — so the picker leaves them out there. A button's Emoji field takes exactly one emoji. The same picker is on every other place in the dashboard where you write a message: notifications, welcome and birthday messages, tickets, giveaways, polls, the starboard, and more. - Add embeds for title, description, color, URL, thumbnail/image, author, footer, an optional timestamp, and up to 25 fields each (name/value, optionally displayed inline). A field's value can span several lines — type a line break directly in it, there's no need for a separate blank-name field just to start a new paragraph.
- Build a message from blocks in any order — + Add text, + Embed and + Add media — and reorder them. Media blocks are images you upload yourself (PNG, JPEG, GIF or WebP, up to 8 MB each, 10 per template, 20 MB together in one message) rather than links. A server can store 25 MB in 50 files on the free plan, 100 MB in 200 on TrinketSupporter and 500 MB in 1,000 on TrinketChad; the Message Builder shows how much is used, and Delete file on a media block frees a file that nothing else uses right away (a file that is still used is not deleted, and you are told by what). If Discord refuses a message because its pictures are more than your server's boost level allows, TrinketBot sends it again with fewer pictures, or only its text, instead of losing it.
- Embed colors don't need the color picker every time: pick from the built-in palette, or save your own colors as presets ("+ Save this colour as a preset") that everyone managing the server can reuse. Mark one as the server default and every new embed starts with it; otherwise a new embed starts with the color of the message's last embed, or TrinketBot yellow when the message has no embed yet. With two or more embeds, Apply to all embeds recolors them at once. The same palette appears on the Twitch, Kick, YouTube, TikTok, Birthday and Ticket pages.
- Add buttons and choose What it does: Open a link opens a URL; Give or take a role toggles a role on the person who clicks it; Reply with a message answers them, privately, with another message of your library (or a random group of them); Open the FAQ shows them your FAQ's categories; Open a form opens one of your forms; Open a ticket opens a ticket of a type you choose, or the plain ticket. Each of those four does what the module's own command or button does and checks, when it is pressed, that the module is switched on and that what it opens still exists: if not, the person is told so, privately. A button cannot reply with the message it is on, and in a direct message these buttons are left out, like role buttons. Buttons sit in rows: + Action Row adds a row (up to five, with up to five buttons each), and a button's Row box moves it between rows; buttons with no row are placed automatically, five to a row, after the rows you made. A row with no button in it is not saved. Roles with elevated permissions (Administrator, Manage Server, Manage Roles, etc.) or moderation powers (Timeout Members, Manage Messages, Manage Nicknames, Mention Everyone, Manage Threads) can't be attached to a button, a reaction role or an automatic grant — this is enforced when you save. One that was set up before and is already working keeps working until you edit it.
- The Preview card shows the message inside a Discord-style message, with the embed drawn the way Discord draws it — fields on their grid (up to three inline fields per row), thumbnail, image, footer with its time, and buttons in their real colours. Emoji are drawn as Discord draws them: unicode emoji as Twemoji, custom emoji from Discord's own image server (an emoji that has been deleted shows as its
:name:, as in Discord), and a message that is only emoji is shown large. Discord's message formatting works in message text, embed descriptions and field values:**bold**,*italic*,__underline__,~~strikethrough~~,||spoiler||,`code`and code blocks,[links](https://example.com)(and<https://example.com>), headings (# big,## medium,### small),-# small text,> quotes, bullet and numbered lists, mentions, slash-command mentions like</name:id>, and timestamps like<t:1700000000:R>. Titles and field names show emoji but no formatting, and footers, author names and button labels show only ordinary emoji — the same as in Discord. A line that starts with a number and a dot (1. Rules) becomes a numbered list, exactly as in Discord — put it in bold (**1. Rules**) to keep it as a heading. - The preview is made the way a send is made, so it shows text cut where Discord cuts it, and every variable that has no real value here with its example. The one exception is
{mention}: a message sent from the Messages page leaves it empty until you choose a role under Send, so the preview does too and says so (“no role chosen: sends empty”). A message with a media block, or with text after an embed, can only be sent as a Components V2 message, where Discord has no embeds: each embed becomes a box with a coloured edge, and its title link, timestamp and icons are left out. The preview says when that happens, and the counters under it show how much of Discord's limits the message uses (a classic message holds 2,000 characters of text, 10 embeds and 6,000 characters in them; a Components V2 message holds 40 components and 4,000 characters of text). A Components V2 message that needs more than it holds is not saved, and a message with nothing to post is not saved either. - The bot also checks the
{variables}of a message against where it is used. A name that the feature leaves empty (a member's{user.name}in a ticket message, the{channel.name}of a welcome message, or a welcome message's{user.name}in an automation for “A member joins”, which has{username}and{displayName}instead) and a name that is not a variable at all both send nothing, so they are listed under the preview, with the name you probably meant when there is one. The same note appears under a message box on another page (ticket, notification, command, event, scheduled and sticky messages, automations) as soon as you choose a message there. These are warnings only: they never stop a save or a send. - The preview updates live as you type. Save the template, then use Send to post it to a channel manually (with an optional mention role) any time — no notification trigger required.
- Send me a preview, beside Send, posts the saved message to your own direct messages, so you see it in Discord itself and not in a drawing of it. It is made the way a send is made, with you and your server filling the variables, and its picture is drawn for you (a message sent to a channel from this page never carries one). Nobody is pinged, and role buttons and the buttons that open something are left out because they need a server to act in; the answer says when it left something out. If your DMs from servers are closed, TrinketBot says so instead of sending. You can send 5 previews a minute.
- To fix a typo or update something already posted, fill in a Message ID under Send (or click Edit this one next to any entry under Recently sent, which fills it in for you) and the button becomes Update message — it edits that message in place with the template's current content instead of posting a new one. This only works on a message TrinketBot itself sent.
- From the Messages list, Duplicate or Delete any template.
- A server with no message yet is not left with a blank page: Start from a ready-made message offers five starter messages (server rules, an announcement, frequently asked questions, a role picker and a welcome).Use this starter copies one into your messages and opens it in the editor, and Load in the editor has a From a starter box that puts one in the message you are editing. A starter makes up nothing about your server: where you have to say something it holds a line that tells you what to write, and you change every word of it.
Dynamic images
A dynamic image is a picture you design once and the bot draws again for each member a message is about, with their own name and avatar. It is not sent on its own: you attach it to a message, and every time that message is sent for a member, the picture goes with it.
- Open Messages, then Dynamic images. New dynamic image starts from a blank canvas, from TrinketBot's own design or from one of three ready-made rank cards (TrinketBot yellow, night and minimal). The counter beside the heading (for example 1/3) is how many designs your plan allows; the plans list the numbers.
- A design is a canvas from 100 to 1,200 pixels wide and 100 to 800 high, with layers drawn from the first to the last in the list. A Color layer is a box (rounded if you like, with a border); an Image layer shows the member's avatar, the server's icon or a picture you upload, as a square, a rounded square or a circle, with an optional ring (it can also show the member in first, second or third place of the leaderboard); a Text layer is one line of text; a Progress layer is a bar that fills from the left to a value from 0 to 100, with the colour of the bar and of the track behind it and round or square ends. Drag a layer on the picture or move it with the arrow keys (Shift moves it ten pixels), and use Align to centre it. Undo and Redo (the arrows at the top, or Ctrl or Cmd+Z and Ctrl or Cmd+Shift+Z) take back and bring again the last 50 changes, a drag or a slider counting as one; deleting a layer asks nothing because Undo brings it back. While you type in a box, Ctrl or Cmd+Z undoes the typing instead.
- Text can hold the variables shown in the designer, such as
{user.name},{guild.name}and{member.count}. The designer's Preview asshows the picture as a message, the rank card, the level-up message, a giveaway, the leaderboard header or the birthday card, lists the variables each one fills in ({level},{xp},{progress}for the rank card;{prize}and{winnerName}for a giveaway;{top1Name}for the leaderboard;{birthday.date}for the birthday card) and warns about a variable the chosen kind leaves empty. A rank card, a giveaway or a leaderboard in the preview is drawn with made-up numbers and names. Text is shrunk to fit the width of its box, never wrapped. Six fonts are included (Figtree, Raleway, Nunito, Lora, Caveat and Space Mono, free fonts under the SIL Open Font License), with bold and, where the font has it, italic. They have the Latin letters of Western European languages (é ü ñ å ø ß and the like). A letter they lack, such as the Polish ł, the Czech ř, the Turkish ş or the Hungarian ő, is drawn as the plain letter it is built on (l, r, s, o), so “społeczności” reads “spolecznosci”. Other scripts (Cyrillic, Greek, Arabic, Japanese and so on) and emoji are not drawn in text: a member name in one is drawn as the member's username, and if that does not work either, as “Member”. Put an emoji in as a picture layer. - Pictures you upload (PNG, JPEG, GIF or WebP) count against the same media storage as the pictures in your messages, and a picture larger than 4,096 pixels on a side or 16 megapixels cannot be used. A design can have 10 layers on the free plan, 25 on TrinketSupporter and 50 on TrinketChad.
- To use a design, choose it in the Dynamic image box of a message in the Message Builder (or press Attach to message on the design). Only messages about a member carry it: welcome, goodbye, boost, direct-message and role messages, a ticket's messages, custom and word commands, and automations that start from a member. A message sent for something else, such as a stream alert or a scheduled post, is sent without it.
- A design can also be the picture of the
/rankcard, of the level-up message and of the header of/leaderboard, chosen on the Leveling page, of the birthday announcement, chosen on the Birthday page, and of a giveaway, chosen when you start one. The library shows where a design is used, and asks before you delete one that is. - If a picture can't be drawn, or its design was deleted, the message is still sent, without the picture (the rank card goes back to TrinketBot's own). Designs and the pictures they use are not part of a backup.
Server style
Server style sets the look of the messages TrinketBot posts for its own features, once: an accent colour, a line of text under each message and the emoji it uses for success, errors and the rest. Open Messages, then Server style. The preview shows the three kinds of message: one in TrinketBot's own colour, one for success and one for an error.
- The accent colour replaces TrinketBot's own yellow only. Green for success, amber for a warning, red for an error and grey for something closed or ended stay as they are, so a red message is still an error, and a colour you picked for one message always wins. Under the picker, a hint says when the colour is hard to see on Discord's dark or light theme.
- The footer text (one line, up to 80 characters) is added under the messages. Leave it empty for no footer; TrinketBot never puts its own name there.
- Emoji: twelve meanings (success, error, warning, information, coin, star, trophy, ticket, lock, heart, crown and flame), each with the picker that lists your server's own emoji. An emoji left empty is TrinketBot's own. A custom emoji has to be one of this server's.
- The style reaches Points and the shop, Leveling's
/rankand/leaderboard, Giveaways, Tickets, Suggestions and the season results of Games; the page lists them. The rest of TrinketBot, and every message you build in the Message Builder, keeps its own look. A giveaway you never recoloured takes the accent. The style is part of a backup; a custom emoji the server being restored to does not have is left out.
Wording
Wording lists the fixed sentences TrinketBot says to your members that you can reword, grouped by module, so a ticket reply or a shop purchase can sound like your server. Open Messages, then Wording.
- Each sentence shows what TrinketBot says, a box with your own text, its variables as buttons that put
{name}where your cursor is, and a preview of what a member reads. The search box finds a sentence by any word of it.Reset to default puts TrinketBot's own text back. Nothing changes until you press Save. {emoji.success},{emoji.error}and the other ten are the emoji you chose in Server style. A variable a sentence does not fill is shown in a warning and left empty; the text can be up to 500 characters, and a server can reword up to 200 sentences. An empty or unusable text is replaced by TrinketBot's own when it is sent.- Only private replies and the like are on the list: sentences that ping people, such as the winners' announcement of a giveaway, are not. Your rewordings are part of a backup.
- If your server speaks another language, each sentence shows what TrinketBot says in that language, with the English beside it, and says which language applies. Your own wording replaces the translation, and a text that is the translation word for word is not counted as a rewording.
Server language
Language (on Server style) is the language TrinketBot answers your members in: English or Finnish. It is the server's language and not each member's, so a reply in a public channel reads the same for everyone, and it is saved with the rest of the style and is part of a backup.
- What is translated so far: the replies and buttons of Tickets, Points and the shop, Giveaways, Suggestions, Verification, Reminders and timezones, Leveling's
/rankand/leaderboard,/me,/birthdayand/helpand/setup, with the numbers, dates and times written the Finnish way. The language box on Server style lists how much of each part is done; everything else is still said in English, and a translation that is missing falls back to English by itself. - A panel title, text or button label that you left at TrinketBot's own wording (the Tickets panel, the Verification panel) is shown in the server's language; one you wrote yourself, and every message you build in the Message Builder, stays exactly as you wrote it.
- Not changed by the language: the names of slash commands and their options; the logs, moderation notices, stream alerts and the other parts that are not translated yet. The dashboard is not part of it either: each person reads the dashboard in their own language, chosen with the language picker in its header. Discord shows the descriptions of the most used commands in Finnish to members whose own Discord is in Finnish, whichever language the server picked.
Random groups of messages
A random group is a library entry that holds 2 to 10 of your messages and sends one of them, picked at random, each time it is used. Choose a group where you would choose a message and the feature varies by itself: a welcome that is never the same twice, a custom command with several replies, a sticky message that changes every time it is posted.
- Open Messages and press New random group. Give it a name, tick the messages it picks from (a search box appears once your library is long) and press Create random group. A group is marked with a dice in the list and says how many messages it picks from. The counter beside the button (for example 1/5) is how many groups your plan allows: 1 on the free plan, 5 on TrinketSupporter and 15 on TrinketChad. A group also counts toward the 100 templates a server can have.
- A group holds messages only, never another group, and a message can be in it once. Open a group to rename it, Add messages, Remove one (nothing changes until you press Save), Duplicate it or Delete it. Deleting a group does not delete its messages.
- Every use draws again. A group can be chosen in the same boxes as a message: the stream alerts, ticket messages, custom and word commands, automations, event reminders, scheduled and sticky messages, and Welcome messages. The buttons on the message that was picked work as that message's buttons.
- Send on a group's page posts one of its messages and tells you which one it picked. Recently sent lists the posts, each with the message it was sent as, and Edit this one updates that post as the message it was sent as, never drawing again.
- The box for a reaction role panel (buttons or a dropdown) does not offer groups: a panel is rebuilt from its message whenever it is updated, and a group would swap the text under the members each time.
- Deleting a message takes it out of every group it is in; the confirmation lists them first and says how many messages each keeps. A group left with one message sends that one every time, and a group left with none sends nothing, so the page asks you to add another. Groups are not part of a backup.
Ready-made how-to posts
A how-to post is a short guide that TrinketBot has already written for the members of your server: what a feature does and how they use it. Post one to a channel so that members can read it, without writing it yourself. A guide is one embed, and posting it never pings anyone.
- Open Messages and scroll down to Ready-made how-to posts. Preview shows the guide the way Discord will draw it, with your server's name in it. Post to a channel asks which channel and posts the guide there, then links to the post.
- The header of a module that has a guide also has a small Post a how-to button. It opens the same dialog for that module's guide, so you can post it from the page you are already on.
- TrinketBot needs the View Channel, Send Messages and Embed Links permissions in the channel. If one is missing, the dialog says which. You can post up to five guides a minute.
- A guide says what members can do with a feature, so post it once the module is switched on in your server. The bot does not check that for you.
- Add to my messages copies the guide into your message templates, named “How to use …”, so that you can change the words and send it like any other template. The copy is yours: a later change to the ready-made guide does not reach it. It counts toward the number of templates your server can have.
- There is a guide for these modules: Art and clips, Ban appeals, Birthdays, Code hunt, Collectible drops, Confessions and Ask-me-anything, Contests, Custom roles, Events, the FAQ, Forms, the forum helper, Games, Giveaways, Heads-ups, Invite tracking, Join to Create, Leveling, Live boards, Looking for group, Modmail, Points, Polls, Predictions, Question of the day, Quests, Reaction roles, Recognition, Staff applications, Starboard, Stream bingo, Suggestions, Tickets, Today, Tournaments, Trinket, TrinketBot news, Trivia, Verification and Wrapped. A module that is only for the staff, or that works by itself (Moderation, Auto Moderation, Activity Logging, Welcome Messages and the stream alerts, for example), has none. To write a guide of your own, make a message template and send it.
Keeping TrinketBot's own posts up to date
TrinketBot redraws the posts it made itself and edits a post in place when it would read differently now, so a guide that is reworded in an update, or a panel whose title, buttons or kinds you changed, does not stay as it was on the day it was posted. The post shows (edited), and nobody is pinged.
- It keeps up to date the how-to posts you post from the dashboard, and the message of the Tickets panel, the Verification panel, the Applications panel and each form's button. A change you save on those pages still shows at once; this also catches a new look or new default words that came with an update, and an application kind that opened or closed.
- Each post is looked at every 6 hours, a few at a time, so a server with many posts is never flooded, and a post is edited only when the new drawing differs from the one TrinketBot made last. The first time after this was added, each existing panel is edited once.
- Under the how-to guides on Messages, the card Keep TrinketBot's posts up to date has the switch and the list of posts it keeps up to date, with the channel and when each was last looked at and redrawn. It is on for every server until you switch it off; it needs no new permission, only the View Channel and Embed Links TrinketBot already needed to post. It is not part of a backup.
- It never touches messages you wrote yourself in the Message Builder (sent, scheduled or sticky), posts made for one event (an alert, a result, a welcome), polls, giveaways, contests, boards that update themselves, or anything a member wrote. A guide you posted before this existed is not on the list: post it again if you want it kept up to date. If a post's channel is hidden from TrinketBot or its message is deleted, it is left alone or forgotten, and nothing is posted in its place.
12. Scheduled messages
Posts one of your message templates to a channel on a schedule — a daily reminder, a weekly digest, an announcement for next Friday — instead of only on demand or when something happens. Each scheduled message pairs a template, a channel and a time; you can have 2 on the free plan, 5 on TrinketSupporter and 15 on TrinketChad.
Setting one up
- Message is any template from the Message Builder, so a scheduled message can be anything one can be — text, embeds, media, buttons. Edit the template and the next post uses the new version.
- Repeats — every day, every week (on the days you tick), every month (on a day of the month), or just once. Every can be more than 1: every 2 days, every 2 weeks, every 3 months. It counts from the Starting date, so “every 2 weeks on Monday” keeps its rhythm from the week you start. A monthly message on the 29th–31st uses the last day of a shorter month.
- At and Timezone are the time as people in that timezone read it. A 9:00 message stays at 9:00 when the clocks change. Under the form, the page shows the next five times it will post, worked out by the same code that runs it.
- Ping a role (optional) fills
{mention}in the template and allows that role to be pinged — put{mention}where you want the ping. An@everyoneyou type into the template yourself is honoured; nothing else pings anyone. - Replace the previous post removes the last post when the next goes up (after the new one is sent, so a failed send never leaves the channel empty).
Besides the usual template variables, scheduled messages can use {date} (2026-10-06), {date.long} (Tuesday, 6 October 2026), {weekday}, {time}, {channel.name}, {schedule.name}, {guild.name} and {timestamp} — the date and time are in the schedule's timezone.
What to expect
- Post now sends it once as a test. It doesn't count as a run, and doesn't change when the next one goes out.
- If TrinketBot is offline at the time, a run less than an hour late still posts; a later one is skipped (it says so on the page) rather than posting out of time. After a long outage it posts once when it's back, not once per missed day.
- A run that fails — the channel was deleted, TrinketBot can't post there — is not retried; the reason is shown on the page and the next scheduled time is unaffected. If you delete the template it was using, the schedule stays, flagged, until you choose another.
- A one-off switches itself off after it posts and stays in the list as Finished. Active pauses a schedule without losing its settings.
- Scheduled messages are included in server backups; each finds its template by name when restored, so it needs the templates restored with it.
13. Sticky messages
Keeps a message at the bottom of a channel: when people post, TrinketBot removes its copy and posts it again underneath. It's meant for a rules or info channel on an active server, where a pinned message is easy to miss but one that is always the last thing you see isn't. A channel has at most one, and a server up to 25.
Setting one up
- Channel and Message — any template from the Message Builder. It goes up as soon as you save; each repost uses the template as it is now, so editing the template updates the sticky the next time it moves. Role buttons on the template keep working.
- Cooldown (3 seconds to an hour) — it moves at most once per cooldown, however busy the channel is, so a fast channel doesn't flicker. A quiet channel sees it come back a couple of seconds after someone talks.
- Bots' messages push it down too is off by default. Two bots that each keep a message at the bottom would otherwise repost over each other forever, so a message from another bot or a webhook doesn't move it unless you turn this on. TrinketBot's own messages never count.
- Active off takes the message down without losing the settings; turning it back on puts it up again.
- A server can have 2 sticky messages on the free plan, 5 on TrinketSupporter and 15 on TrinketChad.
Good to know
- A sticky never pings anyone, even an
@everyoneor role mention written into the template — something that reposts itself all day must not be able to. - The new copy is posted before the old one is removed, so a failed post (no permission, a broken template) leaves what is already there. The reason shows on the page. Repost now puts it up again straight away, wherever it is.
- If TrinketBot restarts, a sticky that got buried in the meantime is brought back to the bottom; one that is still the last message is left alone. If someone deletes the sticky by hand it returns at the next message; use Active or Remove to take it away for good.
- TrinketBot needs to see the channel and be able to send messages and embed links there. Sticky messages are included in server backups (each finds its template by name), and a restored one appears at the next message in the channel rather than posting by itself.
14. Moderation
Warnings, timeouts, kicks, bans, and channel actions, with a full case history. Cases and User Reports each get their own page (linked from the two cards at the top); everything else below is a compact list further down the same page — click a row to expand it.
Settings
- The sidebar toggle turns the whole module on or off. While off, actions that create a new restriction (warn, timeout, kick, ban, purge, slowmode, lock) are blocked — actions that remove one (unban, remove timeout, unlock, clear warnings) always still work, so turning the module off can never trap someone mid-punishment.
- DM the user on punishment — sends a direct message when someone is warned/timed out/kicked/banned. Never blocks the action if their DMs are closed. Someone who isn't in the server is only messaged if the server has dealt with them before (an earlier warning, ban and so on); an ID it has never met is acted on without a message.
- Protect pinned messages from purge — pinned messages are skipped when bulk-deleting.
- Case visibility — Full shows every staff member who issued each case; Anonymized hides the issuing moderator from other staff.
- Immune roles — members with any of these roles are never moderated: no ban, kick, timeout or warning from a command or from a tool that acts on its own, and the message filters and Scam Shield leave their messages alone (Scam Shield's own rule in Discord too). The Admin guard is the one exception, because an account that holds an immune role can be taken over like any other.
Predefined reasons
Save a short name plus the full reason text once, then reuse it from the action form's dropdown (and from Discord's own slash-command autocomplete) instead of retyping it.
Taking an action
The New action card covers every action type: Warn, Add a private note, Timeout (with a duration in seconds), Remove timeout, Kick, Ban, Unban, Clear warnings, Purge messages (pick a channel and an amount from 1–100), Set slowmode (pick a channel and seconds — 0 disables it), Lock channel, and Unlock channel. Destructive actions (kick, ban, purge) ask you to confirm before running.
Temporary bans
/ban takes an optional duration (12h, 7d, 1w2d, 30d — from a minute to a year; lengths of time everywhere in the moderation commands can be written as weeks, days, hours, minutes and seconds together, such as 1h30m); the dashboard's Ban action has a length in seconds field (blank means permanent). The person is told how long it lasts if DMs are on. TrinketBot lifts it when the time is up, within a minute, and records it as an Unban case by the bot saying the temporary ban ended. A ban you lift by hand first is simply closed, and if you ban someone again (say, for good) before the first one ends, the first ending never undoes the second. TrinketBot needs the Ban Members permission at that moment; if it doesn't have it, it keeps trying each minute.
Private notes
/modnote add writes a note on someone's record (or choose Add a private note in the New action card). /modnote list reads them and /modnote remove takes one off by its case number. A note is stored as a case, so it shows beside their warnings and bans in Cases and their history — but nothing is done to them and they are never told. It works for someone who has left, and needs the Moderate Members permission.
Looking things up, and what the reply tells you
/case number shows one case the way the Log channel's card does, with whether it is still active; /history user lists the newest of someone's cases with how many warnings are standing. Both answer privately and need Timeout Members. If the server has hidden who acted from other staff (Moderation → Privacy), /case hides it here too — only that moderator and the owner still see it, and/history never names a moderator. /unban suggests the people TrinketBot banned who are still banned as you type; a pasted ID still works.
After a warning, timeout, kick or ban, the reply says whether the person was told by direct message — or that they couldn't be, because their DMs are closed — so you know whether to tell them yourself, and after a warning how many active warnings they now have.
The Moderation menu on a member
Press and hold a member (or right-click them), then Apps → Moderation. Only people with Timeout Members see it. It answers privately with the member's standing (active warnings, the last case, timeouts in the last 30 days) and their newest five cases, as /history shows them, with three buttons: Warn and Timeout each ask for a reason (and, for a timeout, how long) and then do exactly what /warn and /timeout do — the role rules, the immune roles, the Warns ladder, the direct message and the case are the same — and Open in dashboard (for people who can open the dashboard) goes to the member's page there. There is no Ban or Kick button; those stay slash commands that ask you to confirm. The menu follows the module's switch, and Warn and Timeout follow the Commands page.
The staff queue
/queue answers privately, to anyone with the Timeout Members permission, with what is waiting for staff right now: open tickets and modmail conversations as links to their channels (oldest first), and how many member reports, ban appeals and form applications are waiting and in which channel they are reviewed. It lists where to go, never what anyone wrote, and a module with nothing waiting isn't mentioned. Open conversations are listed even if their module has since been switched off, because they still need an answer.
Cases
Every action is logged as a case. Open the Cases card to filter by action type, status (active/resolved/cleared), target user ID, moderator user ID, or a date range, and page through the results.
The User Reports card opens submissions for moderators to review; its own "Set up" link configures how members can file one — see the next section.
15. User Reports
Lets your members flag another member or a message for staff review, without needing moderator permissions themselves. The first visit to this page walks through a short setup wizard; after that it's a normal settings page you can revisit any time.
Ways to report
Turn on any combination of these — each gets its own custom name or label, chosen when you turn it on:
- Slash command — e.g.
/report, with a member to report as its option. - User context menu — right-click a member → Apps → your chosen label.
- Message context menu — right-click a message → Apps → your chosen label. This replaces the bot's old, always-on "Report Message" action — turn it back on here if you want it.
- Message reactions — reacting to a message with a chosen emoji reports it. Since a reaction can't open a text prompt, these are filed with a fixed system reason rather than something the reporter types. TrinketBot takes the reporter's emoji off the message again so nobody can see who reported (this needs Manage Messages in that channel; without it the emoji stays).
Who can report
Leave the allowed-roles list empty to let every member report, or restrict it to specific roles. Members with an immune role can never be reported, regardless of who's reporting. A member who can't report, or who reported a minute ago (there is a 60 second pause between a member's reports), is told so when they use the menu, before they write anything. Switching reporting off removes the menus and the command from the server altogether.
Predefined reasons
Add a short list of common reasons (e.g. "Spam", "Harassment") that reporters pick from instead of typing one — reorder them with the up/down arrows. Turn off "Allow a custom reason" to require picking from the list; leaving it on adds a "Custom reason…" option that opens a short text prompt.
Report channel
Optionally post every new report to a channel, with an optional role ping. Reports always show up on this server's User reports list either way — the channel post is just an immediate heads-up. Until you choose a channel, nobody is told in Discord when a report comes in, so a moderator has to open that list to see it; the settings page says so too. A reporter is told their report was “sent to the moderators” only when it was posted to the channel; otherwise they are told it was recorded for the moderators to review.
What is kept
A report keeps who filed it, who it is about, the reason and how it ended. When it is about a message, that message's text and attachment links are captured once, when the report is filed, so you can judge it even if the message is deleted. The captured text is deleted when the report is resolved or dismissed, and after 90 days if nobody has looked at it. Anyone who can time members out sees the open reports, with the reason given and a link to the message, by running /queue, even without access to the dashboard.
16. Modmail
Members message the bot privately; staff answer from a private channel in the server. Nobody has to share their own DMs, several staff can answer, and there is a record. Off until you turn it on.
- How it goes. A member sends TrinketBot a private message, and it asks them first: Send to staff or Cancel — so a message sent to the bot by mistake, or for another reason, never opens a channel or pings anyone. A few messages in a row get one question, about the first. Once they press Send, it makes a channel that only your staff role can see (in the category you choose, if any), pings the role, and posts what the member wrote. What staff type there is sent to the member; what the member writes back appears in the channel. A ✅ on a message means it was delivered, ❌ that it couldn't be, ⏳ that someone is sending too fast (more than ten a minute is not passed on).
- Start a staff message with
//to keep it among staff — it isn't sent. With Staff replies show as “Staff” on, the member sees only that, not a name or picture. A member who is in several servers that use modmail is asked which one their message is for, and has one conversation open at a time. /modmail close(inside the conversation's channel) tells the member the conversation is closed — with your closing words and an optional reason — and removes the channel./modmail contactstarts one with a member (they are messaged first; if their DMs are closed, nothing is left behind)./modmail blockand/modmail unblockstop and allow someone using it. Staff means people with Manage Server or the staff role.- Transcripts channel (optional): when a conversation closes, a text file of it — who said what, in order — is posted there first. If it can't be posted, the conversation stays open rather than losing the record. Leave it empty to keep nothing: the conversation is gone once closed. TrinketBot needs Manage Channels, and Send Messages and Attach Files in the transcripts channel.
- Close a conversation nobody has written in (off by default; after 3, 7, 14 or 30 days). A member can have only one conversation open across every server that uses modmail, so a forgotten one stops them writing anywhere else. When nobody — staff or member — has written in a conversation for that long, TrinketBot closes it the way
/modmail closedoes: the transcript is posted if you chose a channel, and the member gets your closing words and the reason. It is checked every five minutes, ten at most at a time; one that can't be closed (the transcript can't be posted) stays open and is tried again an hour later. - Staff can claim a conversation (off by default). New conversations get a Claim button under the first post; pressing it shows who is on it, and the button becomes Unclaim, which only that person or someone with Manage Server can press. The member is told nothing, and closing is not limited by the claim. A conversation already open when you switch it on keeps its first post, without the button.
- Say plainly what happens to messages. The welcome message each member gets when they start one is yours to write — it should say that staff read what they write (the default does).
{server}is replaced with your server's name. - Send a test sends you two direct messages, marked as tests: the welcome message a member gets when they start a conversation, and the first post staff see in the conversation's channel, about you. No channel or conversation is made, and the staff role is not pinged. It needs Modmail switched on, and your own DMs open to server members.
What is kept
TrinketBot does not store the messages. It remembers who has a conversation open and in which channel (and, with claiming on, which staff member claimed it) — so it can route replies and restart safely — and who you have blocked. The words live in the staff channel and, only if you chose one, in a transcript file in your transcripts channel. Deleting a conversation channel by hand simply ends that conversation.
17. Ban appeals
A ban is easier to trust when there is a way back. With appeals on, the message TrinketBot sends a member it bans carries an Appeal this ban button. They answer a few questions in a pop-up, the staff read the answers in a channel you choose, and decide with one click.
How it works
- The button is on the ban message — the DM TrinketBot sends when it bans someone (from
/ban, the dashboard, or an auto moderation action), as long as Direct-message members when they are punished is on in the Moderation settings. It keeps working after the member is gone from the server. A ban made with Discord's own ban button doesn't send that message, so it has no Appeal button. - They answer What happened, in your words?, Why should the ban be lifted? and, if they like, Anything else staff should know?. TrinketBot checks first that they really are banned from that server, and tells them if not.
- The appeal appears in your appeals channel with why they were banned and what they wrote, optionally pinging a role. Anyone who can ban members can press Accept and unban or Deny, and may write a message that is sent to the person. Accepting lifts the ban (and is recorded as an unban in the Moderation cases); if the ban can't be lifted — TrinketBot lacks the Ban Members permission — the appeal stays open and says why.
- The person is told the decision by message. After a denial they can appeal again once the wait you set has passed (7 days by default); only one appeal at a time, and one waiting longer than two weeks no longer blocks a new one.
- Send a test sends you one direct message: the ban notice a banned member gets when appeals are on, marked as a test, with its Appeal button switched off. Nobody is banned, no appeal is made and nothing is posted in the appeals channel, though the page still checks that the channel can be posted in. It needs appeals switched on, and your own DMs open to server members.
What a person writes is only ever in the staff message — TrinketBot keeps just that someone appealed, when, and how it came out (for the wait, and the list on the dashboard), and forgets it six months after it was decided. The settings are included in backups; the appeals themselves are not.
18. Auto Moderation
Open Auto Moderation in the sidebar for a menu of five separate features: this section (Discord's own built-in system), Message Filters (TrinketBot's own advanced filters), Join Guard, Scam Shield and the honeypot channel — each opens its own page from there.
Different from Moderation above: this page doesn't add any TrinketBot behavior — it's a dashboard for Discord's own, native Auto Moderation system. Discord itself detects and acts in real time, entirely on its own servers, even if TrinketBot is offline. Nothing on this page is stored in TrinketBot's database; every change applies directly to your server the moment you save, the same as editing it in Discord's own Server Settings → Auto Moderation. It needs TrinketBot to have the Manage Server permission in this server — a server that added TrinketBot before this feature existed may need to grant it first (Server Settings → Roles → TrinketBot).
Five categories, matching Discord's own rule types and their limits:
- Spam detection — Discord's built-in spam detector. One rule per server, no configuration beyond what happens when it fires.
- Keyword filters — your own list of blocked words or phrases, with wildcards (
word*,*word*) and optional regex. Up to 6 separate rules, each with its own keyword list, allow list, and actions — e.g. an instant block for slurs and a milder alert-only rule for other words. - Pre-built word filters — Discord-maintained word lists (Profanity, Sexual content, Slurs) with no list to manage yourself; pick which categories to block, plus your own allow list of exceptions. One rule per server.
- Mention spam & raid protection — blocks a message that @-mentions more than a set number of people, and can separately turn on Discord's own automatic mention-raid detection. One rule per server.
- Member profile filter — the same keyword/regex/allow-list approach as Keyword filters, but checked against a member's nickname and other profile fields when they change them, not their messages. One rule per server.
Every rule shares the same actions — block the message, send an alert to a channel, time out the member (all three, mixed and matched) — except the Member profile filter, which offers block the member from interacting instead of a message-block or timeout, since there's no message to block. Every rule also has its own exempt roles (up to 20) and exempt channels (up to 50) that it never applies to.
19. Message Filters
TrinketBot's own advanced filtering, distinct from both Moderation (manual actions) and Auto Moderation (Discord's native system) above. The key thing neither of those can do: escalating tiers. A single category — say, message spam — can warn on a first, mild breach and automatically time out or ban on a worse one, all from one rule. Every action reuses your existing Moderation settings exactly as a manual action would: DM-on-punishment, immune roles, and case history all apply the same way, and disabling the Moderation module disables every punitive action here too (deleting a message and sending an alert still work either way — only warn/timeout/kick/ban are gated).
Twelve categories, each its own card:
- Spam — too many messages in a short time.
- Channel spam — messages spread across too many different channels in a short time.
- Mentions — too many @-mentions in a short time.
- Attachments — too many attachments in a short time.
- Emojis — too many emoji in a short time (custom and standard both count).
- Message lines — very large, many-line messages sent too fast.
- Capitalization — a message that's mostly capital letters, once it's past a minimum length (so a short "OK" is never flagged).
- Words — a message containing any word or phrase from a list you write.
- Links — a message containing a link, either always, or only from/except a domain list you choose.
- Invites — a message containing a Discord invite link.
- Patterns (regex) — a message that matches a pattern you write, for what a word list can't say:
free\s+(nitro|robux),\b(buy|sell)\s+followers\b. Up to 10 patterns, each up to 200 characters; case doesn't matter, a pattern can match anywhere in the message, and a message matching any one counts. Put a Warn action on a tier and every match is a strike that counts toward the Warns filter below. Try it shows which patterns catch a sample message, and what is wrong with one that doesn't work, before you save. The usual pieces are supported —. [abc] [^a-z] \d \w \s \b ^ $ ( ) (?: ) | * + ? {n,m}— but not look-ahead, look-behind or back-references. Patterns are run by TrinketBot's own matcher, which can't be slowed down however a pattern is written, so a careless one can't freeze the bot. Only the first 2,000 characters of a message are checked. - Brand-new websites — a message linking to a website whose domain was registered less than a number of days ago (7 by default, 1 to 90), which is how most scam and phishing links give themselves away. TrinketBot asks the public RDAP registry (through rdap.org) for the domain's registration date — the domain name only, never the message or who sent it — and remembers the answer. A website it can't look up (the registry doesn't answer, doesn't know the domain, or is slow) is never counted as new, so a hiccup can't delete an honest link. Well-known sites (Discord, YouTube, Twitch and the like) are never looked up, and you can list your own new sites to leave alone (their subdomains too). It looks at up to three websites per message, and also at a link added by editing.
- Polls — a message that includes a native Discord poll.
- Warns — different from the rest: not checked on a message at all, but the moment a member's active-warning count (from Moderation) reaches a tier, whoever issued the warning — a moderator, the dashboard, a filter or a word command. By default warnings do not expire, so the count includes every active one; set Warnings stop counting after this many days and a warning older than that is left out of the count (it stays in the member's record, nothing is deleted). Its own tiers can only Timeout/Kick/Ban/Alert, never Warn — a warn-triggered warn would escalate itself forever, so that combination isn't offered.
Click a category to expand it. Each condition (Sapphire calls these "conditions", so do we) is one tier: a threshold (and, for the rate-based categories, a time window in seconds), plus which actions fire once it's reached. Add up to 10 tiers per category, low threshold to high, and TrinketBot always applies the highest tier a message/member actually reaches — never every tier at once. Exempt roles and exempt channels work the same as everywhere else in the dashboard: anyone/anywhere listed is skipped entirely for that category. Moderators are skipped too without being listed: administrators and members who can manage the server, manage messages or time members out are never checked by a filter, so one can't warn, time out, kick or ban the people who run the server. The immune roles of the Moderation page are skipped by every filter too. Tick Also apply to moderators on a filter to check them like everyone else.
Special channels, at the bottom of the page, is unrelated to the categories above — it restricts one channel to only the content types you check (images, videos, links, text), removing anything else automatically. No conditions or actions to configure; it's a hard restriction, not an escalating one. Good for an announcements or showcase channel that should only ever contain, say, images.
20. Join Guard
Screens a member once, at the moment they join — before they've sent a single message, which is what makes it useful against a raid (a burst of accounts joining at once) in a way nothing message-based can be. Every check uses only what Discord already includes with the join event itself (account creation date, avatar), so it stays fast even during a sudden flood of joins.
- Minimum account age — flags accounts younger than a number of hours you choose (24 = 1 day, 720 = 30 days). Off by default.
- Flag accounts with no custom avatar — still on Discord's own default avatar, a common (though not definitive — plenty of real people never bother) throwaway-account signal.
- When a member is flagged — choose what happens: alert only, kick, time out, or ban. An alert channel is optional and independent of this choice — when set, it always posts there, whichever action (if any) is also taken.
Kick, ban and timeout are carried out through the Moderation module, so they need it switched on and TrinketBot to hold the matching permission (Kick Members, Ban Members or Timeout Members) with its role above the member's. If one of those is missing, the Auto Moderation page says so at the top, and so does the Overview — the member stays in the server meanwhile — and an alert channel TrinketBot can no longer post in is reported the same way.
Join Guard looks at one member at a time. To react to a flood of joins — slowing down or locking channels and pausing invites — see Raid lockdown.
Honeypot channel
A channel no real member posts in. Spam bots and hijacked accounts post in every channel they can reach, so whoever posts in a honeypot is dealt with straight away, before they get to the rest of the server. Open Auto Moderation → Honeypot channel, choose up to five channels and what happens to the person: time them out (the default, for a length you choose, and it can be lifted), softban them (a ban that deletes the last hour of their messages, lifted at once, so they are out and can come back) or only tell staff, which is a dry run that changes nothing. Their message in the honeypot is deleted too, unless it is a dry run. Name the channel something like do-not-post and say so at the top of it: a real member who posts anyway is punished like anyone else.
TrinketBot only notes who posted and where; it never reads what was written. Moderators (Administrator, Manage Server, Manage Messages or Timeout Members), the server owner, bots and anyone with an immune role are never touched. Timeouts and softbans are done by the Moderation module, so it has to be on, and they appear in the member's record with the reason “Honeypot”. Staff are told in the alert channel you choose with at most one message a minute: a raid is one summary with a line per member. It is off until you turn it on, and it is not part of a backup.
21. Scam Shield
Scam protection that is on for every server from the start and needs no tuning. Where the other auto-moderation tools wait for you to set up rules, Scam Shield already knows what Discord scams look like — and because that knowledge lives in TrinketBot rather than in your settings, a new scam pattern reaches every server the day TrinketBot is updated.
What it looks for
Each of these is a weak sign alone; Scam Shield adds them up, so an ordinary message is never judged by one coincidence.
- The lure — free Nitro and Steam gifts, crypto airdrops and “connect your wallet”, “I reported you by accident” fake support, QR-code “verification”, “your account will be banned”. Read after undoing tricks like
fr33 n1tro, look-alike letters from other alphabets and invisible characters. - The website — a lookalike of Discord or Steam (
dlscord.com), a domain that uses their name (discord-gift.xyz), look-alike characters, link shorteners, free page hosts, and (through the same registry lookup as the brand-new-website filter) a domain registered days ago. - The paste-a-command trick — “press Win+R, paste, Enter”, hidden PowerShell and
curl … | sh. Removed on its own. - Files — programs (
.exe,.scr,.bat,.lnk…) and password-protected archives from members who just joined. A long-standing member sharing a.jarin a modding server is left alone. - Spread — the same message in three or more channels within five minutes, and @everyone with a link.
- Standing — a member who joined today, or whose account is days old, makes everything above count for more. It never makes a message suspicious by itself.
What it does
- Low score — an alert in your alert channel, nothing removed.
- Likely a scam — the message is deleted.
- Almost certainly a scam — the message is deleted, everything else that member posted in the last 15 minutes is deleted too, and they are timed out for 24 hours. A long-standing member who suddenly posts like this is most probably a hijacked account, so they are timed out rather than banned. Only an account that is both brand new and scores very high is banned.
It works without the Moderation module: when that module is on, timeouts and bans open cases and notify the member as usual; when it is off, Scam Shield acts directly and no case is made — but it never bans without a record to review: with no alert channel it can post in (and Moderation off), it times the member out instead and says so, and when it removes something with no alert channel a brief note in the channel says that a message was removed (naming nobody; it deletes itself). Pick an alert channel and every action — and the ban — is recorded there. It needs the bot's role to be above the member's and the Moderate Members and Ban Members permissions.
New members
For the first ten minutes (1–1440, your choice) a new member can chat, share pictures, videos and sound, and use well-known sites, but can't post other links, server invites, other files, @everyone/@here or more than four pings. The message is removed and they're told why in a note that deletes itself. Turn it off if your server's newcomers legitimately need to post links straight away.
The first two days
A server's first 48 hours with Scam Shield are alert-only: it posts what it would have removed, and removes nothing. That lets you see it is right before it acts. Pick an alert channel to see them, press Start removing scams now whenever you're satisfied, or wait — it starts by itself.
When it gets one wrong
- Every alert for a message with a suspicious website has a Mark … as safe button (needs Manage Messages). The site and its subdomains are never counted in your server again; the list is on the Scam Shield page.
- Trusted roles are never checked. So is everyone who can manage messages, manage the server or moderate members, and everyone with one of the immune roles of the Moderation page.
The second layer
When Scam Shield is active TrinketBot also keeps one Discord-native Auto Moderation rule, TrinketBot Scam Shield, in your server. Discord blocks the message before it appears at all, and keeps doing so if TrinketBot is offline. It holds only patterns that are a scam on their own, and is rewritten automatically when they change. It needs the Manage Server permission and a free keyword-rule slot (Discord allows six); without them, Scam Shield still works through the bot.
What it can't see: direct messages. Most fake-support and fake-job scams happen there, where no bot is present. Turning off “Allow direct messages from server members” in Discord's privacy settings and reminding members that Discord staff never message first helps most.
22. Raid lockdown
Where Join Guard judges each new member, this reacts to the rate of joins: when a flood of accounts arrives at once, it slows down or locks your channels and pauses invites for a while, then puts everything back by itself. It is the panic button for the moment you can't moderate one member at a time. The automatic trigger is off until you turn it on; the manual button works whenever you need it.
The trigger
- Members / within / lasts — for example 10 members within 30 seconds starts a lockdown that lifts itself after 15 minutes. Bots don't count, and a join counts even if Join Guard removes the member. Set the number comfortably above your biggest normal rush (an event or a streamer raid can bring a lot of real people at once).
- Panic button starts one right now with the same settings — from the dashboard, or in Discord with
/lockdown start(optionally with a number of minutes)./lockdown endlifts it early and/lockdown statusshows what is running. These need the Manage Server permission, and work whether or not the automatic trigger is on.
What it does
- Raise slowmode — a channel that already has a longer slowmode keeps its own.
- Lock channels — stops
@everyonefrom sending messages, starting threads, posting in threads and reacting. If your chat channels are only visible to a role (a verified or member role — as with Verification), add that role under Also lock these roles, or locking@everyonewon't reach the people who can talk there. - Pause invites and Pause direct messages — Discord's own pauses, which expire by themselves so they can't be left on by mistake. A longer pause you set yourself is never shortened or cancelled.
Which channels
By default every text channel members can currently talk in — and, when Lock channels is on, every forum and the text chat of every voice or stage channel too (slowmode is only for text channels). Pick specific text channels to limit it, and list the ones to never touch — a rules or verification channel members must still reach. The alert channel is always left alone. At most 100 channels are changed in one lockdown (Discord rate-limits channel edits); the alert tells you if more qualified. TrinketBot's own posts into a locked channel — a Twitch or YouTube alert — stop too, so exempt the channels it announces in.
Whole categories: pick a category to lock it and every channel inside it, instead of listing the channels one by one. With a category picked and no channel, only the categories are locked (an empty list still means every channel only while no category is picked either). With Lock channels on, the category itself is locked too, so a channel made in it during a raid does not open unlocked; slowmode does nothing to a category. Discord does not pass a category's permissions on to its channels by itself, so each channel inside is locked on its own, whether it follows the category or has permissions of its own, and each one counts towards the 100 like any other (the category as one). A channel inside it that is on the never-touch list, is the alert channel, cannot be seen by TrinketBot or is a kind of channel that cannot be locked is left alone, and the page lists those and says why.
Alerts and putting things back
- The alert channel gets a message when a lockdown starts (what tripped it, what was changed, when it lifts, any problem) and when it lifts. Role to ping is pinged on the start, so someone is looking at it.
- Everything is recorded before it is changed, so it can always be undone — even if TrinketBot restarts in the middle, the lockdown still lifts at its time. Only what is still as the lockdown left it is put back: a slowmode you made stricter, or a permission you re-allowed by hand during the lockdown, stays the way you set it.
- Staff are not locked out when they have Administrator or a permission set on the channel for their own role. TrinketBot needs Manage Channels and Manage Roles to change channels and Manage Server to pause invites and DMs; the page warns you if it lacks one. A lockdown does not remove anyone by itself — pair it with Join Guard, and use the cleanup below.
Cleaning up after a raid
- Switch on Remember who joins during a lockdown (off until you do). While a lockdown runs, TrinketBot keeps the ID and join time of each member who joins, and of the members whose joins started an automatic lockdown, for up to 500 members and until 24 hours after the lockdown ends; bots are not kept. Switching the setting off forgets them at once.
- The “Raid lockdown started” message in the alert channel then carries three buttons, Time out the joiners, Kick the joiners and Ban the joiners;
/lockdown sweepdoes the same from Discord. You need Manage Server and the permission of the action (Timeout Members, Kick Members or Ban Members). The first press only shows how many members it would deal with and who is left alone; nothing happens until you press Confirm on that private message. A timeout lasts 24 hours. A ban removes the last hour of the person's messages, and reaches a remembered member who has already left, which a kick or a timeout cannot. - Each member is dealt with one at a time, by the Moderation module in your name: a case with the reason “Raid cleanup: joined during the lockdown”, your role order checked as well as TrinketBot's, the Moderation switch and immune roles honoured, and counted by the Admin guard like any kick or ban you run. Staff, the owner, boosters, bots, anyone already timed out (for a timeout) and anyone TrinketBot cannot reach are skipped, and the report says how many were done and how many skipped, and why.
- Ban these ids is a box on the Raid lockdown page, for the accounts of a raid that were kicked and came back, or ones taken from a log. Paste Discord user ids (one on each line, or separated by spaces or commas; a mention such as
<@123…>works too), at most 100 different ones; a list with anything in it that is not an id is refused whole. Press the button and confirm the number: each person is banned whether they are still in the server or not, the last hour of their messages is removed, and a ban that is there already is left as it is. Each ban is a case in Moderation in your name, so the Moderation module must be on, and you need the Ban Members permission and a role above theirs. The result says how many were banned, how many were banned already and how many could not be, and why. It works with or without a lockdown running, and what you paste is not stored.
Disable DMs & invites
Disable DMs & invites (in the sidebar, under Safety) switches off direct messages between your members — the way scammers reach people they found in a server — and keeps them off. It is the same Pause DMs Discord has under Server Settings → Safety Setup → Raid Protection, which Discord lets run for 24 hours at the most; TrinketBot sets it again every day, whenever less than twelve hours are left, for as long as it is on. Press Switch DMs off, and Allow DMs again to undo it. The page has a second switch for Discord's Pause invites, kept on the same way, which stops anyone new from joining with an invite link (it asks you to confirm first, since it closes the door on everyone new). In Discord the same two are /disable-dms enabled:true and /disable-invites enabled:true (and false to undo them) for anyone with Manage Server.
- Discord decides who can still be reached while DMs are paused: friends can still message each other, moderators can still message members, and bots and apps keep working.
- If someone ends a pause in Discord while it is on here, TrinketBot switches it on again within five minutes — turn it off on this page (or with the command) to allow DMs or invites.
- It works with raid lockdown, which can also pause DMs for a while: the longer pause wins, and turning one off only ends the pause TrinketBot itself set, never one that runs longer and belongs to someone else.
- It needs one permission: Manage Server. Without it the page says so and shows where to grant it — Server Settings → Roles → TrinketBot → Manage Server → Save Changes — and refuses to turn it on until it is there, so a switch can never say “on” while doing nothing. If the permission is taken away later, the page and the Overview say so, and DMs are let through again when the last pause runs out.
- It isn't part of a server backup: it changes Discord settings for the whole server, so a restore never switches either pause on by itself.
23. Admin guard
A hijacked or rogue admin account can delete a server in minutes, or set up the way back in. The admin guard notices when one person deletes channels or roles, bans or removes members, or adds bots, Administrator roles and webhooks, faster than any real clean-up or set-up would — and tells you, so it can be stopped after a handful of actions instead of hundreds.
How it works
- TrinketBot reads Discord's audit log as it is written and counts, per person, what they did in the last minute: channels deleted, roles deleted, members banned and members removed (kicks, and every member a prune takes), and the three tools a hijacked account uses to keep its hold: bots added, roles given the Administrator permission (made with it, or edited to have it; handing an existing Administrator role to a member is not counted) and webhooks created. When one count reaches its limit, an alert goes to the channel you chose.
- The defaults are 3 channels, 3 roles, 5 bans and 5 removals a minute; bots, Administrator roles and webhooks start at 0, which is off, so a server is not told about something it never asked to be watched for. Set a limit to 0 to leave that kind alone. Each person is alerted about at most once every two minutes — if they carry on, the next alert follows.
- Never counted: the server's owner, what TrinketBot does on its own (a message filter or Scam Shield, say), and anyone with one of the trusted roles you choose — your moderators, or a role that does clean-ups. A ban or kick a moderator runs through TrinketBot's commands or the dashboard is counted for them, together with what they do in Discord itself, and the alert says how many went through TrinketBot.
- The alert names the person (the name is shown as plain text), lists everything they did in the minute, says what TrinketBot did about it, and can ping a role. Send a test alert shows it without pinging anyone.
What it can do about it
- Only tell us (the default) sends the alert and does nothing else.
- Tell us and take away their dangerous roles also removes the person's roles that carry Administrator, Manage Server, Manage Roles, Manage Channels, Ban Members, Kick Members or Manage Webhooks. It only touches roles below TrinketBot's own role, never an integration's role, never the owner. The alert lists what was taken and what couldn't be, so you can give roles back. TrinketBot does not undo it by itself.
- It needs View Audit Log to see anything, and Manage Roles to take roles away; the page says when one is missing.
Nothing about who did what is stored — the counts live in memory for a minute — and the settings are included in backups. This is a safety net, not a replacement for giving the Administrator permission only to people you trust.
24. Staff digest
A daily or weekly summary for your staff — new members, moderation actions, the busiest channels — posted in a staff channel and/or sent by DM, so nobody has to watch the raw activity log to know how the server is doing. It is a bigger-server feature: a small server can just read its channels. Off until you turn it on.
Setting it up
- When — every day, or every week on a day you choose, at a time on the quarter hour in your timezone (so 9:00 stays 9:00 when the clocks change). A weekly digest covers the previous seven days; a daily one the previous day.
- Where it goes — a channel (with an optional role ping), up to ten people by DM, or both. A DM only goes to someone who is still in the server and whose DMs from server members are open; each recipient has to be in the server when you add them. Pick a staff channel: the digest names your busiest channels, private ones included.
- What's in it — Members (joined, left, net, total now), Activity (total messages and the five busiest channels), Moderation (actions by type and who did the most) and Top inviters (when Invite tracking is on). Turn off what you don't want, and list any channels it should never count.
- Two more sections, off until you switch them on — Waiting for staff counts what is waiting right now in the modules you have on (ban appeals, applications, form responses, confessions to review, reports, open tickets and open modmail conversations), each with how long the oldest has waited and a link to its page; it only counts, and never shows what anyone wrote. Handled by the bot counts the members that Scam Shield, Join Guard and the message filters warned, timed out, kicked or banned on their own in the period. It is counted from the cases they open, so it needs Moderation on, and the messages they delete are not counted.
- Show a preview draws what it would say right now from the saved settings, and Send it now delivers that to the channel and the DM recipients. Neither changes the schedule.
What it does and doesn't know
- Counting starts when you switch it on. TrinketBot hasn't been keeping these numbers, so the first digest only covers the time since then — and says so at the top instead of passing a partial count off as a full one.
- Activity is kept as numbers only: how many people joined and left, and how many messages were sent in each channel, per 15 minutes, for about two weeks. Never what was said and never who said it. Bots aren't counted, and a thread counts for its channel.
- Moderation is what was done through TrinketBot's moderation module (its commands and dashboard). Something a moderator does straight in Discord, or through another bot, isn't in it — that is what the activity log is for.
- If TrinketBot was offline when a digest was due, one less than 12 hours late still goes out; a later one is skipped (the page says so) rather than arriving out of time. After a long outage you get one digest when it's back, not one per missed period.
- Settings are included in server backups, but the people it is DM'd to and the counted activity are not — a restore never starts messaging specific accounts by itself.
When something breaks
A second card on the same page, When something breaks, is separate from the digest and works whether the digest is on or not; it posts in the log channel from Activity logging and only borrows the digest's channel when there is no log channel. TrinketBot keeps a list of what has quietly stopped working in your server — the yellow notices and amber dots described in Getting started, such as a deleted channel, a missing permission, or a module that is switched on but can no longer see or post in the channel it was given. Every few minutes it checks the channels of the modules you have switched on, so a channel made private later shows up on the module's page before a member notices. Tell us when something breaks also tells you about each one, in a short message that names the module, says what is wrong and links to the page that fixes it. It is on unless you switch it off.
- Where it tells you — In the log channel (the channel chosen on the Activity logging page; the one chosen under Where it goes for the digest stands in when there is no log channel or TrinketBot cannot post in it) and/or The server owner, by direct message, which is off until you switch it on. Choose at least one. A direct message only arrives if the owner allows direct messages from server members. The card shows how the last message went, and why one did not go out.
- Once, and again after a day. Each problem is announced once; if it is still there 24 hours later, it is announced again. A problem that is fixed and then comes back counts as new. No more than five problems are announced for a server in one go (TrinketBot looks every five minutes), so a server with a dozen at once hears about them over a few rounds. Nobody is pinged.
- Only what is switched on. A problem on a module that you have switched off is not announced, although its notice may still be on the dashboard, and neither is a problem on a module that is not open to everyone yet.
- In a backup, the on switch and the choice to post in a channel travel with the Staff digest's settings. Whether the server owner is messaged never does, so restoring a file cannot start messaging a person. What was announced, and how the last message went, are not in a backup either; the Privacy Policy says what is stored.
25. Activity logging
Streams server activity into a log channel as it happens, showing what changed (before and after) and, where Discord says so, who did it and their reason. Log entries themselves aren't stored by TrinketBot — they're delivered straight to the channel you choose. (The one thing kept temporarily is described under "Message copies" below.)
- Choose a log channel — required before anything can log.
- Turn on exactly the categories you want, grouped on the page by what they cover: Messages (edits, deletes, bulk deletes, pins), Channels (create/delete, and changes to name, topic, category, slowmode, age restriction and permission overrides), Threads (created, changed, deleted, and members added/removed), Roles (create/delete, and name, color, permission and display changes), Bans (ban/unban with the reason), Members (joins, leaves, kicks, role changes, timeouts, boosts), Moderation cases (a card for every case TrinketBot records — warnings, timeouts, kicks, bans, unbans and channel actions — with its number, the member, the reason and who did it; a private note is never posted, and the moderator is hidden if your Moderation settings hide it; off for a server that was already logging when this arrived, on for one that sets logging up now), Profile changes (nickname, server avatar, display name, avatar, username), Voice (join/leave/switch, server mutes and deafens, streaming), Emojis & stickers (added, renamed, removed), Invites (created/deleted), Server settings (name, icon, verification level and similar), Scheduled events (created, changed, cancelled), Stage instances (a Stage going live, its topic changing, or ending), Discord AutoMod (changes to Discord's own built-in AutoMod rules, and when one takes action — separate from TrinketBot's own Auto-Moderation module), and Webhooks & Integrations (a channel's webhooks or a third-party integration like Twitch changing).
- Channel order and Role order are off until you switch them on. Discord reports dragging channels or roles into a new order as one entry (a quick series of drags by one person is a single entry), with who did it and the reason they gave, but not which channels or roles moved.
- Send some logs to another channel (a section on the page, closed until you open it) has a picker for each category, and its first choice, Use the main log channel, is what every server starts with. A category with a channel of its own is posted only there. If TrinketBot can't see that channel or post in it, those entries are not logged (they are not moved to the main log channel instead), and the Overview and Server health say which category.
- Send test message confirms the main log channel is reachable; Server health on the Overview looks at the channels you chose for categories too.
- Ignored users, roles & channels — anything added here is excluded from every logging category, e.g. to keep a noisy bot's own actions or a private channel out of the log.
Message copies (why deletes can show what was said)
Discord never tells a bot what a deleted message said. So that edit and delete entries can show it, a server with logging and the Messages category on has TrinketBot keep a temporary copy of each new message (its text, attachment links, stickers and embed contents, plus the author). Copies are deleted right after the deletion is logged, removed after at most 7 days (sooner in a very busy server: a server keeps at most 100,000, oldest dropped first), wiped as soon as you turn logging or Messages off, and never stored for an ignored member, a member with an ignored role or an ignored channel, nor for anything said in a modmail conversation or a ticket. See the Privacy Policy. A message posted before this existed, or before the bot could see it, can still show "content unavailable".
Give TrinketBot the View Audit Log permission so entries can say who kicked, banned, timed out or changed something. Without it everything is still logged, just without the "Performed by", except Channel order and Role order: Discord sends those entries only to a bot that has the permission.
26. Ticket system
A support-ticket panel members click to open a private channel with your staff.
First-time setup
Choose all four required pieces up front: the category new ticket channels are created under, the support role that can see and manage tickets, a transcript/log channel, and the channel the panel itself is posted in.
After setup
- The Activity card shows open/closed ticket counts and whether the panel has been posted — click Post panel (or Repost panel after changing its title/description) to publish it.
- Change the category, support role, transcript channel, or panel channel any time.
- Customize the panel's title, description and embed color, and its Create Ticket button (label, emoji — unicode or a custom emoji — and color), plus the ticket channel's name format (supports
{username}and{number}). The Preview card switches between the panel, the ticket-opened message, and the closed and reopened messages. - The messages inside a ticket — the welcome message when it opens, the Ticket closed message and the Ticket reopened message — can each be replaced with a full message template. The buttons a ticket needs (Close Ticket / Add User, and Reopen / Transcript / Delete) are always added underneath. Variables:
{mention},{actor.mention}(who closed or reopened it),{ticket.number},{ticket.username},{ticket.channel}and{support.mention}. - Closed-ticket channel prefix (default
closed-): closing renames the channel toclosed-plus its normal name, and reopening restores it. Leave it empty to keep the name. Discord allows only two renames per channel every 10 minutes, so it can lag if a ticket is closed and reopened rapidly. - Set the max open tickets a single user can have at once (1–10), and whether ticket creators are allowed to close their own tickets or only staff can.
- Save a transcript when a ticket is closed: posts the whole conversation to the transcript channel as a file the moment a ticket is closed, and before a ticket that was never closed is deleted. It is on when a server first sets tickets up; a server that set them up earlier keeps it off until you turn it on here (or with
/ticket config auto-transcript:). The Transcript button on a closed ticket makes one on demand either way. If a transcript can't be saved — no transcript channel, or Discord refuses the file — the ticket still closes, and the entry in the transcript channel says so. - Ask why a ticket is closed (off until you turn it on): the Close Ticket button and
/ticket closeopen a small form with one optional box before the ticket closes. What is written appears in the closing message (after a closing message you replaced with your own template, in a message of its own), at the top of the transcript made when it closes, and in the entry in the transcript channel. It is not saved anywhere else, so a transcript made later with the Transcript button has no reason in it. - Send the transcript to the person who opened the ticket (off until you turn it on): when a ticket is closed, TrinketBot also messages them the conversation as a file, privately. It works without a transcript channel. If their direct messages are closed the ticket still closes, and the entry in the transcript channel says their DMs are closed. The Transcript button, and deleting a ticket, do not send it.
- Staff can claim a ticket (off until you turn it on): a new ticket's first message gets a Claim button next to Close Ticket. Support staff of that ticket (its type's staff role, or anyone with Manage Server) press it to say they are on it, and the button turns into Release, showing their name. Only they, or an administrator, can release it. If two press at the same moment, one claims and the other is told who did. Claiming changes nothing else: the channel, who can see it and who can close it stay as they are. Tickets that were already open get the button when their message is next changed, for instance after they are closed and reopened. A claimed ticket keeps its claimer through a close and a reopen.
- Ask the person who opened a ticket to rate the help (off until you turn it on): when a ticket is closed, TrinketBot messages them privately, after the transcript if you send one, and asks for a number from 1 to 5 (or "No thanks"). Each ticket is asked once, however often it is closed and reopened. If their direct messages are closed they are not asked, and the entry in the transcript channel says so. Only the number is counted, per ticket type, and nobody is saved next to it. The Ratings card on this page shows how many ratings each type has, the average and how many of each number; it stays after you turn the question off. The counts are not part of a backup.
- Close tickets nobody has written in (off until you turn it on): pick how long an open ticket may go without a new message (12 hours to 30 days). TrinketBot then says "Closing for inactivity" in the ticket and closes it exactly as the Close button does, with the reason "No messages for N hours"; staff can reopen it. The time is counted from the last message in the channel (TrinketBot's own messages count, so a reopened ticket starts again) or from when the ticket was opened if nobody has written. It checks every 5 minutes and closes at most 10 tickets each time, so a server that turns it on with many old tickets sees them close over a while, not all at once.
- Ticket types: offer several kinds of ticket (Billing, Report, Appeal…) from one panel. In the Ticket types card add the types your plan allows (the card says how many); the panel then shows one button for each instead of the single Create Ticket button, and with more than five types it is one menu to choose from (post the panel again, or it is edited in place when you save). Each type can have its own category, staff roles (up to five) and welcome message (plain text, or a message template); whatever you leave empty is the server's own. A type's staff roles replace the support role for its tickets: each of them gets access to the channel, is pinged when the ticket opens, and can close, reopen, delete, save a transcript and add or remove people (members with Manage Server always can). A type can also ask up to 15 questions before the ticket opens, five to a pop-up (the member answers one and presses Next for the following): short or long answers, a dropdown, buttons to pick one, checkboxes and file uploads, the same questions as in Forms and staff applications. The answers are written into the ticket under the welcome message (a file is attached there too) and are not saved anywhere else. A type can also show FAQ answers first (off until you choose it): members who press the type are shown the matching questions of the server's FAQ privately, with That answered it and Still need help, and only the second goes on to the ticket. If the FAQ is off or has nothing for the type, members go straight to the ticket. A server with no types behaves exactly as before, and panels already posted keep working.
- Send a test posts a sample of the panel in the panel channel, marked as a test. Its button is switched off, so no ticket is opened, and the live panel is left where it is. It needs tickets set up and switched on.
When a ticket opens, the support role is pinged above the welcome message so the team knows. A welcome message you replaced with your own template pings whoever that template mentions — put {support.mention} in it to ping the role.
Inside a ticket channel, support staff (anyone with Manage Server or the support role) can use /ticket close, /ticket reopen, /ticket delete, /ticket add (add another user to the ticket), and /ticket remove, or the matching buttons. The ticket's creator can only close it, and only if you allow that; adding or removing people is staff-only.
27. Birthday announcements
Posts an announcement in a channel on each member's birthday. When more than one member shares a birthday in the same server, they're wished together in one combined message instead of one message per person — {user} and {mention} become a list ("Alice, Bob and Carol") rather than a single name.
Server setup (dashboard)
- Choose an announcement channel, then either apply a quick style preset (Classic, Confetti, Minimal) or write your own message content and embed title/description/color — supporting
{user},{mention},{day}, and{month}. - Add up to 25 celebration gifs, shown alongside the announcement. The link must point straight at the image/video file, not a page you'd view in a browser — on GIPHY, right-click the gif → Copy Image Address, or use Share → GIF Link, not the giphy.com page URL.
- Send test message previews the current setup. From Discord,
/birthday-config test(Manage Server) does the same.
A birthday card
Draw a picture on each announcement, with the person's avatar, name and the day of their birthday, from a dynamic image you design. Choose it on the Birthday page, or copy one of the three ready-made cards (Party, Balloons, Minimal) with one click and change it in the designer, where Preview as shows a design as a birthday card. When several people share the day the card is drawn for the first and names them all. It needs the Attach Files permission in the announcement channel; without it, or if the picture cannot be drawn, the announcement goes out without the card, as it always did. A card never says how old anyone is: TrinketBot never keeps the year a person was born.
Wishes
Switch Wishes on and each announcement gets a Send wishes button. A member writes one wish of up to 200 characters, and it appears under the announcement, in a thread or in one message that is edited as wishes come, as you choose. Everyone but the birthday person can send one wish each, for a day. A wish is shown with the sender's name in a code span, so it can never be a link or a ping, and a wish that holds a word of your server's blocked-word list (Auto-moderation, Words) is refused. The wishes TrinketBot keeps are deleted two days after the announcement, and the button is taken off then. A thread needs the Create Public Threads and Send Messages in Threads permissions in the announcement channel; one message needs Send Messages and Embed Links. Send test message makes a wall nobody is the birthday person of, so you can wish yourself and see it.
A birthday role
Choose a role and the person holds it for the day of their birthday: it is given when their birthday begins in their own timezone, and taken back 24 hours later, even if the Birthday page is changed in between. TrinketBot needs the Manage Roles permission and its own role above the birthday role; a role it cannot give is said on the page and on the Overview before any birthday needs it. A day with many birthdays is spread over a few minutes.
Anniversaries
Celebrate how long members have been in the server, and the server's own birthday, in a channel you choose. Member milestones are announced for every year a member has been here (from 1 to 50) and, if you switch it on, at 6 months, with a message of your own that can use {user}, {mention}, {years}, {duration} (1 year, 6 months), {months} and {guild.name}. Up to five milestones can give a role, once, when the member reaches it. Members who share a milestone are named in one message, and the days are counted in UTC. A member can hide their milestones with the button under /birthday show; bots are never announced. The server's anniversary is announced once a year, on a date you set or, if you leave it empty, the day TrinketBot joined. Both are off until you switch them on, and Send a test posts your text for you without using up a real milestone.
Setting your own birthday (Discord)
This dashboard page configures the announcement — each member sets their own birthday from Discord, not the dashboard, with one command and four subcommands:
/birthday set— replies with a button that opens a form for your day, month, and IANA timezone (pre-filled if you've already set one). The timezone determines which day the announcement fires on for you./birthday show— shows your currently saved birthday, and has a button that hides, or shows again, how long you have been in a server for the servers that announce it./birthday remove— clears it./birthday timezone— helps you find your IANA timezone name for the timezone box of that form.
/me reaches the same birthday from a panel of your own things (see Timezones & reminders).
The older birthday commands
These four commands were folded into the ones above: /set birthday is now /birthday set, /remove birthday is /birthday remove,/map is /birthday timezone and /test birthday is /birthday-config test. The old /birthday, which showed your birthday, is /birthday show. The old ones still work until December 15, 2026: each does what it always did and adds a line saying which command replaces it and when it stops. After that day they are removed from Discord's command list, and one that is still reached says that it has moved.
On the Commands page a command is switched on or off by its name. Turning /birthday off turns off all four of its subcommands, and turning off /birthday-config turns off the staff commands; a server that had switched off /set, /remove, /map or /test has not switched off /birthday by that, so switch the new one off there too if you want it off. A server that had switched off the old /birthday keeps that switch, and it now covers all four.
28. Timezones & reminders
Personal tools that belong to the member, not the server: tell TrinketBot your timezone, and ask it to DM you a reminder. They work in any server the bot is in, in DMs with the bot, and — if the bot owner has switched on user installs — anywhere you have added the bot to your own account. A server can still turn any of them off on the Commands page.
/timezone set— start typing a city (Helsinki,New York) and pick it from the list./timezone showtells you what your clock reads;/timezone show user:@someoneshows the time on their clock — only the time, never the name of their zone — and only if they chose to set one./timezone clearforgets it. It is stored once per person, not per server./remindme message:… in:2hsends you a DM after a while (30m,2h,3d,2w,1h30m)./remindme message:… at:18:30uses your timezone: a bare time is the next time it is that o'clock (6:30pmworks as well as18:30),tomorrow 09:00pins the day to the next date on your calendar, and2026-12-24 18:30is an exact date. A reminder has to be between a minute and a year away, and you can have 25 waiting.- If your DMs are closed, the reminder is posted in the channel you asked in (pinging only you). One that comes due while the bot is down is sent as soon as it is back, with a note that it was late.
/reminders listshows yours, with the code to cancel each, and/reminders cancelremoves one — only you can see or cancel your own. /timestamp time:20:00 date:2026-10-24 zone:Tokyoturns a date and a time into the codes Discord shows as a time in each reader's own zone, so "Saturday 20:00 Tokyo time" can be pasted into a message and everyone reads it on their own clock. You get all seven styles, each as the code to copy and as it will look. The date is today by default and the zone is the one you saved with/timezone(UTC if you have none; the answer says so). On the two days a year when the clocks change, a time that happens twice or not at all is said in the answer. Only you see it, and nothing is stored.- Your
/birthday setform fills in your timezone for you when you have set one. /meopens one private panel, which only you see, with your own things in this server and a button for each: your level and rank, with a button to hide you from, or show you on, the server's public leaderboard (the choice/rankprivacymakes); your points, with a button for the daily claim (the claim/points dailymakes); your birthday, to set, change or remove (the same form as/birthday set); your timezone, to set, change or clear; and your reminders, to look at and cancel. Level, points and birthday appear only when that module is switched on in the server, and the timezone and reminders are always there. A line with the Heads-ups you asked for is added only when Heads-ups is switched on in the server and you have chosen at least one (/headsupchanges them). The panel stores nothing of its own — each button does what the command does, and the separate commands keep working — and its buttons answer only to the person it was opened for.- My page on the website shows your own things in one page for each server you share with TrinketBot, after you log in with Discord (you do not need to be an admin): your level and rank, your points, your Trinket (its turns, XP, coins and the style you wear), your quests, your trivia and games scores and streaks, your Wrapped recap, your badges and thanks, and your birthday. A part appears only when the server has that feature switched on and TrinketBot has something of yours in it; one that cannot be read just now says so and the rest still show. The Wrapped part has a button that makes your card as a picture and saves it on your device: it is made when you ask, TrinketBot keeps no copy of it, and there is no link to share, so you share the picture yourself. The page only shows: nobody else can open yours, it stores nothing of its own, and to change a choice (such as leaving a leaderboard or removing your birthday) you use the same command as before.
29. Welcome messages
Posts messages in a channel, or in the member's direct messages for a join or a boost, when things happen to members. Everything is off until you turn it on. The Welcome Messages page lists four things:
- Join messages — when someone joins the server.
- Leave messages — when someone leaves. A separate switch, off by default.
- Boost messages — when a member starts boosting the server. A member who keeps boosting isn't announced again, and the message uses
{boost.count}and{boost.tier}for the server's totals. - Role assignment messages — when a member gets or loses a specific role. Add a rule per role, choose gain, loss or both, a channel, and optionally a template. Up to 25 roles. Nothing is announced while a Join Roles synchronization is running, so syncing a role to thousands of members can't flood the channel.
Join, leave and boost each have a page with three tabs: Messages, Dynamic images and Simulation.
- Several messages for one event. On the Messages tab each message has a name, a destination, a message to send and its own on/off switch. The counter beside the heading (for example 1/2) is how many messages your plan allows for that event: 2 on the free plan, 5 on TrinketSupporter and 10 on TrinketChad. The pencil opens the message in the Message Builder; the gear opens its settings; the bin deletes it. A message with no library message of its own sends TrinketBot's built-in one.
- A destination for each message. The gear asks Direct message or Server. For a server you pick a channel from a list grouped by category (a channel TrinketBot can't post in is shown as unusable). A direct message is a private welcome sent to the member, so it works even for servers that keep their public channels quiet, and it is available for join and boost messages but not for leave (the member has gone). Members who have direct messages from server members turned off simply don't receive it, bots are never messaged, and a burst of joins is capped so a raid can't turn it into spam. Discord shows every DM with the bot's usual name and picture, never a server's Bot Identity, so on a server that has Bot Identity on the message also tells the new member what the bot is called there (“I'm TrinketBot, also known as Your Bot's Name on Your Server”). A custom message gets that line added as a small note unless it already says so — use
{bot.alias}(the name, empty without Bot Identity),{bot.aka}(the whole sentence) or{bot.name}(the bot's own name) to place it yourself. - Randomized groups. Put messages inside a group to let TrinketBot choose one at random. Each time the event happens, every message that is not in a group is sent, and one message from each group is chosen, each equally likely. Drag a message card into a group (or out of it), or use the Move to menu on the card, which works with the keyboard and on a phone. Your plan allows 1 group per event on the free plan, 3 on TrinketSupporter and 8 on TrinketChad.
- Simulation. Runs an event for you, or for a member you choose, without sending anything: it makes the same random choices a real event would, then shows each message as it would look in Discord, where it would go, the picture it would carry, and why a message would not be sent (the event or the message is off, no channel is set, the channel is hidden from TrinketBot, TrinketBot can't post there). Simulate again shows another possible pick; Send this one now posts that message for real, after asking.
- A server that set Welcome up before these pages keeps working exactly as before: its welcome, welcome DM, goodbye and boost settings appear as messages, and nothing changes until you change something on the page.
- Each event has the on/off switch at the top. A message uses an optional message template; without one, TrinketBot posts a built-in embed (for a join: "Welcome to your server! Welcome @member, you're our 1,204th member!" with their avatar).
- Template variables:
{mention},{user.name},{user.id},{user.avatar}and{guild.icon}(both are image URLs, so they work as an embed thumbnail or author icon),{guild.name},{member.count},{member.ordinal}("1,204th"),{boost.count},{boost.tier},{account.created}and{account.age}("3 years"); role messages also have{role.name},{role.mention}and{role.id}. The Message Builder's preview fills them with samples. - A join message and the welcome DM can also say how the member arrived, when Invite tracking is on:
{inviter}(a mention of whose invite it was; it shows the name and pings nobody) and{invite.name}(the name you gave that link on the Invites page). Both are empty when the link has no name, for the server's vanity link, and when it could not be told. Putting{inviter}in a message tells everyone who reads it who invited the member, so use it only if that is what you want. - Join messages can wait until the member passes rules screening (on by default). Don't announce bots (on by default) is shared by join, leave and role messages.
- Wait until the member passes Verification (a join message only, off by default, and offered only while Verification is on): the message is sent when the member presses the Verification button and gets the roles, instead of when they join. A member who is already verified when they join, or any member while Verification is off, gets it at once as before. A member who never verifies is never sent it, and neither is one who leaves first; a member a moderator verifies by giving the role by hand is not sent it either. It is sent the way a join message is, with the same limit on how many members are greeted at once.
- Welcome picture (join messages only, off by default): adds TrinketBot's own picture, drawn for each new member in TrinketBot's colours — their avatar and name, their member number and the server's name. A message that has a dynamic image of your own attached shows that one instead. The picture appears as the picture on the message's embed (or on top of a Message Builder message; an embed that already has a picture of its own keeps it, and the card is attached beside it). The picture's font has no emoji or non-Latin letters, so a name that has them is shown as the member's username instead — and if that doesn't work either, as “Member”. If a picture can't be drawn, or TrinketBot may not attach files in that channel, the message is sent without it.
- The gear of each message has Send this message, which posts an example to its channel (or to your own direct messages), never pinging anyone, and the Simulation tab shows what an event would send without posting anything.
A message can only ping the member it is about — never @everyone or a role — and a burst (a raid) is capped so it can't flood the channel. Someone who leaves while still in rules screening, or who was removed by Join Guard, never gets a leave message. A banned member does trigger it, because Discord reports a ban and a leave the same way.
30. Join roles
Gives new members roles automatically the moment they join. Off until you turn it on. The page has four tabs.
Roles and Options
- The Roles card at the top lists up to 10 roles every new person gets. Turn the module on with the switch at the top of the page.
- Wait until the member passes rules screening (on by default) holds the roles until a new member accepts the server rules. Turn it off to give roles immediately.
- Delay role assignment holds the roles back for 1 minute to 24 hours after someone joins — time for Join Guard or a moderator to deal with a bad account first. Delayed roles are checked every 30 seconds and survive a restart. A member who leaves before the delay ends gets nothing.
- Members Join Guard kicks, bans or times out never receive join roles.
User specific roles
Give particular people extra roles when they join, on top of the general ones. Paste their Discord user id (with Developer Mode on, right-click their name → Copy User ID) — they don't need to be in the server yet. By default an entry is used once and then removed; turn off Remove the person from this list after assignment to give them the roles every time they rejoin. Up to 100 people.
Bot roles
- Assign join roles for bots — off means bots get no join roles at all.
- Use different roles for bots — on gives bots their own list; off gives them the same roles as people.
- Apply the assignment delay for bots — whether bots wait the same delay as people.
Synchronization
Sync now gives the current join roles to everyone already in the server — useful right after setting join roles up, or after adding a role. It shows live progress and can be cancelled. It only ever adds roles, never removes one, needs join roles to be switched on, and skips members still in rules screening (if that option is on). Only one runs at a time, and a run interrupted by a restart is shown as interrupted so you can start it again.
- Approx. members missing join roles is counted from the members TrinketBot has loaded, so it can be lower than the real number on a large server.
- Exclude roles from synchronization skips anyone holding any of the roles you choose.
- Schedule regular synchronization (beta) runs one automatically, daily or weekly, so members who slipped through catch up.
What can be assigned. TrinketBot's own role must sit above every role you list — in Server Settings → Roles, drag TrinketBot's role higher. Roles with powerful permissions (Administrator, Manage Server, Manage Roles, Manage Channels, Ban or Kick Members, Manage Webhooks) are refused, because anyone who joins would get them. Roles managed by an integration and @everyone can't be used either. If a role is deleted or ends up above the bot later, the page shows a warning and that role is skipped while the others still go out.
31. Sticky & timed roles
Two small tools for roles that come and go: sticky roles give chosen roles back to someone who leaves and returns, and timed roles hand out a role for a set time and take it back on their own.
Sticky roles
- Choose the roles to remember (up to 25) and how many days to remember them. When a member leaves, TrinketBot notes which of those roles they held; if they rejoin within that time they get them back, once. Nothing else about them is kept.
- Off until you turn it on — and turning it off forgets everyone straight away. Forget them all does the same without switching it off. Anyone who has been gone longer than your limit is forgotten automatically.
- A role is checked again at the moment it would be given: one that has since been deleted, given powerful permissions (Administrator, Manage Server and so on), or moved above TrinketBot's own role is skipped, and the page says why. Only members TrinketBot already knew about are remembered — someone it never saw in the member list is not.
- Keep your Verification and Join roles in mind: a sticky Verified role would let a returning member skip verifying, which may be exactly what you want, or not.
Timed roles
- Give a role for a while from the page (paste the member's user ID, pick the role and a time) or in Discord with
/temprole add(needs Manage Roles, and the role must be below your own highest role). The time runs from a minute to a year (30m,12h,7d). /temprole removetakes one back early and/temprole listshows what is running. Giving the same role again moves its end.- A role someone already holds without a time limit is refused — it would be taken away at the end. If a role can't be taken back (TrinketBot's role is below it, say), it is tried again every minute for a few days, then dropped from the list.
Server tag role
- Choose a role on the Server tag role card and TrinketBot gives it to members who wear this server's tag next to their name, and takes it away when they stop. It is off until you choose a role, and a role that is used for nothing else is best: anyone who has it and is seen not wearing the tag loses it. Wearing a tag is the member's own choice; TrinketBot keeps nothing about it.
- It only changes members TrinketBot already has in memory, a few at a time and about every three hours, and at once when Discord tells it that a member changed their tag. A role that is above TrinketBot's own, carries powerful permissions, or is one of your immune roles on the Moderation page cannot be used; the page says why.
- Discord may not tell bots about tags. It is not certain that Discord sends this to bots at all. If it does not, the card says “Discord has not told TrinketBot about anyone's server tag yet”, nothing is given or taken, and it starts working by itself if Discord begins to send it.
Custom roles
Where you switch it on, members make a role of their own — a name and a colour — with /myrole create, and change or delete it with /myrole rename, /myrole colour, /myrole delete or the buttons of /myrole panel. The role has no permissions, is not shown apart from other roles and cannot be mentioned; a member has one.
- Who can: you list up to four ways to qualify and a member needs any one — reach a level (needs Leveling), hold some points (needs Points), boost the server, or hold a role. None listed means every member.
- Names: 2 to 32 characters; nothing invisible; no
@,<or>; not “everyone” or “here”; nothing that looks like a role the server already has (look-alike letters, leetspeak and spacing are seen through); and none of the Message filter's blocked words, nor your own list of up to 50. - Where they go: just under the anchor role you pick, so the colours show where you want them; TrinketBot's own role has to be above both. With no anchor they go to the bottom of the list.
- Keeping them: a member who stops qualifying, or leaves, keeps the role for 7 days and then it is deleted by a check that runs in the background; if they qualify again it is kept. A role deleted in Discord is forgotten. You can delete any member's role from the page. TrinketBot only ever changes roles it made through this module. A free server can have 25 of these roles, TrinketSupporter 100 and TrinketChad 250.
- The settings are in a server backup; the roles members made are not.
32. Counter channels
A counter is a voice channel whose name shows a live number — Members: 1,234, Boosts: 14 — a sign at the top of your channel list. A server can have up to 8.
- Choose what to count: members (everyone, bots included), people (members who aren't bots), bots, boosts, channels (those TrinketBot can see, not categories or threads), roles, or the members with one role you choose (counted by Discord itself, so it is exact; if the role is deleted the channel keeps its last name and the counter says so). On a very large server the people and bots counts use the members TrinketBot has loaded, so can be a little off.
- Write the channel name with
{count}where the number goes (up to 90 characters; the number gets thousands separators). Then either let TrinketBot make a new voice channel — visible to everyone, but nobody can join it — in the category you pick, or use one you already have (its name will be replaced). - Discord only lets a channel be renamed twice every ten minutes, so TrinketBot checks every ten minutes, and only renames a channel whose name no longer reads right — including one someone renamed by hand. It needs the Manage Channels permission; if it's missing, the counter says so.
- Pause keeps a counter but stops updating it. Stop counter forgets it and leaves the channel as it is (rename or delete it in Discord). Deleting the channel in Discord removes its counter.
33. Insights
A private, numbers-only picture of how the server is doing: when it's busy, how many new members stay, and which channels have gone quiet. Off until you turn it on.
- When it's busy is a week grid — average messages in each hour of the week, over the last 30 days (or since counting began). It is shown in your browser's timezone. Messages per day and Joined and left per day show the same span as bars.
- Do new members stay? says what share of people who joined were still here a day, a week and a month later. Only people who joined long enough ago to tell are counted (someone who joined three days ago hasn't had a week to leave), a percentage appears once at least five have, and people who joined before counting began aren't in it.
- Channels lists the busiest and the quietest text channels over the last 30 days, including ones with no messages at all.
- Leave these channels out keeps a private staff channel out of the counts from then on.
What is — and isn't — kept
Only numbers. For each hour: how many messages, and how many people joined and left. For each channel and day: how many messages. For each day people joined: how many of them have since left. Never what anyone said, and never who — there is no member or message in it, so it can't tell you what a particular person did. Bots aren't counted. A member the bot didn't have loaded when they left counts as a leave but against no join day. Counts are deleted after 90 days, and Erase everything counted deletes them all at once. Turning Insights off pauses counting and keeps what was counted until it ages out. This is separate from the Staff digest, which keeps its own short-lived counts.
34. Leveling
Members earn xp for chatting — and, if you like, for time in voice — level up, and can be given roles as rewards. Level n needs your “xp for level 1” times n² in total, so every level takes a bit longer than the last.
Earning xp
- Chat: a random amount in the range you set, at most once per cooldown. Channels and roles can be left out.
- Voice: a set amount every minute spent in a voice channel. Sitting alone, being muted or deafened, the AFK channel and channels you leave out earn nothing (being alone or muted only count if you leave those options on). It is paid by a once-a-minute check, so a few seconds don't count.
- Role multipliers: members with a role you choose earn more — or less — xp. With several of them only the best one counts, so perks never stack into something silly. 100% is normal.
- Streak bonus: a streak is the number of days in a row (UTC) a member earned xp. Each day kept adds the percentage you set, for up to 10 days. A day turns at midnight UTC unless you chose another timezone for your server's days on the Games page.
- While the streamer is live: members earn 10%, 25%, 50% or 100% more xp for chatting and for time in voice while a stream is on. It counts the streams Live status has noticed, so it does nothing in a server that has not switched Live status on, and it does not change the xp that Games, Quests or an admin give. The default is no bonus.
- Server-wide boost: everyone earns more for a set number of hours — a weekend event, a stream night. It ends by itself, or press End it now.
The bonuses multiply together (rules × role × boost × streak × live), and a message or minute always earns at least 1 xp.
Xp rules and boost windows
The Xp rules card on the Leveling page decides how much xp a place or a role earns. A rule is about a channel, a category (every channel in it), a forum (every post in it) or a role, and gives it ×0 to ×5 of the normal xp in steps of ×0.25. A member earns the highest of their roles' rules and the channel's — not their product — and a channel's own rule decides over its category's. ×0 means no xp, and it wins over everything else, so a “Muted” role at ×0 stays muted even for a member whose other role pays double. A role's rule can count for chat only or for voice only, which is how to give a role extra voice xp. The rules multiply with the role multipliers, the streak bonus and the boosts above. A free server can have 5 rules, TrinketSupporter 15 and TrinketChad 25; a server that goes past what its plan allows keeps them all and the newest do nothing until there is room again.
A boost window is a named stretch of the week or of a date range — a “Double XP weekend”: ×1.25 to ×5 on the days you tick, in the hours you choose (whole hours, not past midnight), between two dates if you like, read in the window's own timezone. The strongest open window counts together with the manual boost and a goal's boost as one boost, not their product. Free servers have 1 window, TrinketSupporter 3 and TrinketChad 5. The card can try the rules out: pick a place and some roles and it says what such a member would earn. /rank counts an open window in the multiplier it shows, but not a channel's rule, which depends on where the member is talking.
Trinket XP
The Trinket's caretaker xp can also earn Leveling xp, so a member's level, level roles, rank card and leaderboard show their Trinket work too. It is off until you switch on Trinket XP also earns Leveling XP in the Trinket XP card on the Leveling page, and it does something only while Leveling is on and the Trinket's Levels are on (they need its caretaker stats); the card says which is missing. The rate is a whole percent from 0 to 400, 100 meaning one Leveling xp for each Trinket xp: every cook, serve, stir, season, taste and event answer adds that share of the Trinket xp it really earned, after the Trinket's own daily limit, so working the limit is no easier than before. The xp is flat: the multipliers, boosts, streak bonus and xp rules above do not apply to it, no level-up message is posted for it (role rewards are given), and coins are not fed. It goes one way, from the Trinket to Leveling: the Trinket's xp, titles and leaderboard stay as they are, and the two curves differ, so a Trinket level is not a Leveling level.
Turning it on counts only new Trinket xp from then on. Add existing Trinket XP adds the Trinket xp members already have, once for the server, at the saved rate, for the members who are still in the server; it asks first and can't be undone. It adds only the Trinket xp that has not been counted yet (the Trinket keeps track of how much of each member's xp it has already passed on), so xp counted since you turned the switch on is never added again and the button can be pressed whenever you like. The role rewards the new levels reach are given out in the background; Give out role rewards catches up the rest. A member's Forget my data and the Trinket's Reset caretaker stats never take back Leveling xp that was already added (they do delete the Trinket's record of how much it passed on, along with the member's Trinket xp), and a season ends as it always did. The switch, the rate and the button's mark are not in a backup.
Community goals
A goal is a target the whole server works towards, with a progress message that fills up and is edited in place (never more than once in five minutes) and an announcement when it is reached. It counts one of four things: the xp of the season in progress (it starts again when a season ends and everyone's xp does), the number of members at a level or above, the rounds of Ping-Pong and Snake played since the goal was made, or the points members earn from the moment the goal is made (messages, voice time, the daily claim and what other modules pay out; not points a staff member gives, refunds or shop spending). The points count is one number for the whole server, so that goal can give a boost or nothing, not a role or points, and it needs Points on. The other games keep no count of rounds. The messages can use {name}, {progress}, {target}, {percent},{bar} (a bar of blocks), {ends} and, in the announcement, {reward}.
- Rewards: nothing but the announcement; an xp boost for everybody for up to a week (kept apart from your manual boost, which it never touches); a role for the members who contributed; or points for them. Contributors are the members with xp (xp goals), the members at the level (level goals) or those who played (games goals), the biggest first, at most 1,000 of them, a hundred at a time. A goal is reached once, and nobody is paid twice.
- A free server can have 1 goal running at once, TrinketSupporter 2 and TrinketChad 3; a reached or ended goal does not count. Goals only run while leveling is on, are not in a backup, and deleting one also takes its progress message down.
Commands
/rankshows a picture with your avatar, level, place, xp, a progress bar to the next level, streak and current multiplier — or someone else's with theuseroption. The picture uses the colour of your level-up message, unless you choose a dynamic image for it under Pictures (below). Names with emoji or non-Latin letters are shown as the username, and if a picture can't be drawn the same facts come as an embed./leaderboardlists the top members, ten a page, under a picture of the top three if you chose a header for it under Pictures. Addperiod: This weekto see who earned the most xp since Monday (UTC) instead, so a newcomer can win a week; a Live board can show it too./rankprivacylets a member choose whether they appear on the public leaderboard page (below):hidetakes them off it,showputs them on it. It changes nothing in Discord itself.
Pictures
Three pictures can be drawn from a dynamic image you design: the rank card (/rank), the picture on the level-up message and the leaderboard header above /leaderboard. Choose a design for each under Pictures on the Leveling page and save; with none chosen you get what you always had: TrinketBot's own rank card, no picture on the level-up message, no header. Start from a ready-made rank card copies one of three designs into your own (it counts against your plan's designs and layers, like any design) and chooses it, and you can then change it in the designer. A rank card can show the member's name and avatar, their level, xp, the xp still needed, their place, how many are ranked and a progress bar to the next level; the level-up picture has the level they reached and their xp; the leaderboard header has the server's name and icon and the names, levels and avatars of the first three places. A picture never stops anything: if the design is gone or can't be drawn, the rank card is TrinketBot's own and the level-up message and the leaderboard are sent without a picture. The choice of designs is not part of a backup, and a restore leaves it as it is.
Public leaderboard page
Optional, and off until you turn it on. It is a web page anyone with the link can open, showing the top 100: name, picture, level and xp — nothing else. Members who have left the server, bots and anyone who used /rankprivacy hide are not shown; /leaderboard in Discord and the dashboard below still show everyone. The page is refreshed every few minutes, is not listed on search engines, and answers the same way for a server that doesn't use it as for one that has it switched off.
Who is on it is your choice, per server. A server set up now starts with only members who choose to be on it: nobody is listed until they run /rankprivacy show (or press the button on their /me panel), because the page shows a name, a picture and a level to anyone with the link, and that is for each member to agree to. A server that already had the page keeps everyone, unless they hide, exactly as before, and nothing changes there until you choose. Switching an existing page to members who opt in takes everyone off it until they choose; switching back lists everyone who has not hidden. A member who hides is never listed in either, and the winners of past seasons are named by the same rule.
Seasons
A season is a fresh start. End this season now (or, if you switch on Start a new season every month, the first of each month at 00:00 UTC) archives the top 25 — who they were and their xp — and sets everyone's xp back to zero. Streaks, the roles members already earned and the celebration gifs are left alone; level roles are not taken back unless you turn on Take the reward roles off when a season ends under Role rewards, which removes them from the members who hold them once the season has ended (in the background, a few at a time, and never any role that is not a reward). If level-ups are announced in a channel, the end of the season and its top three are announced there (the names are mentions that don't ping). The season in progress and the last 24 finished ones are shown on this page, and you can open any of them to see its whole top or delete it; /leaderboard shows which season it is, and the public page shows the winners of the last three. Ending a season can't be undone.
Backups
Leveling's settings — xp amounts, level curve, level-up message, role rewards, voice xp, multipliers, streak bonus and the public page switch — are included in a server backup, with channels and roles matched by name when restored. What members have earned, the celebration gifs and a boost in progress are not.
Level-ups and rewards
A level-up message goes where the member leveled up — or to the channel you pick, which is also where voice level-ups go (voice has no chat of its own; with no channel picked they are silent). Role rewards are given for every level at or below the one reached, so nothing is skipped when xp jumps. A member who rejoins, and a member whose xp you adjust on the Leveling page, are given the rewards their xp has reached at once; for a reward you add later, press Give out role rewards and every member in the server who has passed its level is given it, a few at a time.
For a rank ladder, choose Give only the highest reward role instead of the default Keep every reward role. A member then holds only the role of the highest reward level they have reached: when they get it, the reward roles below it are taken off (never a role that is not a reward, and nothing is taken if the higher role could not be given). Switching to this changes nobody straight away. The lower roles come off at each member's next level-up or rejoin, or when you press Give out role rewards, which asks first and reports how many roles it took off and how many it could not change (a reward role above TrinketBot's own role can be neither given nor taken).
35. Points & shop
A currency for your community — optional, and separate from leveling (xp only ever goes up; points are spent). Members earn points by chatting and by being in voice, claim a daily amount, and spend them on roles and rewards in a shop. You name it — Sprouts, Coins, whatever suits you.
Earning
- Chatting: a message earns the amount you set (1 by default), at most once per person per wait (60 seconds by default), so fast chat can't be farmed. Any message counts, whatever it holds — a picture or a sticker as much as words. Bots and webhooks, and ignored channels and roles, earn nothing; a thread or forum post counts as the channel or forum it was started in, so leaving that one out leaves out the conversations under it too.
- Voice: every minute in a voice channel earns the amount you set — not while deafened, not in the AFK channel, not in a channel or with a role you chose to leave out. It is paid by a once-a-minute check, so a few seconds don't count. Two switches decide whether being alone or muted stops it: Only pay for voice when someone else is there and Don't pay for voice while muted. A new server starts with both on, so sitting alone earns nothing; a server that was already using points keeps both off until its admins switch them on.
- Daily:
/points dailygives a set amount once about every 20 hours, so claiming at the same time each day never slips later. Ignored channels and roles don't apply to it. Claims build a streak (claim again within 44 hours to keep it), with an optional bonus. - While you're live: set the live bonus above 100% and chatting and voice earn more (200% doubles them) for as long as a stream you follow is on. Amounts are rounded to whole points, so a small amount needs a big bonus: with 1 point per message nothing changes until 150%, which gives 2. This uses Live status, so it needs that switched on and your stream connected. The daily amount isn't affected.
The shop
- Add things for sale (5 on the free plan, 15 on TrinketSupporter, 25 on TrinketChad), each a role with a price: yours for good, or for a set number of hours (using timed roles, so it is taken back by itself), optionally in limited supply. A role with powerful permissions can't be sold, and TrinketBot's role has to be above it; the page tells you if something stops a sale.
- Members use
/points shop: a menu lists what is for sale, they pick one, see the price and press Buy. Someone who already has a for-good item can't buy it again; a timed one can be bought again to extend it. - A purchase is all or nothing: the item is taken from the stock, the points are taken, then the role is given — and if giving the role fails, the points and the stock go back, so nobody pays for something they didn't get. Two people can't buy the last one, and nobody can spend the same points twice.
- Taking something off sale or removing it doesn't take it back from people who bought it.
- A reward is something you give by hand, such as a shout-out: a price, an optional stock and an optional limit for each member. Choose a fulfilment channel: every purchase is posted there with Fulfil and Refund buttons for people with Manage Server (and in the Orders list on the page), and the member is told in a private message when you settle it, once. A refund gives back the points, the stock and the member's place under the limit. Without a fulfilment channel TrinketBot can use, rewards can't be bought and the shop says so.
Commands
/points balance(yours or someone else's),/points dailyand/points shop— every answer is private to the person asking./points orderslists your own reward orders and how they stand./points topshows the ten largest balances among the members who are still in the server, each by server name, and where the person asking stands (their place is shown when they are among the top 50, and their balance always). It is private to the person asking. There is no way for a member to hide from it, because anyone can already look up anyone's balance with/points balance./points adjustgives someone points or takes some away — for staff with Manage Server; it never takes a balance below zero. Both that and every shop purchase are posted in your activity log channel when Activity logging is on and its Points & shop category is not switched off.
What is stored is each member's balance and when they last claimed the daily amount — not how they earned it — and, for a reward, an order: the member, the reward and the price, kept until 90 days after it was settled (one still waiting is kept). Settings, the shop and the fulfilment channel are included in backups; balances and orders are not.
Recognition: achievements and kudos
Two ways to say well done, in one place: badges that members earn by taking part, and thanks that they give each other. Its page is under Community & streaming → Levels & points → Recognition. It is off until a server's admins switch it on, and badges and thanks each have a switch of their own inside it.
Achievements and badges
- The built-in set: a handful that every server has and can switch off one by one: reaching levels 1, 10, 25 and 50, holding 100 and 1,000 points, solving the daily word or finishing Rare Find 7 days in a row, winning a first game and 25 games against other members, being in the server for a month and a year, inviting 3 members who stay, and being thanked once and ten times. An achievement that needs a module that is off in your server (levels, points, games, invite tracking) is hidden from members there until it is on.
- Your own: make achievements of your own: a name, an emoji, a short description and one condition with a number (a level, points held, a streak of days, games won, days in the server, members invited, times thanked, right Trivia answers, a quest streak, tournament or giveaway wins, days rolled, a Trinket level). You can hand a role out with an achievement. How many you can make depends on your plan; the newest past a lowered limit are paused, not deleted. Points keeps what a member holds, not what they have earned in all, so “hold 1,000 points” is the nearest it can ask.
- When one is earned: as it happens for a level reached, a game won, a day of a streak finished and a thanks given, and once a day for the rest (days in the server, points held, members invited). An achievement is earned once and never announced twice. You choose how it is told, for the server and for each of your own achievements: not at all, in a channel (with a message from your library, or TrinketBot's own card), or by direct message to the member.
- By hand: on the page you can give a member an achievement or take one away. A taken-away achievement stays taken away: a later check does not give it back, and giving it again by hand does.
/badgesshows your badges and how far you are from the next three./badges member:shows someone else's, unless they chose to hide them (/badges visibility:, or the button under your own badges). Your badges are also a section of/me. Members who have left the server are not shown.
Kudos
/thanks member: reason:thanks someone for helping. The reason is optional, up to 100 characters; it is shown once in the short message TrinketBot posts in the channel and is not kept. You can't thank yourself or a bot, you can thank each person once a day, a limited number of people a day (5 by default), and the same person only a few times a week (3 by default), so friends can't trade thanks. The message pings the person thanked unless you switch that off.- Or press and hold a member, then Apps → Thank this member.
/kudos topshows who has been thanked the most in the last 7 days or in all, among the members still in the server;/kudos meshows your own numbers and how many thanks you have left today.- Top helpers: once a week, on the day and time (in the timezone) you choose, TrinketBot can post the five most thanked members of the week in a channel. Nothing is posted in a week nobody was thanked, and a post more than 12 hours late is skipped.
- The helper role: choose a role and a number, and a member who has been thanked that many times is given the role. It is given once and kept: if you take it off, TrinketBot does not give it again.
- What is stored: for each thanks, who thanked whom and the day, for 8 weeks; for each member, how many times they have been thanked in all and whether they hid their badges; and each badge a member has earned, with the date. The reason of a thanks is never stored. The settings and your own achievements are included in backups; the badges, thanks and totals are not.
36. Ping-Pong activity
TrinketBot's Ping-Pong game runs inside Discord, as an Activity: in a voice or a text channel, open the App Launcher (the rocket button), pick TrinketBot and start it. A picker opens first, as a grid of tiles for Ping-Pong, Trinket Word, Rare Find, Snake, Tic-tac-toe, Four in a row, Rock-paper-scissors and Checkers, each with a short tag under its name. Choosing Ping-Pong opens its menu, with a big Play button, this season's board, your own place and best score, how long the season has left, a short how-to-play and Forget my scores. You play the left paddle against the AI and try to keep the ball going, with the mouse, a finger or the keyboard.
- Against the computer it's a game for one person at a time — everyone in the call can open it for themselves; nobody's paddle is shared. For two players there is Play a friend, below.
- Play a friend: in Ping-Pong's menu, Play a friend opens a table for everyone in the Activity. Two members take the two seats, the match starts when both are seated, and the first to 7 points wins; anyone else in the Activity can watch, and only watch. It needs a server where Games and Ping-Pong are switched on.
- The record: each pair of members has one head-to-head record in that server, such as 3 – 2, shown at the table and after a match; every finished match adds one win for its winner. It is kept until a server's admins remove it, either of you uses Forget my scores, or 12 months pass without a match between you.
- Rematch and leaving: after a match each player can press Rematch; when both have, the sides swap and a new match starts. A player who loses the connection has 20 seconds to come back to the same seat; after that the other player wins, and that counts in the record. A player can also forfeit, after being asked, and then the other player wins.
- Table games: in the picker, Tic-tac-toe, Four in a row, Rock-paper-scissors and Checkers each open a table for everyone in the Activity, the way Play a friend does: two members take the two seats, the match starts when both are seated, and anyone else in the Activity can watch, and only watch. They need a server where Games and Table games are switched on.
- The rules: in tic-tac-toe, three in a row on the 3 × 3 grid wins; the left seat plays X and moves first, and the sides swap on each rematch. In four in a row, pieces drop to the lowest empty place of a column on a board of 7 columns and 6 rows, red (the left seat) moves first, and four in a row, across, down or diagonally, wins. A full grid or board with no line is a draw. Rock-paper-scissors is best of 3: both players choose in secret, the choices are shown together, the first to win two rounds wins, and a tied round is played again and does not count.
- Checkers: English draughts on an 8 × 8 board, twelve men each on the dark squares. The left seat (red) moves first, and each player sees the board with their own pieces at the bottom. A man steps one square diagonally forward, a king one square in any direction. A capture is compulsory: you jump an adjacent piece into the empty square beyond it, you must keep jumping while you can, and when you have a choice of captures you pick one. A man that reaches the far row is crowned, and its move ends there. A player who cannot move loses. Forty moves in a row with no capture and no man moved are a draw, and either player can press Offer a draw after the first move, which the other player accepts or declines. A move has 60 seconds, and against the computer you choose Easy, Normal or Hard.
- Clocks and leaving: a move in tic-tac-toe or four in a row has 60 seconds, and a choice in rock-paper-scissors has 20 seconds; a player who runs out of time loses the game (in rock-paper-scissors, the round). A player who loses the connection has 20 seconds to come back to the same seat; after that the other player wins. A player can also forfeit, after being asked, and then the other player wins. After a match each player can press Rematch; when both have, the sides swap and a new match starts.
- The table records: each pair of members has one record for each game in that server: each side's wins, the draws (rock-paper-scissors has none) and the number of matches, shown at the table and after a match. It is kept until a server's admins remove it, either of you uses Forget my scores, or 12 months pass without a match of that game between you.
- Snake: a game for one person at a time, from the picker. Steer the snake with the arrow keys, W A S D or a swipe, eat the food to grow and score a point for each, and do not run into the wall or into yourself. Your best score of the season goes to that server's Snake board when Games and Snake are switched on there, and a score under 3 isn't kept. The Activity sends TrinketBot the moves of each round when it ends, and TrinketBot plays them back and keeps the score only if it comes out the same.
- The first time, Discord asks whether the Activity may see who you are and show what you are playing on your Discord profile. That is what ties your score to your Discord account, so you have one place on the board and your name is always your name in that server; nothing is typed. If you say no you can still play, as practice: nothing is saved and nothing shows on your profile.
- On your profile: while you are in a round, Discord can show “Playing Ping Pong against AI” on your profile; at a table with a friend it can show “Playing Ping Pong against” and your opponent's name, and while you watch, “Watching Ping Pong”; in the word game it can show “Playing the daily word” instead. At a table game it can show “Playing Tic-tac-toe against” (or “Playing Four in a row against” or “Playing Rock-paper-scissors against”) and your opponent's name, and while you watch, “Watching” and the game's name; in Snake it can show “Playing Snake”. Each needs one extra permission,
rpc.activities.write, which the Activity asks for when it opens. Nothing about it is sent to or kept by TrinketBot. - Sound: you can mute the sounds and set their volume from the speaker button on each screen of the Activity, and the setting stays on your own device.
- Forget my scores, in the menu, asks first and then deletes your scores in every server at once. It also deletes your Trinket Word results in every server and your Trinket Word puzzles of earlier days. Today's puzzle stays, so that a day's puzzle cannot be played twice: a finished one without your guesses, until the next day's clean-up, and one you are still playing as it is. It also deletes every duel record you are in, in every server. It also deletes every table game record you are in and your Snake scores, in every server.
- If you don't see it in the App Launcher, the person who runs TrinketBot hasn't switched Activities on for it. Starting the game needs nothing configured in your server; a server's own board is Games, below.
A score of 10 or more counts on a server's board for the season when Games is switched on in that server; anywhere else the game is practice and no score is kept. It doesn't read your messages, your server or your voice call.
Games
A server can keep its own Ping-Pong board: one place for each member who plays in that server, shown under their name in the server (their nickname, else their Discord name) and tied to their Discord account, so nobody is on it twice. The board is a season, a calendar month in UTC, and shows the top ten of the current one; each season starts empty, and a member's place is their best score of the season. Its page is under Activities → Quick games → Games in the dashboard.
- It is off until a server's admins switch it on, and Ping-Pong has a switch of its own inside it. Trinket Word has one too, and so do Rare Find, the table games (all together) and Snake. While it is off,
/playsays it isn't switched on here, and a game started from the App Launcher is practice only: no score is kept. - Members start the game with
/play, or from the App Launcher in a voice or a text channel, as described above. A score under 10 isn't kept. - The day of your server: the days and months of Games (the daily puzzles of Trinket Word and Rare Find, the Lucky Roll, the monthly boards and the seasons) and the streak of Leveling turn over at midnight UTC until you choose another timezone for your server in the The day of your server card on the Games page (it is there even while Games is off, because the streak uses it too). For a server in Asia or Oceania that moves the new day from the middle of the morning to midnight. A new timezone starts at the next midnight UTC, not at once, so nobody can play a day twice because of the change; a timezone ahead of the old one makes the day that follows end sooner, one behind it makes that day last longer, and a date can come round once more only when the old timezone was ahead of UTC and the new one is behind it (members who played it wait, and members who missed it can play it). The calendar Leveling keeps its xp leaderboards in, Quests, Trivia and the Question of the day keep the day they have. The timezone is not part of a backup, like the rest of the Games settings.
- The page shows the top ten of this season and how long it has left. A season is a calendar month (UTC), the same for every server. Remove takes one member off the board; Reset this season clears the season's scores and keeps everyone's best of all time; Reset everything deletes every score of the server for good. Each asks first. The two resets touch this server's Ping-Pong scores and nothing else; Remove also deletes the duel records of that member in this server (see Duel records, below). It leaves that member's Snake score and table game records alone (see Snake and Table game records, below). To stop a member scoring at all, use Remove from Games beside them on a board: nothing they play on this server is counted and every board leaves them out, but nothing is deleted, and Allow again in the Removed from Games list gives their scores back.
- Duel records: the page also lists this server's duel records, one line for each pair of members who played each other in Play a friend, as “Name 3 – 2 Name” with the number of matches and when they last played, for the ten pairs with the most matches. Duel records follow Ping-Pong's switch.Remove deletes one pair's record and Reset duel records deletes every pair's record in this server; each asks first and touches this server's duel records and nothing else, and a pair can start again by playing. A record is also deleted when either member uses Forget my scores in the Activity, and after 12 months without a match between the pair. Duel records are not part of a backup.
- Snake: the page also shows this season's Snake board, with the season's name and how long it has left over the top ten, as it does for Ping-Pong. Snake has a switch of its own (on once Games is on).Remove, Reset this season and Reset everything work as they do for Ping-Pong: each asks first and touches this server's Snake scores and nothing else. A score under 3 isn't kept.
- Table game records: the page also lists this server's table game records, one line for each pair of members and game, as “Name 3 – 1 – 2 Name” (the first member's wins, the draws, the second member's wins; rock-paper-scissors has no draws) with the game, the number of matches and when they last played, for the ten records with the most matches. The table games have one switch together (on once Games is on).Remove deletes one pair's record of one game and Reset table game records deletes every pair's record of all the table games in this server; each asks first and touches this server's table game records and nothing else, and a pair can start again by playing. A record is also deleted when either member uses Forget my scores in the Activity, and after 12 months without a match of that game between the pair. Table game records and Snake scores are not part of a backup.
- Scores channel: the page has a card where the admins can choose one channel for members' own daily scores from Trinket Word and Rare Find. It starts as None, and then there is no Share button. With a channel chosen, a member who has finished the day's puzzle or run sees a Share button in the Activity. Nothing is posted unless they press it, and only once a day for each game. The post shows their name in the server, the game, the day, their score, their streak from 2 days on and a row of coloured squares, and never the answer, a prompt or anything they typed. TrinketBot needs to see the channel and to send messages and embeds in it; if it can't (the channel was deleted, or its permissions changed), the card says so, the choice is kept, and members see no Share button until it is fixed or another channel is chosen. The scores channel is not part of a backup.
- Season results and Last season: when a month ends, TrinketBot saves the top three members of Ping-Pong, Snake, Trinket Word and Rare Find for it, once, under the names they had then, and keeps the last three seasons of each game. The page's Last season card lists the newest one (a game nobody scored in is left out), and the Ping-Pong and Snake boards in the Activity show their own top three under the board. This happens whether or not anything is posted. In the Scores channel card, Post the results when a season ends (off until you switch it on, and it needs a scores channel) makes TrinketBot also post the same top threes there, once, in one message that pings nobody, during the first day of the new month; if it can't, it tries again every quarter of an hour that day and reports a problem on this page and on the Overview. Switching it on later starts with the next month. A month already ended is not posted late. Removing a member from a game's board here, or resetting everything for it, deletes their places in these top threes as well (the others keep theirs); Reset this season and Reset this month leave them alone, and a member you remove from Games is hidden from them until you allow them back. A member's Forget my scores deletes their places in every server. These top threes and the switch are not part of a backup; the Privacy Policy says exactly what is kept.
Ping-Pong runs in each player's own browser, so someone who changes it can cheat: the boards are for fun. What is stored for each member, and how a member erases their own scores, is in the Privacy Policy. The switches and the scores are not part of a backup.
Trinket Word
Trinket Word is a daily word game in the same Activity: pick it from the picker that opens first. Everyone gets the same five-letter English word each day, in every server, and it changes at midnight UTC. You have six tries, and each guess is marked letter by letter: in the right place, in the word but somewhere else, or not in the word. A word that isn't in the game's list is turned away and costs no try. The answer stays with TrinketBot until your puzzle is finished, and is shown once it is, whether you solved it or not.
- One puzzle for each Discord account each day, whichever server you open the Activity from. Your guesses are saved as you go, so if you close the Activity and come back, you finish the same puzzle.
- Two boards in each server, under names from Discord (your nickname in that server, else your Discord name; nothing is typed). The daily board lists who has finished today's word and in how many tries, fewest first; you see it only after you have finished your own puzzle. The monthly board counts the days each member solved the word this month (UTC), with ties going to whoever needed fewer total tries; it is always shown and starts empty every month. A finished puzzle is added to the boards of each server where Games and Trinket Word are both on, when you open the Activity there.
- Bonus words are extra words for paid plans: once you have finished the day's word, servers on paid plans let you play more, one at a time. They are for fun and count on neither board.
- For admins: the Games page has a switch for Trinket Word of its own, beside Ping-Pong's (on once Games is on), and shows this month's board with Remove for a member,Reset this month and Reset everything. Each asks first and touches this server's Trinket Word results and nothing else: a member's puzzle itself stays with their account, and Ping-Pong is untouched. A member who has already finished today's puzzle comes back on today's board if they open the Activity again, and is gone from the days before.
- Streak: the number of days in a row you solved the day's word. It is alive until a day goes by without a solved word, so yesterday's streak still shows if you haven't played yet today. From 3 days it is shown with a flame. TrinketBot counts it from the puzzles it keeps, which are kept for 62 days, so a streak shows as “62+” at most. Bonus words don't count, and Forget my scores in the Activity resets it.
- Share: if the server has chosen a scores channel (see Games, above), a Share button appears once your puzzle is finished. Pressing it posts your own score there, once a day: your name, the day, your tries out of six, your streak and a row of coloured squares for each guess. It never shows the word or anything you typed.
- On your profile: while you play, Discord can show “Playing the daily word”. It uses the same extra permission as Ping-Pong's status, described above, and nothing about it is sent to or kept by TrinketBot.
What is stored for each player, for how long, and how to erase it (Forget my scores in the Activity, or an admin's Remove or Reset) is in the Privacy Policy. A server's Trinket Word switch and results are not part of a backup.
Word list credits
The five-letter words of Trinket Word, the ones it picks from and the ones it accepts as guesses, come from word lists that are credited here.
Word lists generated from SCOWL, the English Speller Database, Copyright 2000-2026 Kevin Atkinson (https://github.com/en-wl/wordlist), which builds on the public-domain 12dicts (Alan Beale) and ENABLE2K lists and, for the longer guess list, the UK Advanced Cryptics Dictionary, Copyright (c) J Ross Beresford 1993-1999.
The notice of the UK Advanced Cryptics Dictionary, as its author asks it to be shown, in full:
Some words used come from the UK Advanced Cryptics Dictionary: Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. The following restriction is placed on the use of this publication: if The UK Advanced Cryptics Dictionary is used in a software package or redistributed in any form, the copyright notice must be prominently displayed and the text of this document must be included verbatim. There are no other restrictions: I would like to see the list distributed as widely as possible.
Rare Find
Rare Find is a daily guessing game in the same Activity: pick it from the picker that opens first. Everyone gets the same five prompts each day, in every server, and they change at midnight UTC. For each prompt you type an answer that fits it, and the rarer your answer, the more points it scores. A prompt's words are shown when you open it, so nobody reads ahead.
- The clock: you have 40 seconds for each prompt, counted by TrinketBot from the moment you open it, so closing the Activity does not stop it: a prompt that is still open when its time runs out counts as missed. An answer that isn't in the game's list for that prompt costs 3 seconds, and five of them end the prompt with no points.
- The points: an answer is Common (10 points), Familiar (25), Uncommon (50), Rare (75) or Legendary (100), by how rarely people think of it, so a run is worth at most 500 points. The tiers are the game's own judgement. Capital letters, accents, punctuation, a leading “the”, a plural and one small slip in a longer word are forgiven. The rarest answers of each prompt are shown once your whole run is finished; until then the lists stay with TrinketBot.
- One run for each Discord account each day, whichever server you open the Activity from. Your progress is saved as you go, so if you close the Activity and come back, you carry on with the same run.
- Suggest an answer: once a prompt has ended, you can suggest an answer you think was missing. Only the prompt and the text are kept, with a count: no name, no account and no server go with it. Suggestions are read only by TrinketBot's owner and never change the game's list by themselves.
- Two boards in each server, under names from Discord (your nickname in that server, else your Discord name; nothing is typed). The daily board lists who has finished today's run and with how many points, the highest first; you see it only after you have finished your own run. The monthly board adds up each member's points over the days they finished a run this month (UTC), with ties going to whoever finished on more days; it is always shown and starts empty every month. A finished run is added to the boards of each server where Games and Rare Find are both on, when you open the Activity there.
- Bonus runs are extra runs for paid plans: once you have finished the day's run, servers on paid plans let you play more, one at a time, with five more prompts each. They are for fun and count on neither board.
- For admins: the Games page has a switch for Rare Find of its own, beside Ping-Pong's (on once Games is on), and shows this month's board with Remove for a member,Reset this month and Reset everything. Each asks first and touches this server's Rare Find results and nothing else: a member's runs stay with their account, and the other games are untouched. A member who has already finished today's run comes back on today's board if they open the Activity again, and is gone from the days before.
- Streak: the number of days in a row you finished the day's run, whatever it scored. It is alive until a day goes by without a finished run, so yesterday's streak still shows if you haven't played yet today. From 3 days it is shown with a flame. TrinketBot counts it from the runs it keeps, which are kept for 62 days, so a streak shows as “62+” at most. Bonus runs don't count, and Forget my scores in the Activity resets it.
- Share: if the server has chosen a scores channel (see Games, above), a Share button appears once your run is finished. Pressing it posts your own score there, once a day: your name, the day, your points out of 500, your streak and one coloured square for each prompt, by the tier of your answer (black if it scored nothing). It never shows a prompt or an answer.
- On your profile: while you play, Discord can show “Playing Rare Find”. It uses the same extra permission as Ping-Pong's status, described above, and nothing about it is sent to or kept by TrinketBot.
- Forget my scores, in the Activity, also deletes your Rare Find results in every server and your Rare Find runs of earlier days. Today's runs stay, so that a day's prompts cannot be played twice: a finished one without your answers, until the next day's clean-up, and one you are still playing as it is.
What is stored for each player, for how long, and how to erase it (Forget my scores in the Activity, or an admin's Remove or Reset) is in the Privacy Policy. A server's Rare Find switch and results are not part of a backup.
Lucky Roll and activity XP
The Lucky Roll is a daily tile in the same Activity: once a day, in each server, you roll a number from 1 to 999,999. TrinketBot picks the number and keeps the clock, and the Activity only plays the reels. Then the number is read for everything it is: pairs and triples, runs like 1234, palindromes, round numbers, primes and squares, how a number starts and ends, what its digits add up to or multiply to, dates, the digits of pi, a film, a year, a port, a record. Each pattern scores points, and the rarer the pattern the more points: one that half of all numbers hit is worth 100, one in a hundred about 4,400 and one that only a single number in the million hits about 40,000. Your score is the sum (a normal roll is about 44,000), and it is placed among all 999,999 numbers that could have been rolled ("Top 5%"), with a rarity from Trash to Mythic and a short comment. The placement, not the points, decides the Leveling XP: from 5 XP in the bottom quarter to 250 XP for the very best numbers. The digits of every pattern light up as the list is read out, which goes quicker the more patterns there are.
- Badges: the first time a number hits a pattern in a server, you earn its badge. There are more than 4,800, in thirty-one categories (meme numbers, films and music, math and constants, number properties, perfect powers, mirrors, repeating digits, counting, round numbers, the first and last digits of a number, calling and area codes, dates and history, digit sums and products, shapes, science, nature and places, sports and food, tech, colours, symbols, words, and your own journey with streaks, big rolls, sets and calendar days). Each wears an emoji that says what it is. Badges are for show, come in six rarities (Common, Uncommon, Rare, Epic, Anomaly and Mythic, by how rarely numbers hit the pattern), and are kept for 12 months after your last roll in that server. A reference badge tells you why the number is famous, and some are secret until you find them. In the collection the big families (every way a number can start or end) are folded away: open one, show more of it, or type a number to find its badge. The Activity has five boards (today, a short span, this month, all time and badges), and your collection shows each badge with the day and number of its first hit.
- XP for finishing games: when an admin switches Pay Leveling XP for the Lucky Roll and for finished games on (it is off until they do, and Leveling must be on), a finished game pays a little too: Trinket Word 20 XP for a win and 10 for a loss, Rare Find 10 to 30, Snake and Ping-Pong 5 for each of the first five scored rounds of the day, and 10 to each player of the first three matches of each two-player game of the day, a draw too, and once against the same opponent. You can earn at most 150 XP a day from the games in one server, besides the roll. The XP is flat: Leveling's multipliers do not apply. Practice, bonus words and bonus runs, and members removed from Games, earn none.
- Share: if the server has a scores channel (see Games, above), a Share button posts your roll there once a day: the number, your score and where it placed, the comment, its best patterns and your best badges, pinging nobody.
- For admins: the Games page has a switch for the Lucky Roll of its own (on once Games is on) and the XP switch, and shows the month's board of points and the badge board with Remove for a member,Reset roll results and Reset badges. Each asks first and touches this server's Lucky Roll only. Today's roll of a member who is removed or reset is emptied, not deleted, so they cannot roll again until midnight UTC.
- Forget my scores, in the Activity, also deletes your rolls, badges and counters in every server. Today's roll stays, emptied, so that the day's roll cannot be made again. What is stored, for how long and how to erase it is in thePrivacy Policy. The rolls, badges and counters are not part of a backup.
37. Verification
A baseline “read the rules first” gate for everyone who joins: a new member has to press a button on a panel before they get real access to the server. It is separate from Join Guard — that screens suspicious accounts as they join, this asks every member to agree to your rules. Off until you turn it on.
Setup
- Verified role is given when a member presses the button. Make your channels visible to this role and hidden from
@everyone. - Unverified role (optional) is given the moment someone joins and taken away when they press the button. Use it instead of, or as well as, the verified role if you'd rather hide channels from newcomers than show them only to verified members. You need at least one of the two.
- Panel is the message with the button: pick a channel everyone can see (typically your rules channel), write the title and text, choose the button label, save, then press Post panel. Posting again replaces the old panel, even in another channel. Edits to the wording update the posted panel in place. Send a test posts a sample of the panel in the panel channel, marked as a test, with its button switched off, so pressing it gives nobody a role; the live panel is left where it is.
- Question (optional): ask something a person who read your rules can answer, such as “What is the secret word in #rules?”, and add the answers you accept (up to 5, one on each line). The button then opens a small form, and only a right answer verifies; capitals, extra spaces and the way an accent is written do not matter. A wrong answer is told to try again, and after 5 wrong answers in 10 minutes the member is asked to wait. What a member types is checked and never stored or logged. The question can be up to 45 characters (Discord shows it as the label of the box). The question and answers are not in a backup, so a backup you share never gives the answer away. With no question the button works as before.
- When a member passes the gate, two things can follow: a Welcome join message set to “wait until the member passes Verification” is sent, and an Automations rule on “a member passes Verification” starts. Each happens once for a member, however many times they press.
- Members who never verify (optional, off until you set hours): with an unverified role chosen, TrinketBot can remove, or time out for 28 days, whoever still has it that many hours after joining. Bots, staff, boosters, members still in rules screening and anyone who joined more recently are never touched, each action is a case in Moderation with the reason “Did not verify within N hours”, and no more than 20 members are handled every five minutes. It uses the Moderation module, so that must be on.
Good to know
- Members who are already in the server are not verified automatically. Give them the verified role yourself (or take the unverified role off) before you hide any channels, or they'll be locked out.
- Someone who leaves and rejoins goes through the gate again, because Discord removes their roles when they leave. Bots are never given the unverified role.
- Roles with powerful permissions (Administrator, Manage Server/Roles/Channels, Ban or Kick Members, Manage Webhooks), roles managed by an integration and
@everyonecan't be used, and TrinketBot's own role has to sit above both roles in Server Settings → Roles. If something stops working the page shows the reason — and a member who presses the button is told to let a moderator know. - A member Join Guard has kicked or banned is never marked unverified, welcomed or given join roles — Join Guard always goes first. One it has timed out gets the Unverified role (so the end of the timeout does not let them in) but is not welcomed or given join roles. Bots are never screened.
- This is a button, not a CAPTCHA: it stops people who never read the rules and the laziest bots, not a determined attacker. A question stops a bot that only presses buttons, but not one that is told the answer. For raids, pair it with Join Guard.
38. Invite tracking
Records which invite link brought each new member in, ranks your top inviters, and can reward them with roles — for a server that is growing, or one that wants to recognise the people doing the recruiting. Off until you turn it on, and it only counts people who join after that.
Setup
- TrinketBot needs the Manage Server permission to see invites at all. The page warns you if it doesn't have it.
- Join log channel (optional) posts a line for every join saying whose invite was used and how many of their invitees are still here. It never pings anyone.
- Role rewards give an inviter a role once that many of the people they invited are still in the server. The role is given when one of their invites brings in a new member and they are at or above the threshold, so adding or changing a reward hands nothing out by itself: someone already past it gets the role with their next new member. Someone who has reached several thresholds gets all of those roles then, and a role is not taken back if an invitee later leaves. The same restrictions as join roles apply: powerful roles (Administrator, Manage Server/Roles/Channels, Ban or Kick Members, Manage Webhooks), managed roles and
@everyoneare refused, and TrinketBot's own role has to sit above the reward role. - Where people come from is a table of your invite links. Make a separate invite in Discord for each place you share one, paste it with a name ("Twitch panel", "YouTube description"), and the table shows, for each link, how many people joined, how many are still here and how many left, plus the joins through your vanity link and the ones TrinketBot could not tie to a link. It counts each person once, on the link of their latest join, and "left" is only who TrinketBot saw leave while tracking was on. Only numbers are shown, never who joined. A link can also give everyone who joins through it a role (off unless you pick one), at the same moment as the join roles; the same restrictions apply as for role rewards. The names are not part of a backup, since an invite code exists in one server only. A name can be used in a welcome message as
{invite.name}, and{inviter}says whose invite it was (see Welcome messages).
Commands
/invites stats shows, privately, how many people a member has invited (still here, left, and in total) and — only to that member and to people with Manage Server — who invited them; /invites leaderboard shows the top ten inviters. Both only work while tracking is on, and can be switched off per server on the Commands page like any other.
How it works, and what it can't do
- Discord never says which invite a member used. TrinketBot remembers every invite's use count and, when someone joins, looks for the one that went up. If it can't be sure — two people joining at the same instant, or the bot being offline — the join is recorded as unknown rather than guessed at, and nobody gets credit for it.
- Invites with a use limit are handled (Discord deletes them on the last use), and so is your server's vanity link, which is counted as its own source with no inviter.
- Each member counts once, for the invite they used most recently. Someone who leaves and rejoins through a different link moves the credit to that inviter, and rejoining through the same one is not counted twice — so leaving and coming back can't inflate anyone's numbers. The leaderboard ranks by invitees still here for the same reason.
- Bots are never counted, since they're added by an authorisation link rather than an invite.
- Reset leaderboard forgets every recorded arrival in this server (roles already given stay). Turning tracking off pauses it and keeps what was recorded, but people who leave while it is off aren't noticed, so the “still here” numbers can be out of date when you turn it back on.
39. Join to Create
Gives members their own temporary voice channel on demand, deleted automatically once it empties back out. Off until you turn it on.
TrinketBot needs View Channels, Connect and Move Members on the trigger channel, and Manage Channels where the new channels are made — it moves each member into the channel it just made. If any of them isn't on, the bot can't act: no channel is made and nothing happens when someone joins the trigger channel. The page shows a warning naming what is missing. A server that added TrinketBot a while ago has to grant Move Members and Connect (Server Settings → Roles → TrinketBot) or re-invite the bot; also check that the trigger channel and its category don't deny them to the bot.
Setup
- Trigger channel is the voice channel members join to get one — joining it moves them straight into a brand new channel instead.
- Category (optional) is where new channels are created. Leave it unset and they land in the trigger channel's own category.
- Channel name controls what each new channel is called.
{username}is replaced with the member's Discord username; unlike text channel names, spaces and capital letters are fine.
What the owner can do
The member a channel was created for gets real Discord permissions on it — no bot commands or buttons required. From Discord's own right-click menus they can rename or delete the channel, and move or disconnect members from it. They don't get Discord's “Manage Permissions” on it — Discord only lets an Administrator hand that out — so locking and unlocking is done with the commands below.
TrinketBot adds commands for this: /voice limit (how many people can join, 0 for no limit), /voice lock and /voice unlock, and then /voice rename (Discord allows two renames every ten minutes, and TrinketBot says when the next one is possible), /voice kick (remove someone), /voice permit (let someone join even while the channel is locked), /voice reject (keep someone out, and remove them if they are in) and /voice transfer (give the channel to someone who is in it). Each works on the channel the person running it owns; staff with Manage Channels can also use them on the temporary channel they are sitting in. An owner can't be kicked or rejected, nor can someone who manages channels (by an owner), and TrinketBot's own access is never touched.
If the owner leaves while others stay, /voice claim lets someone who is in the channel take it over; while the owner is still in it, they have to hand it over with /voice transfer. A new owner gets the permissions the first owner had, and the previous owner loses theirs. A member can own only one temporary channel, and handing a channel over needs Manage Roles (the same permission lock and unlock use); without it, nothing is changed.
A control panel in the channel's chat
Switch on Post a control panel in new temp channels and the bot posts one message in the chat of each new channel (a voice channel has a text chat): buttons for Lock, Unlock, Limit and Rename (the last two open a small form), and a menu to pick a member, who can then be let in, removed or handed the channel. Each does what the matching command above does, for the same people: the owner, and for rename, let in, remove and hand over also staff with Manage Channels who are sitting in the channel. The panel needs Send Messages and Embed Links in the new channel's chat, which the category's permissions decide. If it can't be posted the channel is still made, and the page shows one note. It is off until you turn it on, it goes with the channel, and it keeps working after a restart.
A channel disappears on its own once everyone leaves it — nothing to clean up. Deleting it yourself in Discord (or removing it from the Active channels list on this page) works too and is treated exactly the same way.
40. Reaction roles
Lets members pick their own roles in one of three ways: reactions (reacting gives the role, removing the reaction takes it back), buttons (a button per role; a click gives the role and another click takes it back) or a dropdown menu (choosing a role gives it; choosing one they already have takes it back). A single role button on a message of your own design is also possible in the Message Builder.
- Open Reaction Roles and either post a new message — pick a channel, then write the text or choose a message template — or use an existing message by pasting its link (right-click a message in Discord → Copy Message Link).
- Add rows of emoji + role: up to 20 per message (Discord's limit on different reactions). Pick each emoji with its smiley button (any ordinary emoji, or one of your own custom ones), or type or paste it. TrinketBot adds the reactions itself.
- Normal mode lets a member hold several roles from the message. Unique mode gives one role at a time: choosing another swaps their role and removes their earlier reaction.
- Each setup can be edited later. Repair reactions re-adds any of TrinketBot's reactions that someone cleared.
- Buttons and dropdown menus (choose the style at the top of the form) are always a message TrinketBot posts itself — write the text or choose a message template, then add up to 25 roles. Each can have its own text (otherwise the role's name) and, if you like, an emoji. A template's own buttons stay, as long as they and the panel fit in the message's five rows. Members get a private reply saying what changed, and a panel keeps working after a restart.
- A panel has two extra rules. Most roles a member can have (normal mode): once they hold that many from the panel, they give one back before taking another. Only members with this role can use it: for a members-only panel; it can't be one of the panel's own roles. Editing a panel rebuilds its message from the text or template it was made from, so changing the text itself means making a new panel.
- The Settings tab has two switches. Automatically add reactions (on by default): TrinketBot puts the reactions on the message for you — turn it off to add them yourself. Automatically remove all reactions (off by default): when you drop an emoji or remove a setup, remove every member's reaction for it too; off, only TrinketBot's own reaction is removed.
- Remove ends a setup — optionally deleting a message TrinketBot posted, otherwise just taking its own reactions off (or, for a panel, its buttons or menu). It never takes roles back from people who already have them. Deleting the message or its channel in Discord ends the setup too.
The same role rules as join roles apply: TrinketBot's role must be above every role used, and roles with powerful permissions are refused — checked when you save and again on every reaction. Reaction roles aren't included in server backups, since each one is tied to a specific message.
41. Forms
A form is a button in a channel that opens a pop-up with your questions — a staff application, a commission request, a bug report, a collab pitch. What a member answers is posted to a channel you choose, with Accept and Deny buttons for staff. A server can have 2 forms on the free plan, 5 on TrinketSupporter and 10 on TrinketChad.
- Questions (1 to 5 — all Discord lets one pop-up hold): a short answer, a paragraph, a dropdown, pick one (buttons), pick several (checkboxes), or a file upload (up to 5 files — good for reference images; you can limit it to images, PDF documents, videos, audio or other kinds like
.zip, and a file of another kind is refused with a message). Each has a label (up to 45 characters, Discord's limit), optional help text, and can be required or optional. Dropdowns take up to 25 options, pick-one 2 to 10, pick-several up to 10. - Send responses to a text channel only staff can see. The reviewer role (optional) is pinged on each response and may accept or deny along with anyone who has Manage Server. TrinketBot needs Send Messages, Embed Links and Attach Files there — the page tells you when one is missing.
- Post button puts the form's message (its name, description and button) in a channel; Move button posts it somewhere else and takes the old button away. A form that is switched off keeps its button, but tells whoever presses it that it isn't taking responses.
- Send a test, on each form, posts the form's button message in the channel chosen for the button, marked as a test, with its button switched off, and lists the pop-up's questions under it. No pop-up opens and nothing goes to your responses channel. The form has to be switched on and have a responses channel.
- Pressing Accept or Deny asks for an optional note, then colours the response green or red, removes the buttons, and (if you left it on) sends the applicant a DM with the outcome and your note. Role given on accept (optional) is handed to the applicant when you accept — it can't carry powerful permissions, and is checked again the moment it is given. If two reviewers press at once, the first wins.
- A member can have one response per form waiting at a time (a response older than a week stops counting, in case its message was deleted). If the response can't be posted — the channel is gone, say — they are told, nothing is kept, and the problem is shown on the Forms page.
Privacy
TrinketBot does not keep what people answer. It stores the form itself, and for each response only who sent it and whether it was accepted or denied (so it can tell who already has one waiting) — dropped three months after it is settled. The answers exist only in the message in your responses channel, so what happens to them is up to you: keep that channel private, and delete responses when you are done with them. Uploaded files are attached to that message; if one is too large for the channel, the response is posted without it and says so.
42. Suggestions
Members make suggestions with /suggest, everyone votes with 👍 and 👎 buttons, and staff mark what became of each idea. Off until you turn it on.
- Choose the suggestions channel.
/suggestopens a short pop-up (a title and optional details); the suggestion is posted there with its author, the two vote buttons (showing the counts), and a Staff button. - Each person has one vote per suggestion: pressing the other button switches it, pressing the same one takes it back. Voting closes once staff approve, deny or mark a suggestion implemented, and reopens if they reopen it. Under consideration still takes votes.
- Staff (people with Manage Server, or the staff role you choose) press the Staff button for a private menu: under consideration, approved, denied, implemented, or open again. They can add a note; the message changes colour, shows who decided and the note, and — if you leave it on — the author gets a DM.
- The wait between suggestions (5 minutes by default, 0 for none) stops one person flooding the channel.
- Send a test posts a sample suggestion in the suggestions channel, marked as a test, with its vote buttons switched off. Nothing is recorded and nobody can vote. It needs suggestions switched on and a channel saved.
- TrinketBot doesn't keep the words of a suggestion. It stores who suggested each one, its status and who voted which way — nothing else. Deleting the message deletes the only copy of the text.
43. Commands
The Commands page controls the slash commands members can use in this server. Type / in Discord to see them. Two are there to find your way: /help shows anyone the commands they can use in this server — only the ones their permissions allow and the server hasn't switched off — and where to read more, and /setup (Administrators) gives a link to a page of this dashboard, such as Welcome Messages or Scam Shield, from inside Discord. Start typing in its page box — a module's name, or a word from what it does, like “greet” or “raid” — and pick the page from the list, which shows the best 25 matches; every module of the dashboard can be found this way, and with nothing typed it shows the first 25. It has three parts:
- Default commands — every built-in TrinketBot command, grouped by feature, each with its own switch. All are on until you turn one off. A command that's turned off stays in Discord's command list, but anyone who uses it only sees a short private note saying it's turned off, and nothing runs. Turning off a command turns off all of its sub-commands (
/ticketcovers setup, close, add and the rest). Nothing is lost by turning one off — the dashboard, and the feature's buttons, keep working. - Custom commands — your own slash commands. Give it a name (lowercase letters, numbers,
-and_), a description Discord shows next to it, and choose one of your message templates to reply with, so a command can post a full embed with buttons and media. The template's variables fill in for whoever runs it ({mention},{user.name},{user.avatar},{guild.name},{member.count}). A command can reply to the whole channel or only to the person who ran it, and can be switched off without deleting it. In a busy channel, set delete the reply afterwards (5 seconds to 5 minutes) and the bot removes its reply on its own — and with it the “used /command” line Discord shows above it, so nothing is left behind. That is only for replies everyone can see: a reply only its sender sees doesn't need it. If the bot restarts during the wait, the reply stays. A reply can only ever ping the person who ran the command, never @everyone or roles. You can't reuse the name of a built-in command. Optionally, turn on also time out a member: Discord adds a required member option to the command, and running it times that member out (for however long you set) right after the reply goes out. This goes through the same rules as/timeout— it's recorded as a case, respects the role hierarchy and protected roles, needs the Moderation module on, and the command is hidden by default from anyone who couldn't already run/timeoutthemselves (a server can widen that in Discord's own Integrations settings). - Options, replies by role, counters and server variables — what makes a custom command more than one fixed answer. Options (up to 3) are what a member fills in after the command's name: some text, a whole number (with an optional smallest and largest), a member, or a choice from a list of up to 10. Name an option with lowercase letters, numbers and
_and it is{option.name}in the message: a text is shown exactly as typed (it can neither format the message nor mention anybody), a member is a mention that does not notify them ({option.name.name}is their name), and a choice is its value ({option.name.label}is what the member picked from). Options are registered with the command when you save it, so a change to them takes a moment on Save, and a command whose options did not change is not registered again. Replies by role (up to 5) answer some members differently: the first reply in your list whose role the member has is the one they get, and everybody else gets the message chosen for the command. A role or a message you delete afterwards is shown as a warning on the command. Count every use keeps a number for the command:{counter}is how many times it was used,{counter.total}how many times all your counting commands were, and the dashboard shows the number and can reset it. A use is counted when the command is about to reply, so one that is off, paused or held back for a moment is not. Server variables are a name and a text you keep at the bottom of the page (up to 300 characters each):{var.name}in any custom command's message, or in a FAQ answer, says the text, so a line you repeat in many places is changed once. A server keeps up to 25 variables on the free plan, 50 on TrinketSupporter and 100 on TrinketChad; the ones past the limit are kept and not filled in until there is room. A message can also be a random group, and the command then answers with one of its messages, chosen by chance. None of this is part of a backup, like the commands themselves. - Word commands — react to a word in an ordinary message, no slash needed. Choose the word or phrase and how it's matched: the whole word or phrase (
hellomatches "Hello there!" but not "shell"), anywhere in the message, the message starts with it (good for prefixes like!rules) or the whole message is exactly that. Capitals and extra spaces never matter. Then chain together as many actions as you like, in whatever order you want: reply with a message (one of your templates, as a reply or a plain message), react with emoji (up to 5), send a GIF (a plain image or GIF link), give or remove a role, delete their message, delete my reply after a while (see below), wait (pause up to 60 seconds before the next action runs), delete recent messages, set slowmode, lock or unlock the channel, and one of warn, time out, kick or ban. Actions run in the order you arrange them (use the arrows on each action to reorder) — the one exception is warn/timeout/kick/ban, which always runs last no matter where you put it, so a reply, reaction or role change lands before a kick or ban removes the member. Optionally limit a word to chosen channels (a thread counts as its channel), and set a cooldown (30 seconds by default): it stops replies, reactions and GIFs repeating in the same channel, while roles, deleting, waiting and moderation actions always run. - Clearing up after a word command — for a fast-moving chat, add delete my reply after a while below a reply or GIF action. It removes what the actions above it posted once the wait is over (5 seconds to 5 minutes) and, if you leave delete their message too on, the member's message as well, so the chat is left as it was. Deleting someone else's message needs the Manage Messages permission in that channel; without it the reply is still removed and the word's card says why. It doesn't hold up the actions after it, only counts when the reply really went out (a reply held back by the cooldown leaves their message alone), and can be used once per word. If the bot restarts during the wait, the reply and the message stay.
Word commands are careful by design. Other bots and webhooks never trigger one, and a reply can only ping the person who said the word. The moderation actions — warn/timeout/kick/ban, and the channel-wide purge/slowmode/lock/unlock — use the same rules as their / command equivalents: they're recorded as cases, respect the role hierarchy and protected roles, and need the Moderation module on — and members with Manage Server or Administrator are never punished by a word. Purge, slowmode, lock and unlock act on the whole channel the word was said in, and can't run inside a thread. Roles that carry powerful permissions can't be handed out, the same as Join Roles. If an action can't run (a role above TrinketBot's own, a missing permission), the word's card in the dashboard says why. Kick, ban and purge can't be undone by TrinketBot, so use them sparingly. A wait that's still pending when the bot restarts is lost — keep waits short and don't rely on them surviving a redeploy.
A server can have 1 custom command on the free plan, 5 on TrinketSupporter and 10 on TrinketChad. Word commands work the same way with 2, 5 and 10, and each word command can chain up to 2 actions, 4 or 6. If a plan ends, or allows fewer, the oldest commands keep working and the newest are paused (not deleted) until the plan returns or you remove some. Custom and word commands aren't included in server backups.
FAQ
The FAQ answers the questions your members ask most, with /faq. It is off until a server's admins switch it on, and its page is Commands & automations → Server FAQ in the dashboard (it is the server's own FAQ, not TrinketBot's FAQ page).
- Entries: an entry has a title (the question, up to 80 characters), up to 10 keywords (words members may type instead of the title), an optional category (up to 30 characters) and an answer, which is a message from your message library: it can have buttons, links and a picture (a picture made for a member, such as a dynamic image, is not drawn in an answer), and a random group of messages gives one of its messages each time. In the answer,
{var.name}is a server variable you keep on the Commands page, and the member's own name and the server's are filled in as in a custom command. A server can keep 15 entries on the free plan, 50 on TrinketSupporter and 150 on TrinketChad; the newest ones past the limit are kept and not offered until there is room. - Finding an answer: a member types
/faqand starts typing in thetopicbox. The box lists up to 25 entries that fit, the ones whose title starts with what was typed first, then those with a keyword that fits, then those that contain it anywhere. The answer is private to the member by default. You can instead turn on Answer in the channel, for everyone: the answer is then posted in the channel, and one member can get one every 30 seconds./faqon its own lists the categories in a menu, then a category's questions in another; choosing one gives its answer. - What members need: every entry shows how many times its answer was given, and you can sort by it. It is a number and nothing more: TrinketBot does not keep who asked, and it does not read anyone's messages to suggest an answer. Reset the counts sets all of them back to 0.
- From the dashboard: Post to a channel sends an entry's answer to a channel you choose, for everyone, without pinging anyone and without counting as a question. Send me a test sends it to your own direct messages, so you see it in Discord before members do.
- Backups: the FAQ's two settings and its entries are in a backup, each entry with its answer written as the name of the message in the library (an id exists only in the server that made it), never with how often it was used or who wrote it. A restore adds the entries, and an entry with the same title as one the server has takes the file's keywords, category and answer. It finds each answer by name, so restore the messages with it; an entry whose message is not there is skipped and named in the notes.
44. Webhooks
A webhook tells a web address you control when something happens, so your own tools — a stream overlay, a spreadsheet, an automation service — can react. It is for people who build things; if you only want a message in Discord, you don't need it. A server can have 1 on the free plan, 3 on TrinketSupporter and 10 on TrinketChad.
Events
stream.started— a Twitch, Kick or YouTube stream went live: platform, streamer, title, game, link and picture.stream.raid— a Twitch raid, in either direction: who raided whom, and with how many viewers. Needs raids switched on under Raids & clips, and only the raids that its Announce direction and Smallest raid let through are sent. It is sent whether or not the server's own card is posted.clip.created— a new Twitch clip of the channel the server follows: the title, who clipped it as Twitch names them, the game, the length, the link and the picture. It arrives a few minutes after the clip is made, or sooner when the chat bot's clip command made it, once per clip. Needs Post new clips switched on under Raids & clips. The names of the people who clipped go to the address you chose, so think of that before ticking it.video.published— a new YouTube upload or Short, or a TikTok: title, link, channel and picture.feed.item— a feed you follow posted something new (see Feeds).member.joined,member.leftandmember.leveled_up— each carries a member's Discord id and name (and, for a level-up, their level and xp). Bots are left out. Only choose these for an address you trust with that.
Each webhook only receives the events you tick, and only for this server. More events will be added over time; a receiver should ignore types it doesn't know. A webhook made before an event existed isn't subscribed to it: tick it on the webhook yourself.
One use: saying your server's news in your own Twitch chat. A webhook into Make, Zapier or n8n, then a request to your chat bot's key, does it without code — the recipe is on the Connect page of the Twitch chat bot, under From your Discord server. A free server has one webhook, so tick every event you want on it. If the receiving tool is slow, or answers with a server error, delivery is tried again after 30 seconds and after 5 minutes, so a line can be said twice. Never route member.joined, member.left or member.leveled_up into a public chat: they carry people's Discord names and ids.
What a delivery looks like
A POST with a JSON body, over https only:
{
"id": "6f0c…", // unique per delivery; a retry keeps it
"type": "stream.started",
"createdAt": "2026-10-04T12:00:00.000Z",
"guildId": "123456789012345678",
"data": { "platform": "twitch", "title": "Devlog night", "streamerName": "Mallie", "url": "https://www.twitch.tv/mallie" }
}Headers: X-Trinket-Event, X-Trinket-Delivery (the same id as in the body), X-Trinket-Timestamp (seconds) and X-Trinket-Signature. Answer with any 2xx within 10 seconds. A busy receiver (5xx, 429, a timeout) is tried again after 30 seconds and after 5 minutes, then given up on; a 4xx is not retried. Because of retries — and because a stream seen twice is only mostly de-duplicated across a restart — treat deliveries as at least once: use the delivery id to ignore a repeat. Redirects are not followed.
Checking the signature
Every webhook has a secret, shown once when you create it (or replace it). The signature is the HMAC-SHA256, in hex, of the timestamp, a dot and the raw request body, using that secret. Check it against the raw body, before parsing, and reject a timestamp more than a few minutes old:
import crypto from "node:crypto";
function verify(secret, headers, rawBody) {
const timestamp = headers["x-trinket-timestamp"];
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(timestamp + "." + rawBody).digest("hex");
const given = headers["x-trinket-signature"];
const matches = given.length === expected.length && crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) < 300;
return matches && fresh;
}import hmac, hashlib, time
def verify(secret, headers, raw_body): # raw_body is bytes
timestamp = headers["x-trinket-timestamp"]
expected = "sha256=" + hmac.new(secret.encode(), timestamp.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(headers["x-trinket-signature"], expected) and abs(time.time() - int(timestamp)) < 300Good to know
- Send test delivers a
pingright away and shows how the receiver answered. - The address can't point at a private or internal network — TrinketBot checks every delivery, not only when you save. It can't contain a username or password.
- A webhook that fails 20 deliveries in a row switches itself off; fix the receiver and turn it back on. Changing the address or turning it back on starts the count again.
- Replace secret works at once and the old one stops being accepted, so update the receiver first or be ready for a few rejected deliveries.
- Webhooks are not part of a backup — an address and its secret are not something to leave lying in a file.
45. Automations
A rule says when something happens or a time comes, only if it fits, then do something — so TrinketBot reacts on its own: announce a streamer's milestone, give a role when someone reaches level 10, share a new post in a channel, open a thread every morning. A server can have 2 rules on the free plan, 5 on TrinketSupporter and 10 on TrinketChad.
When
- A stream goes live (Twitch, Kick or YouTube), a video is published (YouTube or TikTok), a followed feed has a new post (see Feeds), a member joins, a member leaves or a member levels up. These are the same events webhooks send, and a repeat of the same stream or video sets a rule off once.
- A Twitch raid and a new Twitch clip are webhook events too, and they start a rule only while Raids or Post new clips is switched on under Raids & clips with a Twitch channel connected; the editor warns when it isn't, on a new rule and on a saved one. A raid rule hears only the raids that the server's Announce direction and Smallest raid let through, whether or not the card is posted. A clip arrives a few minutes after it is made (sooner when the chat bot's clip command made it), and at most the newest five of one check start rules. TrinketBot's own card is posted as well, unless its Post a card in a channel switch is off there, so a rule that posts its own message adds a second post: switch the card off if the rule is enough.
- Something happens on a streamer's Twitch channel: someone follows, subscribes, shares a resub, gifts subs, cheers bits, a hype train starts, or someone redeems a channel point reward. These are not webhook events: only rules hear them, never a webhook. A rule starts from one only when a streamer has handed that event to this server, from their own page (see Recipe 11), so a server with no such streamer never starts one. It doesn't have to be the channel this server follows. A rule gets the viewer's name, the tier, the amount (months, gifted subs, bits, hype train level, reward and its cost) and the channel, and never anything a viewer wrote: not a resub message, not the words of a cheer, not what a reward asked them to type. A viewer isn't a member of the server, so these rules can post but never give or take a role. Follows less than 10 seconds apart on one channel count as one event, and so do hype trains less than 60 seconds apart.
- At a set time, every day or every week: you choose the time, the day of the week for a weekly rule, and the timezone (the one your browser is in to start with). The time stays at 9:00 on the wall clock when the clocks change. TrinketBot checks twice a minute; a run that it is up to 15 minutes late for still happens, and an older one is skipped and counted on the rule, so a bot that was off for a weekend does not post three days of “good morning” when it comes back. A rule gets
{date},{date.long},{weekday}and{time}, and can be limited to some days with a condition on the day of the week. A server can have 3 rules that start at a set time on the free plan, 10 on TrinketSupporter and 25 on TrinketChad, counted among its rules. - A giveaway ends, a ticket is closed, a stream ends or a member passes Verification. Only rules hear these, never a webhook. A giveaway rule gets the prize, the winners (
{winners}mentions exactly them), how many were drawn and entered, and the link; it starts once, when the giveaway ends, and not for a reroll. A ticket rule gets who opened the ticket and its number, and nothing of what it was about: not the reason, not the messages. A stream rule gets the platform, how long it ran, the replay link when there is one and, if the ended alert shows it, the most viewers seen; it starts about two minutes after the stream goes offline, and only for a go-live alert that is set to be marked as ended or deleted when the stream ends (on the Twitch or Kick page, or for a followed channel): the default, keeping the alert as it was, never starts it, and the editor says so. A Verification rule gets the member's mention, username and display name once they have pressed the button (or answered the question) and been given the roles, and never anything they typed; it needsVerification switched on, and a member whose role a moderator gives by hand does not start it.
Only if (optional)
Up to three conditions about the event — for a stream, its platform, title, game or streamer; for a level-up, the new level (“is at least 10”); for a raid, its direction, how many viewers and the two channels' names; for a clip, its title, who clipped it, its game and its length in seconds; for a Twitch channel event, the viewer, the tier or the amount (“at least 1000 bits”). Text is compared without caring about capital letters. Every condition has to hold.
And check (optional)
Up to five checks on the member or the channel of the event, all of which have to pass, and which TrinketBot looks up when the event happens: the member has or doesn't have a role, the event happened in one of up to ten channels, the member's level (from Leveling) is at least a number, or their account is at least some days old. A role, level or age check is for an event about a member (a member joining or levelling up, a ticket being closed); a channel check for an event that happened in a channel (a giveaway ending, a ticket being closed, a stream ending). A member who has left passes none of them. If TrinketBot can't look something up just then, the rule is skipped, the rule says so, and it is never run as if the check weren't there; the next event asks again.
Then
- Post a message in a channel, with variables like
{streamerName},{title},{url}or{mention}— the editor lists what the chosen event offers. Optionally ping one role. - Post a Message Builder message — a saved message from the Message Builder, filled in with the same variables, so it can be a full embed with a picture and buttons.
- Start a thread in a text channel: its name and its first message (written there, taken from the Message Builder, or none) take the event's variables, and it archives itself after 1 hour, 1 day, 3 days or 7 days. TrinketBot needs View Channel, Create Public Threads and Send Messages in Threads in the channel; the rule says so when it doesn't have them.
- Start a poll in a text channel, through the same service as the Polls page, so it is listed there: a question of up to 300 characters, 2 to 10 answers of up to 55, from 1 hour to 32 days, one choice or several. The question and the answers take the event's variables. It is a real Discord poll that members vote on at once; Send a test posts a message that only looks like one.
- Give a role or take a role away, for the events about a member who is still there (a member joining or levelling up, or the one who opened a ticket that was closed). A role that carries powerful permissions (Administrator, Manage Server, Ban Members…) or belongs to an integration can't be handed out by a rule, and TrinketBot's own role has to be above it.
- A rule can do up to three things, in order. If one fails (a deleted channel, a missing permission) the rest still happen, and the rule shows what went wrong.
Ready-made rules
Under your rules, the page has a Ready-made rules section with eight rules to start from. Use this rule opens the editor with the rule filled in; nothing is created until you press Save rule, and it is then an ordinary rule: it uses one of this server's rules (the page says how many the plan holds), and the buttons are off when all of them are in use. Each one shows what it needs, with a warning and a link to the page that fixes it when that is missing.
- Ping a role when a stream starts in a game. Starts when a Twitch stream goes live. You type the game, choose a channel and, if you like, a role. It needs the Twitch go-live alert switched on, on the Twitch page. The alert still posts its own card, so this is a second post. The game is read when the stream goes live, so a stream that switches to that game later does not set it off.
- Welcome a raid. Starts when a raid on your channel of at least 25 viewers arrives; change the 25 to the smallest raid you want welcomed. You choose a channel and, if you like, a role. It needs Raids switched on under Raids & clips, its own raid card is posted as well unless you switch the card off there, and a raid smaller than the Smallest raid set there never reaches the rule, whatever number you put here. With Announce set to Raids I send, this rule never starts.
- Open a thread every morning. At the time you choose, TrinketBot starts a thread named for the day (Good morning, Saturday!) and says good morning in it. It needs nothing switched on.
- Ask what to play, every week. On the day and at the time you choose (Friday at 12:00 to start with), a one-day poll in the channel you choose. It needs the Send Polls permission there, and it shows on the Polls page.
- Shout out a level milestone. When a member reaches exactly level 10 (change it, or switch the condition to is at least), congratulate them by name. It needs Leveling switched on, and Leveling's own message is posted as well.
- Ask for feedback when a ticket is closed. When staff close a ticket (not one closed for being quiet), the member who opened it is mentioned in the channel you choose and asked how it went. It needs Tickets switched on.
- Thank everyone when a giveaway ends, and ask what is next. When a giveaway somebody won ends, a thank-you mentioning the winners and a poll on the next prize. The giveaway's own winners post is made as well.
- Post a recap when a stream ends. How long the stream ran and the replay link. It needs a go-live alert that is marked as ended or deleted when the stream ends.
Pinging a role that isn't set to “anyone can mention” works only if TrinketBot has the Mention Everyone permission (see Tips & troubleshooting). To start a rule from a new clip or from a streamer's follows and cheers, write it yourself with the When choices above.
Safe by design
- Nothing a stranger writes can ping anyone. A stream title, a clip title, a channel or viewer name or a feed post that says
@everyoneis defused; the only pings are the member mention the rule itself adds and the one role you chose. - Rules can't set each other off. Their actions (a message, a role) are not among the events a rule starts from, so a loop is impossible.
- A rule posts at most 20 messages a minute, so a raid of joins can't turn a welcome rule into a flood. Giving and taking roles is not held to that, so every one of the joiners still gets the role. What was skipped is counted and shown as a note on the Automations page once the burst is over.
- Send a test posts what a rule would post for a made-up event (a member rule uses you as the member). It never gives or takes a role.
Rules are included in backups: each finds its channels and roles by name in the server being restored to, and a rule that can't find everything it needs is skipped whole rather than restored half-working.
46. Polls
Post one of Discord's own polls from the dashboard, without typing a command. Members vote right on the message and Discord counts and displays the results — TrinketBot just posts it and lets you follow it.
- Open Polls in the sidebar, choose a channel, write the question (up to 300 characters) and add 2 to 10 answers (up to 55 characters each, each with an optional emoji — a normal one, or a custom one written like
<:name:id>). - Choose how long it runs for — from 1 hour up to 32 days — and whether people can pick more than one answer. Optional text above the poll can introduce it; it never pings anyone by itself.
- Ping a role about this poll is off unless you pick a role (and it starts empty again for every poll). The one role you pick is pinged once, when the poll is posted, and nobody else can be, never
@everyone. The role has to be one that anyone can mention, or TrinketBot needs the Mention @everyone, @here and All Roles permission; otherwise it tells you before posting, because Discord would show the mention and notify nobody. - Post poll sends it immediately. TrinketBot needs the Send Polls permission in that channel, and tells you if it doesn't have it.
- Send a test posts a plain message that looks like a poll, marked as a test, in the channel chosen in the form. A real poll is Discord's own object that members can vote on at once and a bot cannot make inert, so the test is not a poll: nobody can vote, and nothing is added to Recent polls.
- Under Recent polls, Show results reads the live tally straight from Discord (it updates as people vote), and End now closes voting early — Discord then announces the result in the channel. Remove from list only forgets it here; the message and its votes stay in Discord.
A poll's answers can't be changed once it's posted — that's Discord's rule. TrinketBot remembers just enough to list your newest 50 polls (the channel, the question and when it ends), never who voted. Only polls posted from the dashboard appear in the list.
47. Events
Create and manage Discord's own scheduled events. Members mark themselves interested, get reminded when it starts, and see it in the server's event list. The events themselves are read from and saved to Discord — TrinketBot only remembers the reminders you set up, so it knows when to post them, and the sign-ups you switch on, so it knows who is going and who is waiting.
- Open Events in the sidebar and fill in a name, an optional description and the start (and end) time. Times use your own timezone; everyone sees them in theirs.
- Choose where it happens: in a voice channel, on a stage channel, or somewhere else — a place or a link. An event held somewhere else needs an end time.
- Turn on Announce it in a channel to post a message the moment it's created. You can ping one role (never @everyone) and attach a message template. The template can use
{event.name},{event.description},{event.url},{event.start},{event.start.relative},{event.end},{event.location},{event.channel},{event.ping}and{guild.name}. Without one, the built-in announcement names the event, shows when it starts and links it so Discord shows its event card. If the announcement can't be posted, the event is still created and the page tells you why. - Repeats makes it a repeating event: every week, every 2 weeks, every weekday (Monday to Friday), or every month on the same weekday (say, the second Tuesday). It uses Discord's own repeating events, so members see and follow it like any other. After it's created, a repeating event's schedule is managed in Discord; you can still change its name, description, place and reminders here.
- Send reminders posts a message in a channel you choose before the event starts and/or when it does — pick any of 1 day, 3 hours, 1 hour, 30, 15 or 5 minutes before, and when it starts. You can ping one role and attach a message template (the template can use
{event.notice}, which says "starts in 1 hour" or "is starting now", along with the variables above). A repeating event is reminded before every occurrence. If you move an event in Discord, its reminders move with it; if you delete or cancel it, they're removed. A reminder whose time has already passed when you save (a 1-day reminder for an event tomorrow morning, say) is left out, and the page tells you. Reminders are posted within about half a minute of their time; if TrinketBot was offline for more than 10 minutes past a reminder's time, it skips that one rather than post it late. - Let members sign up is off for every event until you switch it on. It posts one message in the channel you choose, with Going and Not going buttons, the names of those going and an Add to calendar link. Set the places (1 to 500, or leave it empty for no limit): when they are taken, the next members who press Going join a waiting list and are told their place privately. When someone gives a place back (or leaves the server), the first on the waiting list moves up in the same moment, and TrinketBot posts one line in the channel that mentions that member and nobody else. Raising the places moves up as many as fit; lowering them never removes anyone who is going. The message is edited as people press (a burst of presses becomes one edit); if Discord will not let an old message be edited any more, a new one is posted and the old one is taken down. On each event under Upcoming events there is a Sign-ups panel to switch it on or off or change the places, and it works for an event made in Discord and for one that is running. Turning it off deletes the message and the lists, and asks first.
- A sign-up also has five options, all off until you switch them on for that event: a Maybe answer (a third button; maybes never take a place or wait in line, and are listed on the message), a role for those going (given when a member gets a place, taken back when they give it up, leave the server, or the event ends or is cancelled; it needs Manage Roles and TrinketBot's role above it), a discussion thread under the message (it needs Create Public Threads and Send Messages in Threads; without them the sign-up still goes up), a deadline (sign-ups close some minutes to two days before the start; after it Going and Maybe say sign-ups are closed, and a member can still press Not going), and a private message to those going if the event is cancelled or deleted (the first 100, never the waiting list or the maybes; members with private messages closed are skipped). Duplicate event on an event's card copies it, its reminders and its sign-up with all of this into the form for a new event, with the dates left for you to choose.
- The calendar link opens a file (.ics) that any calendar app can add. It holds the event's title, description, start and end (one hour when the event has no end), place and Discord's link, and nothing about any member. For a repeating event it holds the next occurrence only, not the whole series, so add it again for the next one. The link has a long secret in it, so it cannot be guessed; anyone who is given it can open it.
- When the event ends or is cancelled, the sign-up message says so and loses its buttons, and the Discord ids on its lists are deleted 7 days later. A repeating event starts its lists again for each occurrence. A sign-up message that is deleted by hand (or whose channel is deleted) is forgotten with its lists. TrinketBot needs Send Messages and Embed Links in that channel.
- Send a test posts a sample announcement, marked as a test, in the channel you chose for the announcement in the form (or a sample reminder, in the reminders channel, when only reminders are on). No event is made, nothing is linked and nobody is pinged.
- Under Upcoming events you can edit an event that hasn't started, or cancel it. The type of an event can't be changed once created.
TrinketBot needs the Create Events permission to make events, and can then change or cancel the events it created itself. With Manage Events as well, it can manage every event in the server, including ones made in Discord. Repeating events show how they repeat ("Every week") and can only have their schedule changed in Discord. A server that added TrinketBot before Polls and Events existed needs to grant Send Polls and Create Events itself (Server Settings → Roles → TrinketBot), or re-invite the bot.
48. Giveaways
Posts a giveaway message with an Enter button in a channel. TrinketBot picks winners automatically when it ends, and can announce them.
- Open Giveaways in the sidebar, choose a channel, and fill in the prize and an optional description.
- Set how many winners to pick and when it ends at — up to 30 days out. Who can enter (below) can restrict who's allowed to enter.
- Send a test posts a sample giveaway in the channel chosen in the form, marked as a test, with its Enter button switched off. Nothing is started, so there is nothing to enter, end or draw from.
- Ping a role when it starts is off unless you pick a role (and it starts empty again for every giveaway). The announcement that starts the giveaway pings that one role, once; the winner announcement, the text above the announcement and every later edit still ping nobody but the winners they name. It follows the same rule as a poll's ping: a role anyone can mention, or the Mention @everyone, @here and All Roles permission for TrinketBot.
- Start giveaway posts it immediately. Anyone with access clicks Enter to join — clicking again does nothing, and the message shows the live entry count.
- Who can enter is a section of the form with rules for who may press Enter. It is closed and empty to begin with, and a giveaway with no rule is open to everyone, as it always was. The rules are: required roles (a member needs at least one of the roles you add, up to 5); a minimum level (from Leveling, which must be switched on in the server: the form says so when you save it, and a giveaway whose Leveling is switched off later tells members that their level can't be checked); a Discord account that is at least some days old; a member who has been in this server for at least some days; blocked roles(up to 10) and blocked members (up to 50), who can't enter; and extra entries, up to 5 more for each of up to 5 roles. A member's extra entries add up to one entry plus those of every bonus role they hold, and never more than 10 entries in all, so a pile of roles makes a member likelier to win but never certain.
- Every rule is checked when a member presses Enter, in this order, and the member is told in private which rule they missed, the first one only: blocked, required roles, account age, time in the server, level. A member who is blocked, by name or by a role, is only told that they can't enter, and is never told who else is blocked. The giveaway's message lists who can enter in a Who can enter field: the roles, the level, the ages, the roles that are blocked and the roles with extra entries. It never names a blocked member. A member's extra entries are counted when they press the button, and one entry is kept for each member however many they have. The draw picks winners by entries, without putting a winner's entries back, so a member with three entries is three times as likely as a member with one to be drawn first.
- Starts at keeps the giveaway for later: it is saved now, shows in the list as Scheduled (where Cancel takes it back) and is posted by TrinketBot when its time comes, within half a minute, even if the bot restarts in between. It can start from 1 minute to 30 days away, and it runs for as long as there is between its start and its end. A giveaway that is posted late, because the bot was down at its time, ends later by as much. If it can't be posted (a channel that is gone, or a permission that was taken away) it is cancelled and the Overview says so. A server can have 50 giveaways running or waiting to start at once.
- /giveaway does the same from Discord, for administrators:
/giveaway start(the prize and how long it runs, and optionally the number of winners, the channel, a description,start-into post it later, and one each of the rules above),end,reroll(with awinnerto replace only that one),cancelandlist. A giveaway is named by its id, which/giveaway listand the dashboard show, or by a link to its message. Every answer is private, and a giveaway started in either place is the same giveaway, in the list of both. - Under the giveaway's own entry once it's running, End now ends it early and picks winners from whoever's entered so far. Once ended, Reroll all winners asks first and then replaces every current winner with someone new; Replace this winner, next to a name, replaces only that one and keeps the others — handy if one winner doesn't respond. Both pick again from the same entrants, never someone who has won in any earlier draw. At the draw and at every reroll, anyone who has since left the server, who no longer has any of the roles the giveaway asked for, or who has since got a blocked role or been blocked, is skipped. Cancel stops a still-running giveaway with no winners picked.
- Customize appearance makes each giveaway its own: an embed color, an optional image or gif (paste a link, or upload a file — one per giveaway, not a shared pool), text above the announcement (never pings anyone), a custom winner announcement using
{winners},{prize}and{count}, and the Enter button's own label and emoji. Everything here is optional — leave it closed and a giveaway looks exactly like the default. - A picture design (under Customize appearance) draws one of your dynamic images for the announcement, with the prize, the number of winners and the host, and draws it again with the winner when the giveaway ends. It takes the place of the image or gif, and is drawn again with the entry count each time someone enters. A giveaway that does not announce its winners leaves them out of the picture too. If the design can't be drawn the giveaway is posted without it, with the image or gif if it has one.
- Announce winners in the channel is on by default; turn it off and winners are still picked and recorded exactly the same, but nothing about who won is posted in the channel — no ping, and the ended message's Winners field just says to check the dashboard. You can still see who won here on the Giveaways page at any time.
If nobody enters, the winner announcement always uses the built-in wording, even with a custom one set. TrinketBot needs permission to send messages and add buttons in the chosen channel.
Tournaments
Brackets for any game: members join a tournament with a button, the bracket is drawn when sign-ups close, and each match is posted for its two players, who report who won. It is under Events & celebrations → Tournaments in the dashboard, and it is off until a server's admins switch it on.
- Staff start one with
/tournament create(members with Manage Server, or the staff role chosen on the page) or with Start a tournament on the page: a name, the game, the most players, single or double elimination, how many games a match is (shown to the players), when sign-ups close and, if you like, a check-in that opens that many minutes before then. TrinketBot posts a sign-up message with Join and Leave buttons and the list of players, which it keeps up to date. Sign-ups close at the time you chose, or when staff use/tournament startor Start now; with check-in on, players who did not press Check in are removed at the deadline. - The bracket is drawn once, by a shuffle that is fixed by the tournament's id, and the best seeds get the byes when the number of players is not a power of two. Double elimination has a losers' bracket and a grand final that is played again if the player who came through the losers' bracket wins it. The bracket is posted in the channel and edited in place at most every ten seconds.
- Each match that is ready is posted with its two players pinged (and nobody else), or in a private thread of its own if you switched that on and gave TrinketBot the Create Private Threads permission. When they have played, either player presses I won or I lost. When both answers agree the winner goes through. If they differ, or one player has answered and the other does not within the wait for a missing answer you set, the match is sent to the dispute channel (the staff role is pinged), where only staff can press the buttons that decide it. Staff can also set any result, disqualify a player (their match, and any later one, goes to the other player) or cancel a tournament, from the page, each after asking.
- When the final is decided TrinketBot posts the podium and can give the winner a role, taking it from the previous winner of the same game if you left that on. Each win is kept for 12 months (the tournament, the game, how many played, the winner and the runner-up, with the names they had when they joined) and shown on the page; a finished or cancelled tournament, with its players and matches, is deleted a month after it ends.
/tournament listshows what is open and the latest winners. - How many players one tournament may take and how many tournaments can run at once depend on the server's plan, as set out in Premium & Patreon. Lowering a plan never removes players from a tournament that has started. TrinketBot needs to see the channel and to send messages and embeds in it, and Manage Roles for the winner role. Backups carry the settings and never a tournament.
49. Starboard
Mirrors a server's best messages into a channel once they get enough of a chosen reaction — a running highlight reel members build together, no moderator curation needed.
- Turn Starboard on from the switch above, choose the channel messages get mirrored into, the emoji that counts (⭐ by default — a normal emoji, or a custom one written like
<:name:id>), and how many reactions a message needs (1–100). - Let a message's own author count toward its star total is off by default, so posting something and reacting to your own message doesn't help it reach the threshold. TrinketBot's own reaction never counts either: Art & clips can add its vote emoji to every post it watches, and that can be the same emoji as the star. Ignored channels are never counted at all — handy for a channel that already gets heavy reaction use for something else; a forum or media channel in the list covers all of its posts, and so does a channel for its threads.
- The starboard copies a message's text, author and first picture where everyone who can read the starboard channel can see them, so a message from a channel "everyone" can't see (a private or role-only channel, or a private thread) is skipped unless you turn on Also star messages from private channels — do that for a staff-only board. A message from an age-restricted channel is never copied.
- Once a message reaches the threshold, TrinketBot posts it — author, content, its first image, and a Jump to message button — and keeps the shown star count live as more people react. A message that's already been mirrored stays on the starboard even if reactions are later removed and it drops back below the threshold; only the count updates. If the original message is deleted, its copy is removed from the starboard too, whether or not the starboard is still on and whichever channel the message was in.
- Reward the author can pay the author of a message the first time it reaches the starboard: up to 100 points of the Points module and up to 100 Leveling XP, each off at 0. It is paid once for each message, never to a bot or a webhook, and never when the message only reached the starboard because its author starred it themselves (even if you let an author's own star count toward the threshold). Nothing is posted about it, and a message from a channel the starboard does not take earns nothing. Messages that reached the starboard before you set a reward are not paid for. Points only pay while the Points module is on, and XP only while Leveling is on.
- Recent posts lists the newest mirrored messages with their live count and a link to open either copy.
- Send a test posts a sample starboard post in the starboard channel, marked as a test, with your announcement wording, your color and its button switched off. Nothing is starred or recorded. It needs the starboard switched on and a channel saved.
- Customize appearance sets the embed's color, and the wording of the leading announcement text above it using
{emoji},{count},{channel}and{author}(leave it blank for the default{emoji} **{count}** {channel}), plus the Jump to message button's own label and emoji. The embed itself — author, content, image — is always a snapshot of the original message, not something to template.
TrinketBot needs permission to see the starboard channel (View Channel) and to send messages, embeds, and links in it. From 2026-11-16 Discord hides a channel the bot can't view, and nothing is posted or updated in a hidden starboard channel. The dashboard doesn't warn about this for the starboard, so check the channel's permissions for TrinketBot's role if the starboard goes quiet.
50. Art & clips
Make a channel for fan art, for clips, or for both. Every post there gets a thread under it for the talk, messages that aren't posts are removed so the channel stays a gallery, and once a week the best-loved post can be shown in a gallery channel with its artist named. A server can have 2 channels on the free plan, 5 on TrinketSupporter and 10 on TrinketChad.
What counts as a post
- Art: a picture (including a gif), or a link to an art site — Pixiv, ArtStation, DeviantArt, Behance, Cara, Newgrounds, Tumblr, Instagram, Bluesky, X, or a direct link to an image file.
- Clips: a video file, or a link to a clip — a Twitch clip (a channel's home page or a past broadcast isn't one), a YouTube video, Medal, Streamable, TikTok, a Kick clip, or a direct link to a video file.
- Art and clips accepts either. Anything else — a message with only words, a document — isn't a post.
What TrinketBot does in the channel
- Open a thread under each post (on by default) named after its poster —
{author}in the thread name becomes their name, so you can make it{author}'s art. Replies and chat go there instead of between the pictures. - Remove messages that aren't posts (on by default). The person gets a short message saying what the channel is for — it mentions only them and deletes itself after a few seconds, and it is sent at most once every half minute however many messages they write. Staff (anyone with Manage Messages in that channel) are never touched. Switch it off and the channel only gets the thread and the reaction.
- Add the vote emoji to each post (off by default) puts the server's vote emoji on every post, so voting is one tap.
- A channel needs Manage Messages (to remove), Send Messages, Create Public Threads and Send Messages in Threads, and Add Reactions with Read Message History (for the vote emoji). Each channel shows what is missing.
- A message is judged when it is sent. Editing a picture out of a post afterwards isn't noticed.
Weekly pick
Switch it on, choose a gallery channel (not one of the showcase channels), the vote emoji (a reaction with that emoji is a vote) and how many votes a post needs. Every Monday at 00:00 UTC TrinketBot looks at the last seven days and posts the winner in the gallery: its picture or video link, its text, the artist named (a mention that doesn't notify them), where it came from, how many votes it had, and a button to the original.
- The poster's own vote and bots' votes don't count, and a post needs at least the number you set from other people. A tie goes to the earlier post.
- Never picked: anything from an age-restricted channel, a post with a file marked as a spoiler, a post by someone who has left the server, and a post that was featured before. The week's newest 300 posts in each channel are looked at.
- If nothing reaches the number, nothing is posted that week. Switching the pick on doesn't post at once — it starts with the next Monday.
- Points and XP for the artist (both off at 0) can be paid to the author of the post the pick features: up to 1,000 points of the Points module and up to 500 Leveling XP. It is paid once for each featured post, right after it is posted, and never to a bot. Points only pay while the Points module is on, and XP only while Leveling is on. Nothing is posted about it, and “Pick now” pays for the post it features too.
- Pick now features the best post of the last seven days straight away (the Monday pick still happens, and picks the next best). It waits half a minute between picks.
- If the artist deletes their post, its feature is deleted too. TrinketBot keeps only the ids of the featured messages — to avoid picking one twice and to take it down — and nothing about who made them.
Showcase channels and the pick's settings are included in backups; which posts were featured is not.
51. Community discovery
Opts this server into TrinketBot's public community page, where anyone can search, filter by category, and join straight from an invite link. Every new listing — and every edit to an existing one — is reviewed before it goes live, so this is off by default.
- Open Public listing in the sidebar, under Server (or run
/community setupin Discord) and fill in a description, your server's invite link, and up to 3 categories. - The sidebar toggle reflects whether this server has a listing at all — turning it off and saving removes the listing entirely, same as every other module's toggle. A dedicated Delete card button on the page does the same thing in one click (with a confirmation) if you'd rather not use the toggle. Whoever can open this page at all — including the actual server owner, always — can freely edit or delete the listing regardless of its current status.
- A status banner shows where the listing stands: Pending review, Approved (live on the community page), or Rejected (with the reviewer's reason, if they left one).
- Editing an already-approved listing sends it back to Pending — a moderator reviews the new content before it replaces what's currently public.
From Discord: /community setup description: invite: categories: submits or updates the listing, /community status shows the current status, and /community remove takes it down.
Every new or edited submission also DMs the bot owner directly with Approve/Reject buttons right in the message — no need to open the dashboard's review queue for the common case. Rejecting opens a short form for an optional reason, shown back to the server on its Public listing page.
52. Bot identity (TrinketChad)
Gives the bot a different nickname, bio, and/or avatar in this one server only — it never touches TrinketBot's real, global profile, and other servers are unaffected.
- Open Bot Identity in the sidebar. Bot Identity is part of TrinketChad, so the page needs a TrinketChad pledge or subscription assigned to the server — see Premium & Patreon below if it shows an upsell instead of the form.
- Fill in a Nickname (32 characters max, Discord's own cap), Bio, and/or Avatar URL (a direct link to a PNG/JPEG/GIF/WebP image). Leave any field blank to keep the bot's normal value for that one.
- There's a short cooldown between saves (about a minute) — a safety margin against Discord's own rate limit on this endpoint, not a billing limit.
Setting a nickname here needs TrinketBot to have the Change Nickname permission in this server — a server that added TrinketBot before this feature existed may need to grant it first (Server Settings → Roles → TrinketBot) or re-invite the bot to pick up the updated permission. Bio and avatar don't need it.
Discord only shows the bot's Bot Identity inside this server. Direct messages — such as the Welcome DM — always show its usual name and picture, so the Welcome DM adds a line telling the new member what the bot is called here.
If TrinketChad later lapses on this server — the linked Patreon pledge cancels or drops to TrinketSupporter, an admin-granted override is pulled, or the entitlement gets reassigned to a different server — TrinketBot automatically reverts to its normal nickname/bio/avatar here within a few minutes. Nobody needs to remember to undo it manually.
53. Premium & Patreon
There are two paid plans, and everything else is free. TrinketSupporter raises the limits on the tools that cost something to run; TrinketChad includes everything in TrinketSupporter, raises them further, and adds Bot Identity — the bot's own name, picture and bio on your server. A plan covers one server. Open the Premium page from your account menu (top-right, click your name) to see the plans side by side and manage yours.
The page starts with Your plan: what your account has, where it comes from (Patreon, Discord or the bot owner) and which server it is applied to, with three steps under it — get a plan, link your account and choose the server — ticked off as you go. Below are the three plans as cards, with Compare every limit opening the full table (the plans can be read without logging in: a visitor who is logged out sees them, with a Log in to connect button in place of the account controls); Connected accounts, which says for each of Patreon and Discord whether it is connected and what it does; and Choose the server, which is there from the start but only works once the account is on a plan.
| What | Free | TrinketSupporter | TrinketChad |
|---|---|---|---|
| Custom slash commands | 1 | 5 | 10 |
| Word commands | 2 | 5 | 10 |
| Actions on one word command | 2 | 4 | 6 |
| Automation rules | 2 | 5 | 10 |
| Automation rules that start at a set time | 1 | 3 | 6 |
| Outgoing webhooks | 1 | 3 | 10 |
| Feeds | 1 | 3 | 10 |
| Forms | 2 | 5 | 10 |
| Points shop items | 5 | 15 | 25 |
| Trinket shop items | 3 | 8 | 15 |
| Trinket Word bonus rounds a day for each member | None | 5 | Unlimited |
| Rare Find bonus runs a day for each member | None | 2 | Unlimited |
| Scheduled messages | 2 | 5 | 15 |
| Sticky messages | 2 | 5 | 15 |
| Art & clips channels | 2 | 5 | 10 |
| Twitch chat commands | 20 | 60 | 150 |
| Twitch chat timers | 5 | 15 | 40 |
| Twitch chat quotes | 200 | 1,000 | 5,000 |
| Twitch chat blocked terms | 25 | 100 | 300 |
| Twitch chat allowed link domains | 10 | 40 | 100 |
| Followed Twitch channels (go-live alerts for friends' channels) | 3 | 6 | 10 |
| Dynamic images | 1 | 3 | 6 |
| Layers in one dynamic image | 10 | 25 | 50 |
| Welcome messages per event | 2 | 5 | 10 |
| Welcome random groups per event | 1 | 3 | 8 |
| Random groups of messages | 1 | 5 | 15 |
| Trivia questions you write | 50 | 200 | 500 |
| Looking-for-group games | 5 | 15 | 40 |
| Leveling xp rules (per channel and per role) | 5 | 15 | 25 |
| Leveling boost windows | 1 | 3 | 5 |
| Community goals running at once | 1 | 2 | 3 |
| Member-made custom roles | 25 | 100 | 250 |
| Share codes active at once | 3 | 10 | 25 |
| Server variables for commands and FAQ answers | 25 | 50 | 100 |
| Server FAQ entries | 15 | 50 | 150 |
| Players in one tournament | 16 | 64 | 128 |
| Tournaments running at once | 1 | 3 | 5 |
| Achievements of your own | 5 | 15 | 40 |
| Themes (settings that change between two dates) | 2 | 6 | 15 |
| Channels with a weekly rhythm | 3 | 10 | 25 |
| Predictions open at the same time | 1 | 2 | 3 |
| Question of the day and this-or-that items you write | 50 | 200 | 500 |
| Custom items for collectible drops | 10 | 40 | 100 |
| Kinds of staff application | 2 | 5 | 10 |
| Live boards (leaderboards kept up to date) | 1 | 3 | 6 |
| Ticket types (kinds of ticket on one panel) | 5 | 5 | 5 |
| Uploaded images and files | 50 | 200 | 1,000 |
| Upload storage | 25 MB | 100 MB | 500 MB |
| Bot Identity | — | — | included |
Moderation, appeals, raid lockdown, admin guard, verification, backups and every privacy control are free on every plan. If a plan ends, or you move to a smaller one, what is over the new limit is paused, never deleted: the newest items stop (a paused feed isn't checked, a paused rule doesn't run, a paused form takes no responses, a paused shop item isn't for sale, a paused scheduled or sticky message isn't posted, a paused Art & clips channel is an ordinary channel) and come back the moment the plan does or you remove others to make room. Each page says what is paused and why. Restoring a backup fits what the server's plan allows and tells you about the rest.
- Connect Patreon links your Discord account to your Patreon account via Patreon's own login. Your pledge's tier decides the plan.
- Once your linked account is on a plan, use Assign to a server to hand it to one of your servers — only one server at a time; assigning it to a different one moves it, it doesn't add a second. A server's plan is the better of the one assigned to it and one bought for it.
- Remove releases the plan from its current server without disconnecting Patreon.
- If the bot owner has granted premium to your account directly (independent of Patreon), a banner on this page says so — no Patreon link is needed in that case. A grant from the owner is always TrinketChad.
- If the bot owner has set up subscriptions through Discord, a Subscribe through Discord card appears on this page too. You pay with Discord's own checkout — no Patreon account needed — and a subscription of your own works exactly like a pledge: it puts your account on that plan, and you assign it to one server. A subscription bought for a server in Discord puts that server on the plan directly, with nothing to assign. Discord tells TrinketBot when a subscription starts, changes or ends (and TrinketBot double-checks every few hours), so the plan follows it.
Accounts on a plan also get a Supporter look in the dashboard: a glowing name and a badge in the account menu and on this page, named for the plan (TrinketSupporter or TrinketChad). A Patreon supporter gets a warm gold glow and a round gold medal; a Discord subscriber gets a blurple glow and a medal with a star; a plan granted directly by the bot owner gets a cool indigo-teal glow and an angular shield, so they are easy to tell apart. It disappears if the plan lapses and returns with it.
54. Account settings, backups & sessions
Open Settings from your account menu (top-right, click your name) — this covers your account and every server you manage in one place, separate from the per-server module sidebar.
Server data & privacy
If TrinketBot is ever removed from one of your servers, everything stored for it is deleted automatically 3 days later, unless the Bot rejoins first — a safe default so an accidental removal doesn't destroy a server's whole setup. Each server you manage has its own toggle here to delete everything the moment the Bot leaves instead, skipping the grace period entirely. Set this before the Bot ever leaves — once it's gone, only the bot owner can reach a server's dashboard pages at all, including this one.
Server backups
Download next to any server saves a JSON file with everything TrinketBot has about that server — message templates, moderation reasons, notification configs, logging categories, welcome messages, join roles, and more, plus history: moderation case history, ticket records, and recent notification history (each capped at a few thousand entries, so one very active server can't produce an unreasonably large file). It never includes secrets, OAuth tokens, message-report content (that stays scoped to your own moderators, per the Privacy Policy), or premium status (that's tied to the account that assigned it, not the server). Reaction roles aren't included either, because each one is tied to a specific Discord message that doesn't exist in another server, and neither are custom commands, word commands or the list of switched-off built-in commands, or the Twitch channels streamers have set up to post into the server (those belong to each streamer's own page). Nor is the History of who changed which setting, or, of the break alerts, the choice to message the server owner, how the last message went and which problems were announced.
To restore one, upload the file under Restore from a backup and choose any server you manage as the target — not just the one it came from. See what it would change then lists the file's modules, each with whether it replaces the settings the server has there or adds items, and the notes the restore would give for it, before anything is written. Tick the modules to restore (every one that would write something starts ticked), and confirm: the unticked ones stay exactly as they are. Every channel/role ID in the file is checked against the target server first; if it doesn't resolve, a channel or role with the same name is tried next (a category name only matches another category, never a same-named text channel) before finally being left blank — so the same file works three ways: restore it to the server it came from and everything reconnects by ID exactly as it was, restore it onto a server built from that server's own Discord template (below) and everything reconnects by name instead, or use it on any other server as a starting preset, where you'll just pick the channels/roles yourself afterward since neither the IDs nor the names exist there yet. A historical record (a ticket, a notification) whose own channel no longer exists is skipped rather than restored with a dangling reference — a moderation case just has that one detail cleared, since the case itself is still worth keeping.
Discord template asks Discord itself (not TrinketBot) to generate a discord.new link that recreates this server's actual channels, categories, and roles — the structure a JSON backup never touches. Follow the link yourself, in Discord's own "Create a Server → From a Template" flow, to spin up a new server built the same way; you become its owner, not the bot. It can't bring over messages, custom emojis/stickers, the server icon, or webhooks/integrations — that's a limit of Discord's template feature itself, not something TrinketBot can work around. This needs TrinketBot to have the Manage Server permission in the server you're generating from; if a server added TrinketBot before this feature existed, that permission wasn't requested automatically and the button will say so until a server admin grants it (Server Settings → Roles → TrinketBot) or re-invites the bot.
Tip: to fully clone a server — structure and all — generate its Discord template first, create the new server from that link, invite TrinketBot to it, and then restore the original server's backup there; the name-fallback matching above reconnects notification channels, log channels, and ticket roles automatically wherever the names still match. For just reusing configuration on servers you already run the same way (a support server plus a couple of community servers, say), skip the template step — download one server's backup and restore it straight into the others.
Shared setups
Share a setup, next to Download on each server, hands part of that server's settings to another server without a file. Tick the parts to share, give the setup a name and you get a code like ABCD-EFGH-JKMN. It works for 30 days, or until you revoke it, and a server can have 3, 10 or 25 codes out at once on the free, TrinketSupporter and TrinketChad plans. The page shows each code with how often it was used and how long it has left.
A code holds settings only. Members, moderation cases, ticket records, tokens, webhooks, uploaded files and ids never go into it, and the parts that belong to one account or one person are not offered at all: Twitch, Kick, YouTube, TikTok, Live status, the bot's identity and the public listing, each with the reason on the page. Channels and roles travel by name. Where a part would carry something that cannot be shared (a role button, a picture, a custom emoji, an ignored-members list), that piece is left out and the picker says so; a part that still holds something it should not is refused. The words and links you wrote in the settings (messages, feeds) are shared as they are, and anyone who has the code can read them, so read them first. Parts of a module that is not open to servers yet are offered to nobody but the bot's owner.
Use a shared setup, under Restore from a backup, takes a code and the server you want to apply it to. It shows a preview first and changes nothing: the title, what each part holds, whether it would set up something new, replace the settings you have or add to a list, which parts can be undone, and every channel or role the setup names that your server does not have (those are left unset and never created). You tick the parts to apply, and a question lists what will be replaced. Applying goes through the same restore as a backup file, so its checks and your plan's limits apply, and each module that changed is noted in its History as Shared setup <name>, where Restore puts it back for the modules that can be put back. A code that does not exist, has expired or was revoked is answered the same way for all three, and looking codes up is limited to ten a minute per account.
Sessions
Every device currently signed into your dashboard account, labeled by browser and OS (e.g. "Chrome on Windows").Revoke ends one session immediately; Log out of all other devices ends every session except the one you're currently using — useful if you ever see a device in the list you don't recognize.
Danger zone
Delete my account permanently removes your dashboard login, every session, and your linked Patreon connection, if any. It never touches any server's data — moderation cases, templates, and everything else stay exactly as they are, since that belongs to the server, not to your account.
An account that hasn't logged in for a year and has nothing active — no Patreon membership in good standing and no premium granted by hand — is also deleted automatically, the same way (servers' data is again untouched, and logging in later simply makes a new account). An account that is still doing something for you, such as a linked active Patreon membership, is never deleted for being quiet.
55. Twitch chat bot (for streamers)
TrinketBot can also work in your Twitch chat: answer commands, post timers, keep quotes, thank people for follows, subs, raids and more, and connect to Discord and the tools you stream with. It has its own login and its own pages under /channel, so it works for a streamer who has no Discord server at all — and being logged in to one doesn't log you in to the other. It runs in the cloud, so it works while your PC is off, and it's free. From the Discord dashboard it is in the account menu as Twitch chat bot, marked Twitch login.
Run a Discord server as well? Discord and Twitch together puts the two halves side by side, with a recipe for each thing you might want and a checklist for when the streamer and the server admin are two people.
Getting started
- Open /channel and press Log in with Twitch. It asks for one permission, to let TrinketBot join your chat. TrinketBot keeps your Twitch name and picture and what you set up — no password and no token of your own Twitch account.
- On the Overview, press Set it up for me to turn the bot on and add the common commands in one go — or switch the bot on yourself. TrinketBot then chats in your channel as its own Twitch account (the page names it). If Twitch won't let it join, the page says what to do — usually to log in again.
- Press Say hello in my chat to see it work, and type
!uptimeor another command yourself. Choose the prefix chat types before a command (!by default). - Tip: type
/modfollowed by the bot's name in your chat to make it a moderator. It then keeps working when your chat is followers-only, subscribers-only or in slow mode, and Twitch allows a moderator more messages.
The pages are Overview, Commands, Timers, Events, Moderation, Quotes, Connect and Together. The Overview has a checklist of what is done and what is left. Its last step, Connect Discord or another tool, ticks only when something is really connected: a linked Discord account with an events channel chosen, a web address that is switched on, or a key for other tools. Linking Discord alone doesn't tick it. Together is a read-only check of the channel and of the servers around it; it is described under Discord and Twitch together. After the pages, the header has a Docs link and, once Discord is linked, Servers, which opens the Discord dashboard. That is a separate login with Discord, and neither login brings you back to where you were.
Above the checklist the Overview has a Needs attention box: what is wrong on your own side right now, each with where to fix it, or a line saying nothing needs attention. It lists, for what you have switched on, events set to answer in chat or to log your chat while the bot is off; events set to post in Discord, or to start your server's automations, with no channel or server chosen, TrinketBot gone from the server, or your linked account no longer managing it; a Discord channel that is deleted, hidden or without Send Messages and Embed Links; events that Twitch hasn't been given permission for (Give permission); events set to go to a web address that is missing, switched off or failing; the bot not being a moderator, or your own bot account not being authorized, when a filter or a moderator command is on; commands and timers paused over your plan; a saved bot account your plan no longer covers; and the notes the bot stored when something failed, while something is still switched on that the note could be about. A problem that only TrinketBot's owner can fix says so and points to the Support server. The box is read when you open the page and when you come back to the tab; Check again looks now and asks Twitch afresh whether the bot is a moderator. It doesn't cover what a server does for your channel (that is on Together and the server's own pages), and it can't see whether Twitch is delivering events.
Your own bot account (TrinketChad)
By default the bot chats as TrinketBot's own Twitch account. With TrinketChad it can chat as your account for it — RemBot, YourChannelBot, whatever you name it — with its own name and picture, so it feels like your bot. On the Overview, Bot account:
- Make a Twitch account for your bot (an existing bot account works too). It needs a different login from yours.
- Press Make the link, then open the link in a private window where you are logged in to twitch.tv as the bot account — not as yourself. Twitch shows which account is approving. The link works once, for ten minutes, and only on the TrinketChad plan.
- Approve the permissions Twitch lists: appear as a bot, read and write chat, and moderate (timeouts, deleting messages, shoutouts, follower lookups, clips), and see which emotes it can use. The window says when it's done; the Overview notices when you come back.
- TrinketBot keeps the account's name and an encrypted token for it, used only for clips, follow-time lookups and checking which emotes the account can use — Twitch keeps the rest of the permissions it gave, and you can take them back in Twitch's Settings → Connections. Go back to TrinketBot's account on the Overview undoes it at any time and deletes the token.
- It can't be your own account: the bot ignores what its own account says, so your own commands would stop working.
- If your plan ends, your bot account stays saved but TrinketBot's own account chats until the plan is back.
- Type
/modand the bot account's name in your chat: it keeps working when your chat is followers-only or in slow mode, and it is what lets it moderate.
Commands
- A command is a name, what the bot says, who may use it (everyone, subscribers, VIPs, moderators or only you) and two cooldowns: one for the whole chat and one for each person. You are never held back by a cooldown. Start from an example fills the form with a typical one (!discord, !socials, !hug, !schedule, !rules, and !so, !announce and !clip as examples of an action and an announcement) — replace the parts that are yours. !discord and !schedule already use
{discord}and{schedule}, so there is nothing to paste, but !discord needs your invite saved on Connect first. An empty Commands page also offers Add the common commands (uptime, game, title, lurk and a deaths counter). How many you can have depends on your plan. - A response can use
{user}(who typed it),{touser}(the first word typed after the command, or the chatter),{channel},{args}(everything typed after the command) and{count}(how many times it has been used).{1},{2}and{3}are the first, second and third word typed after the command, each empty when fewer were typed (!hug Sproutwith{user} hugs {1}). Viewers can make the bot repeat what they type through{touser},{args}and{1}to{3}(cut to 100 characters), so use those only where that is fine. The bot does not repeat a viewer's link, or words that start like a command (!,?,/and the like): it says it can't — for{1}to{3}that is judged on the words the message uses. A moderator's words, and the streamer's, are repeated as they are. {counter}is a number that moderators change from chat:!deaths +,!deaths -or!deaths set 5. Anyone else just sees it.{title},{game},{viewers}and{uptime}show your stream as it is right now. While you are offline a command that uses one answers “<your name> is offline.” instead of a sentence with the words missing, and a timer stays quiet; if Twitch can't be asked, a command says it couldn't check (it never says you are offline then) and a timer stays quiet. A stream that is live but has no category set answers “<your name> hasn't set a category yet.” to a command that uses{game}(a timer that uses it stays quiet); the others of the four still work.{schedule}is your next streams, read from your Twitch schedule (the one you plan in Twitch's Creator Dashboard): up to 3, each as a time in UTC with the time left, such as Fri 9 Oct 18:00 UTC (in 2d 3h): Boss night, with long titles cut short. Chat can't show each viewer their own timezone, which is why it says UTC. A channel with no schedule, or nothing coming up, says nothing is scheduled right now. TrinketBot keeps what it read for 5 minutes however often chat asks, so a change you make on Twitch shows within about that long, and when Twitch can't be asked it uses an older reading for up to 60 minutes. If there is no reading at all, a command says I couldn't read the schedule just now. Try again in a minute. and can be used again after about 10 seconds instead of waiting out its cooldown, and a timer stays quiet that time. It needs no Discord server.- About the person who asked.
{followage}is how long they have followed your channel (“1 year 2 months”) and{accountage}how long their Twitch account has existed. They work anywhere in a command's reply, not only in a follow-time command, and the bot looks each up once and remembers it for a few minutes per person, so a chat that all types the command at once asks Twitch once each. The follow time is looked up as the bot account and needs it to be a moderator in your chat; for someone who doesn't follow, or when it can't be looked up, the bot says that instead of the reply, does nothing else the command would have done, and never says the braces. They are about the person who typed the command, so a command that uses them can't be run from another tool with your key, and a timer can't use them. - Chance, sums and dates.
{random:yes|no|maybe}says one of the choices, picked by chance each time; a choice can hold other words ({random:Hi {user}!|Welcome back!}).{math:2*(3+4)}works out a sum with numbers,+ - * / %and brackets, and words can stand in it ({math:{count}*10}); dividing by zero says “undefined”, a huge result “too big” and something that isn't a sum “invalid”, so a mistake shows in chat as a word and not as a silent command.{countdown:2026-12-31T20:00}says how long is left to a date and time in UTC, such as “3 days 4 hours”, and “now” once it has passed; write the date out in full, and a date that isn't on the calendar (a 29 February in a year that has none) can't be saved. All three also work in a timer. There is no word that fetches a web address. {discord}is the Discord invite you saved under Your Discord link for chat on Connect. A command or timer that says it can't be switched on while no link is saved, and if the link is removed later the bot says nothing for it: the bot never says the braces themselves.- Moderators can change commands in chat. Switch on Let moderators change commands in chat on the Commands page (it is off until you do, and Set it up for me leaves it off) and your moderators and you can type
!addcmd name what to say,!editcmd name the new wordsand!delcmd name, with your prefix. Anyone else gets no answer. The bot says in a line what it did or why it didn't. A command made this way is a plain reply for everyone with the usual cooldowns (5 s for everyone, 15 s per person), and it is held to the same rules as one made on this page: the name, the length, the words it may use, a date that exists,{discord}needing your saved invite, and your plan's number of commands (the bot says the plan's own limit when it is full; nothing is dropped quietly).!editcmdchanges only the words — who may use it, its cooldowns, its On switch and its other names stay — and!delcmdremoves the command like Delete does and says how many you have left. Commands that do more than answer (an action, an announcement) and ones only you may use are changed on this page, or by you in chat.addcmd,editcmdanddelcmdcan't be command names, and a mod can't make a command that bans or shouts. The command shows Last changed in chat by the moderator's Twitch name and the time, until you save it on this page; see the privacy page for what is kept. - Other names. A command can answer to up to five other names (
!discordalso as!dcand!invite) — fill Other names in the form. They do exactly what the command does and share its cooldowns, its counter and its use count, so using one holds back the rest. A name belongs to one command in your channel, whether it is a command's own name or another name: the form tells you which one is taken.!commandslists the command by its own name only. !commandsand!quote(with!addquoteand!delquotefor moderators) are the built-in commands: a command of your own with the same name takes their place, and each has an off switch (Answer !commands with a list on the Commands page, Answer !quote on the Quotes page).!addcmd,!editcmdand!delcmdare built in too once you switch them on, and those three names can't be used for commands of your own. Every other command is one of yours, with its own On switch.- What it does. Besides answering, a command can shout out a channel, time someone out, ban or unban them, let someone post links, make a clip or say how long someone has followed (more under Moderation). The action happens first; then the bot says what you wrote, which can use what the action found out:
{touser}(the person, as Twitch spells their name),{lastgame},{duration},{reason},{clip}and{followage}. If the action can't be done, the bot says why instead. A command whose action acts on someone is only ever for moderators and you — the form doesn't offer less, and the server refuses it. - Say it as an announcement. A command can answer with a highlighted Twitch announcement (what
/announcemakes) in the channel's colour, blue, green, orange or purple. That needs the bot to be a moderator; when it isn't, the words go out as a normal message instead. An announcement that repeats what someone typed ({args},{touser}) is for moderators too, so a viewer can't make the bot shout whatever they like. - Mixes. Because an action and an announcement are two separate settings, one command can do both:
!so namewith the action Shout out a channel, announced, saying Go and check out {touser}!, gives Twitch's shoutout card and an announcement in one. Add the moderator commands creates ready-made versions of all of them to change; make as many of your own as you like. - Emotes. An emote is its name typed between spaces (
remHi), and the Add an emote button under a message lists your channel's emotes and Twitch's global ones — press one and it goes in at the cursor. See Emotes and the bot's subscription.
Timers
Messages the bot posts on its own, every 5 to 180 minutes: a reminder, your Discord link, your schedule. A timer waits for chat to talk (a number of messages since it last spoke, so it never talks to an empty room) and, unless you turn it off, only speaks while you're live. At most one timer speaks per channel at a time, and a restart doesn't make every timer talk at once. A timer can use {channel}, the stream facts above, {schedule}, {discord} and {random:…}, {math:…} and {countdown:…}. A timer that says {discord} while no link is saved, or {schedule} while Twitch can't be asked and nothing recent is remembered, says nothing that time and tries again after its next interval; it never says the braces. Start from an example gives you a hydrate reminder, a follow reminder, your Discord invite, your next streams and more.
Quotes
Turn on !quote on the Quotes page. Chat asks for a random one, or one by number (!quote 3); moderators add with !quote add <text> (or !addquote <text>) and remove with !quote del 3 (or !delquote 3). You can also add and remove them on the page. Numbers aren't reused, so #7 always means the same quote.
Events
A thank-you in chat, a post in Discord, a nudge to your server's automations and/or a message to a web address when someone follows, subscribes, resubscribes, gifts subs, cheers bits, raids you, starts a hype train or redeems a channel point reward. Each event has its own words (with its own {variables}, listed under it) and a Send a test button that sends a made-up one. A clip the bot makes has an event of its own, below.
- Permissions, one at a time. Twitch only shares follows, subs, cheers, hype trains and rewards after you allow each. TrinketBot asks only for the event you switch on, with a Give permission button that takes you to Twitch and back; raids need none. Planning to use several? One link gives permission for all of them at once. If you take a permission back on Twitch, the event says so and asks again.
- A burst — a follow bot, a big gift — is announced once, not a hundred times, and a gifted sub is announced by the gift, not once more for each recipient.
- What a viewer types along with an event (
{message}of a resub or a cheer,{input}of a reward) is held to the same rule as{args}: the bot does not say a link, or words that start like a command, in your chat; it leaves that part out and says the rest of the line, so the thank-you stays. Your own words are said as they are. Discord's post shows what was written, with links shown but not clickable and mentions made harmless. - Where an event goes: “Say it in my chat” needs the bot on; “Post it in Discord” and “Send it to my web address” need the setup on the Connect page; “Let my server's automations react” needs a Discord server chosen there. Any mix works.
- Going live and going offline. Two events of their own, off until you switch them on, said in your chat only and needing no permission. The defaults are {channel} is live: {title} ({game}) and {channel} just went offline. Thanks for watching!; write your own words.
{title}and{game}are read from your channel's information on Twitch when the stream starts, and when Twitch can't say, the bot says {channel} is live! and no more. A stream that drops and comes back within three minutes counts as one broadcast, so neither line is said again. They are not posted in Discord, to your web address or to your server's automations, because a server's own go-live alert (and its ended alert and stream recap) on the Twitch page of the server's dashboard already posts there for the same two moments, and nothing else speaks in your Twitch chat then, so the two do not repeat each other. A rerun, a playlist or a watch party is not the streamer going live. - The end of a hype train, a watch streak and a moderator's anniversary. Three more events, off until you switch them on and said in your chat only. Hype train ended says how far the train got (
{level},{total}points) and asks for the same permission as the start of a hype train. Watch streak shared thanks a viewer who shares their watch streak on Twitch ({user},{streak}streams in a row,{points}channel points it earned), and Moderator anniversary thanks a moderator on their modiversary ({user},{months}months); those two need no permission beyond the one you gave when you logged in. Only the viewer's Twitch name is used in the line, and nothing about them is kept. A watch streak or an anniversary in another channel of a Twitch shared chat session is not thanked in yours. - A goal reached, poll results, prediction results, an ad break and a charity milestone. Five more events, off until you switch them on and said in your chat only. Each asks for its own permission, with a Give permission button, only when you switch it on, so nothing changes for anyone who does not use them. Goal reached says that a Creator Goal was reached (
{target}and what it counted,{kind}, and{goal}, its description); a goal that ended unreached says nothing. Poll results says which choice won ({winner},{votes}of{total}), says a tie as a tie, and says nothing for a poll nobody voted in. Prediction results says which outcome was right ({outcome},{winners}people sharing{pool}channel points); a cancelled prediction says nothing. Ad break starting says that one starts and for how long ({duration}); viewers may see the ads a little later and subscribers may see none. Charity milestone says when a charity campaign passes 25, 50, 75 and 100 percent of its goal ({percent},{raised}of{target},{charity}), once each; it names no donor, and after a restart in the middle of a campaign it may say the milestone the campaign is at once more. These only read from Twitch: the bot starts no poll or prediction and changes nothing there. What a poll, goal or prediction says is held to the same rule as a viewer's words: a link, or words that start like a command, are left out of the line. - Run a command for a reward. Under Channel point reward, Rewards that run a command ties a reward, by its title, to one of your commands: when a viewer redeems it, the bot runs the command for them as if they had typed it, and what they type with the reward becomes the words after the command (
{args},{1}…). It follows the same rules as chat: the command's own cooldowns, its On switch, your plan's limit, and the bot not repeating a viewer's link. Only a command everyone may use can be chosen, because Twitch's notice of a redemption doesn't say who is a moderator, so the redeemer counts as anyone — except you, who count as yourself. TrinketBot can't read your reward list (that takes your own login, which it doesn't keep), so type the title as it appears on Twitch; capitals and spaces don't matter, and renaming the reward on Twitch means entering the new title here. It needs the reward event's permission (Give permission) but not the event itself switched on, and up to 25 rewards can be tied. The viewer's points are spent whatever the command does, so set its cooldowns to 0 if every redemption should get its answer. - Let my server's automations react is a switch on the follow, subscribe, resub, gift, cheer, hype train and reward events (not on raids, the clip card or the Twitch log). It hands the event to the Automations of the Discord server you chose on Connect, so someone who manages that server can write a rule that starts from it; nothing happens until a rule there does. Each event still needs its own Twitch permission, as above. Each time an event is handed over, TrinketBot asks Discord whether your linked account can still manage the server, and hands nothing over if it can't; it asks nothing when no rule there starts from the event. A rule learns the viewer's name, the tier and the amount (bits, gifted subs, months, hype train level, reward and its cost), and never what a viewer wrote. Choosing a different server turns the switch off on every event, and so does choosing a server again after your channel was removed from it, so each server is agreed to on its own. Turn all off is on Connect, under the go-live alert, which also shows for how many events it is on. Send a test only says whether a rule there starts from the event and runs nothing: use Send a test on the rule itself. The server's admins see on its Twitch page which events you hand over, and can remove your channel. The steps for you and for the person who writes the rule are in Discord and Twitch together.
- Clip made with the bot is the one event that doesn't come from Twitch: it happens when the bot makes a clip, from a command with the Make a clip action or a button that uses your key. It posts a card for the clip in your Discord channel as soon as Twitch has the clip, so it needs Discord linked and a channel chosen. It has no words for chat (the command's own reply is that), no web address and no Twitch permission. Say who asked for it is on by default and adds a line, “Requested in chat by” and the viewer's name, to the card in your own channel; it is left out when you asked yourself, and the name never goes on the clip on Twitch or on a server's card. Send a test posts a made-up card. If the clip isn't ready after the wait described under Moderation, or the channel has already had 20 clips made with the bot that hour, your channel gets no card for that clip. A server whose main Twitch channel is yours, with Post new clips on, gets its card whether or not you switch this on. Clips made with Twitch's own button are not included.
- Raids. If your server's Raids & clips already announces raids in the same channel you chose here, the Discord post for Incoming raid is skipped and the page says so; chat and your web address still get it. If the two go to different channels you get both cards, and the page offers a Turn this one off button. Raids under that server's Smallest raid, and servers that only announce raids you send, don't count, so this post is made. Send a test still posts the card, and adds a line when a real raid would be skipped. Only the two built-in cards are de-duplicated: a Discord webhook used as your web address can still add a second post.
Moderation: commands and filters
On the Moderation page you can let the bot help keep your chat tidy. The filters are off until you switch them on, the moderator commands only exist once you add them, and none of it works until the bot's account is a moderator in your chat. The top of the page shows the two things it needs — allowed to moderate and a moderator in your chat — and a Check again button after you type /mod and the bot's name.
- Moderator commands are ordinary commands with an action (see Commands). Add the moderator commands on the Commands or Moderation page creates a ready-made set you can change or delete:
!so name(a Twitch shoutout and an announcement in one),!announce text,!to name 10m reason(30s,10m,2h,1d, up to two weeks; ten minutes if you don't say),!ban name reason,!unban name,!permit name(lets that person post links for a minute),!clipand!followage. Each has its own On switch on the Moderation page, and every word they say can be rewritten. The bot won't time out or ban you, the moderator who asked, or itself, and the reason Twitch shows names the moderator who asked. - What a shoutout does: Twitch's card only works while the other channel is live and not too often; when Twitch won't, the command's own words still go out, so a streamer who isn't live gets the announcement without the card. Follow time needs the bot to be a moderator, since Twitch only shows that to moderators.
- What a clip does: the bot makes a clip of the live stream and
{clip}becomes its link, after at most 12 seconds, whether or not Twitch has finished the clip. When it hasn't, a note in brackets follows the link (“Twitch hasn't finished it, so the link may not work yet”). A moderator, or you, can type a title after the command and it becomes the clip's title; if Twitch doesn't accept the title, the clip is made without one and the note says so. Words from anyone else are ignored, because a clip's title is public. If Twitch itself doesn't answer, the command can be used again after about 10 seconds instead of waiting out its cooldown; when Twitch says no (the channel has to be live, for one), the bot says why and the full cooldown stays. A card for the clip is also posted in Discord, as the next point says. - Safety actions. A command can also warn someone, turn Shield Mode on or off, or set slow mode, followers-only, emote-only or subscribers-only mode. They are for moderators and you only, whatever the command says, and the bot says in chat what it did (or why it couldn't) even when the command has no words of its own.
!warn name reasonsends the person a warning they must acknowledge before they can chat again (never you, the one who asked, or the bot);!shield onand!shield offswitch the protections you set up on Twitch (Creator Dashboard → Safety);!slow 30sets 3 to 120 seconds between messages;!followers 10lets in those who have followed 10 minutes (30m,2h,1d,1w, up to 3 months;0is any follower);!emoteonly onand!subonly on;offends a mode. Their reply can use{state}(on or off) and{duration}. Each is also a line in your Twitch log, if you have it on. They need three more permissions of the bot's account than moderating did (warnings, chat settings and Shield Mode): an account authorized earlier keeps moderating and is told, on the Moderation page and in the Overview's list, to be authorized again before these do anything. They use TrinketBot's app token, like timeouts and bans, with the permission Twitch holds for that account; none of your own tokens is involved. - Raid protection. On the Moderation page, off until you switch it on. When a raid of at least the number of viewers you choose (10 to start with) arrives, the bot puts your chat in the mode you choose — Shield Mode, followers-only (any follower, or followers of a time you set) or slow mode (3 to 120 seconds) — and puts it back after 1 to 60 minutes (10 to start with). It looks at your chat first and changes only what it must: a mode that is already as strict is left alone and not turned off afterwards, and when the time is up it puts back only a mode that still reads as it left it, so something you changed yourself in the meantime stays. A second raid while it is on holds it longer instead of starting again. The page says when it is on and until when, and the Discord server you linked gets one line when it starts and one when it ends. It needs the same three permissions of the bot's account as the safety actions above; without them it does nothing at all and the page and the Overview's list tell you to authorize the account again. What it changed is saved before it changes it, so a restart of TrinketBot does not leave your chat in a mode: it is put back within half a minute of its time, and a time that passed while the bot was down is done as soon as it is back.
- The clip card in Discord. As soon as Twitch has the clip, TrinketBot posts a card for it in each server whose main Twitch channel is yours, with Post new clips and its card switched on and a clips channel TrinketBot can post in (see Raids & clips), without the name of the person who asked, and in your own Discord channel if you switch on Clip made with the bot on the Events page. TrinketBot waits up to 12 seconds for Twitch to finish the clip before it replies, then keeps asking every 5 seconds for up to 40 seconds more; after that no card is posted from the command. A card is posted for no more than 20 clips made with the bot an hour for a channel; past that, the command still makes the clip but posts no card for it. The card is made from what Twitch says about the clip, and a command that is used through your key (a Stream Deck button, for example) posts it the same way.
- Filters look at every message from anyone who isn't you or a moderator: links (with a list of sites that are always fine —
twitch.tvcoversclips.twitch.tv— and!permitfor one-offs), capital letters (a share of a long message), symbols (ASCII art; punctuation, emoji and every language's letters are fine), emote spam, repeats (the same message within 30 seconds, one character 15 times, one word 8 times) and blocked words. - What a filter does: the first time, it deletes the message and (if you like) tells the chatter why. If they do it again within ten minutes they are timed out for the length you chose, and the next slip starts with a warning again. A message a filter removed isn't run as a command. You can leave VIPs and subscribers alone too.
- Blocked words are one per line, in any capitals. A word matches whole words —
baddoesn't catch “badminton”;*means “any letters”, sobad*does and*bad*catches it anywhere. How many words and always-fine sites you can have depends on your plan; past the limit the extra ones are kept, not used. - Everything is also in your Twitch log (if you have it on) and in Twitch's own moderation log, under the bot account's name. You are responsible for the rules you set — see the Terms.
Emotes and the bot's subscription
Anything the bot says — a command, a timer, an event message — can contain emotes: an emote is just its name between spaces (Kappa, remHi), and Twitch turns it into the picture. Under every message box, Add an emote opens a picker with your channel's emotes (by subscriber tier, Bits and follower) and Twitch's global ones, with a search box; pressing one puts its name at the cursor. Third-party emotes (7TV, BTTV, FFZ) are not Twitch emotes and the bot can't send them.
- Global emotes always work. A channel's own emotes work for the bot only if its account has earned them: a subscriber emote needs a subscription to your channel (a tier-2 emote needs tier 2 or higher), a Bits emote needs the Bits that unlock it, and a follower emote needs the bot account to follow you. An emote the bot can't use just shows as its name in chat.
- Giving the bot a subscription. Twitch doesn't let you subscribe in your own channel, so ask a moderator, a friend or a second account of yours to open your channel, choose Subscribe → Gift a Sub and type the bot's name. A gifted sub lasts a month, so renew it now and then. With your own bot account (TrinketChad) you can also log in to Twitch as that account and subscribe with it — a Twitch Prime sub works.
- The picker shows what works. Emotes the bot can't use yet carry a lock, and a note at the top says how many. This needs the bot account to have allowed TrinketBot to see its own emotes: for your own bot account, authorize it again on the Moderation page; for TrinketBot's own account that is TrinketBot's owner's to do, and until then the picker simply doesn't mark locks. Press Check again after a gift.
The Twitch log in Discord
On the Events page, under Twitch log, TrinketBot can keep a record of what happens in your chat in a Discord channel — the audit trail other bots call a moderation log:
- Bans and timeouts — who, by which moderator, for how long and why. Unbans too.
- Deleted messages — whose, and what it said if the bot saw it written in the last 15 minutes (kept only in memory, never stored).
- Chat cleared, and every chat message if you want the whole chat. The bot has to be on for that, since that is how it sees your chat.
Set it up on Connect: link Discord, choose the events' channel and — recommended — a separate channel for the log, since chat can be busy. Then switch on Log it in Discord for each part on the Events page and press Send a test. Bans and unbans ask you for one Twitch permission (channel:moderate); the rest need none. The same lines can also go to your web address as JSON.
- How it is posted: as lines of text with a time that each reader sees in their own timezone, grouped into one Discord message every few seconds — a busy chat or a raid doesn't flood Discord and nothing is dropped for being too fast (at most 300 lines can wait; beyond that the log says how many it skipped). Links don't make previews and nobody gets pinged.
- Think about who can read that channel: the log copies what viewers write into your Discord server, where Discord and your server's rules apply. TrinketBot checks, at least once a minute, that your linked account can still manage the server.
- A timeout ending is not an event Twitch sends, so the log shows the timeout but not its end. Chat from while the bot was off isn't seen.
Connect: Discord and other tools
Everything on Connect is optional — the chat bot works fine without it. It has four parts. Pick the one that matches what you want to do.
Show my events in Discord
There are two ways. Option A is the most convenient; option B needs no linking and works in servers TrinketBot isn't in.
A. Link your Discord account
- On Connect, press Link my Discord account. Discord opens and shows which of your accounts is being linked. Only your name is shared — nothing else.
- Approve it. You come straight back to Connect, now linked (the page shows the account's name).
- Choose a server and a channel. Only servers that your linked account manages (Manage Server) and TrinketBot is in are listed. If a server already gets your go-live alerts, TrinketBot suggests that same channel with one button. If TrinketBot isn't in any server your linked account manages, Connect shows an Add TrinketBot to a server button, which opens Discord's invite in a new tab, and a Check again button to press afterwards.
- On the Events page, switch on Post it in Discord for the events you want, and press Send a test.
- Optional: the go-live alert. Once a server and channel are chosen, a Go-live alert card appears for that server. It starts on your events channel, and one press of Turn on the go-live alert makes TrinketBot post in the server when you go live, as the server's own Twitch page would. Send a test shows it and Turn off switches it off. It uses your Twitch login and the account you linked, so there is nothing to type. A server has one main Twitch channel: if it already has another, the card says so and offers nothing. A new alert starts on mark it as ended when the stream is over. It doesn't set up Live status, Raids & clips or the schedule; those are set on the server's own pages.
- Optional: your server's automations. Under the go-live alert, a panel named after the server (Automations in …) shows whether your events are handed to that server's Automations: Off, or On for N events with their names. It is switched on one event at a time on the Events page, because Twitch asks for a permission for each. Turn all off is here. A warning appears when an event is switched on but Twitch hasn't been given its permission yet.
How it stays safe: linking needs you to approve on Discord's own screen while logged in to the streamer area, so nobody can link an account they don't hold. For events, TrinketBot checks every time it posts that the linked account can still manage that server; for the Twitch log, which can post every few seconds, it checks at least once a minute. It needs View Channel, Send Messages and Embed Links in the channel; if something is missing the event says what. Unlink Discord or Stop posting ends those posts at once.
The go-live alert is different. Manage Server is checked once, when you switch it on, and then the alert belongs to the server, the same connection a server admin makes on the dashboard. It keeps working if you unlink Discord, lose Manage Server there or delete your channel account, until someone who manages the server switches it off on the server's Twitch page. On Connect, Turn off only switches it off. Turning it off also stops Live status for that server, since Live status follows the alert's switch.
The server's admins can see it. Anyone who manages the server sees your channel on its Twitch page, under Streamers posting here, with the Discord channel and which events and log parts are switched on (including whether every chat message is logged). They can remove your channel, and you can choose the server again as long as your linked account still manages it. A Discord webhook used as your web address is not listed.
B. Paste a Discord webhook
- In Discord: Server Settings → Integrations → Webhooks → New Webhook (you need the Manage Webhooks permission). Pick the channel it posts in.
- Press Copy Webhook URL, then paste it into Send events to a web address on Connect and press Save the address.
- Press Send a test, then switch on Send it to my web address for the events you want.
Your Discord link for chat
{discord} in a command or a timer says an invite you save here, so chat always gets your current link. Nothing needs to be linked for this, and it works without a Discord server of your own to manage: it is just a public invite link.
- On Connect, find Your Discord link for chat, paste your invite (it has to be a Discord invite link, one that starts with
discord.ggordiscord.com/invite) and press Save link. TrinketBot asks Discord about it first and turns down one Discord doesn't know. What is kept is the plain link. If your linked Discord account has chosen a server that has its own short link, Use it takes that instead; it has no end date of its own. - Make a command (the !discord example starts from it) or a timer (the Discord invite example) that says
{discord}. A command or timer that says it can't be switched on while no link is saved, and removing the link later makes them say nothing until you save another.
Is it still good? Each time the card is opened, and when you press Check again, TrinketBot asks Discord about the saved link (only the invite code is sent) and says which of these it is: it works, with its end date if it has one; it expires soon; Discord doesn't know it any more (it expired, was deleted or ran out of uses), so chat is saying a dead link; the server's invite pause is on, so nobody can join by it until the pause ends (that is Discord's own pause, which Disable DMs & invites, Raid Lockdown or an admin can switch on, and TrinketBot can only see it for a server it is in); the code now leads to a different server than when you saved it; or it couldn't be checked, which says nothing either way. Nothing is stored about the check: it is read live. Commands and timers that use the word also show a warning when no link is saved.
A link that never expires. In Discord, open your server's invite window (the Invite People button), open the link's settings (Discord calls it Edit invite link), set it to expire Never with No limit on uses, make the link, and paste it on Connect. Discord changes its menus from time to time, so the names may differ a little. A link that expires or has a use limit stops working for everyone after that, and chat keeps saying it until you replace it. The saved link is kept with your channel until you remove it or delete your channel account; unlinking Discord doesn't remove it.
Send events to another tool (web address)
One address of yours that each event you choose is sent to. Besides a Discord webhook it can be any https address that receives data: a Make custom webhook, a Zapier “Catch Hook” (a paid-plan feature at the time of writing), an n8n Webhook node, or a small server of your own. Those get the event as signed JSON:
- The body has
id(the same if it is ever sent twice),type(channel.follow,channel.cheer…),createdAt,channelId,testanddata— the event's own values (user,bits,reward…, the same names as the variables on the Events page). - Headers
X-Trinket-TimestampandX-Trinket-Signature(sha256=and the HMAC-SHA256, in hex, of the timestamp, a dot and the raw body, made with your signing secret) let a receiver check it came from TrinketBot. The Connect page has the secret and a ready-made check for Node.js. Checking is optional for something that only shows a message. - The address can carry a secret token, so TrinketBot never shows it back — only where it leads. Addresses inside a private network are refused, and TrinketBot doesn't follow redirects. If deliveries keep failing, the address is switched off and says why; send a test, fix the receiver and switch it back on.
Control the bot from other tools
Make the bot say something, or run one of your commands, from a button or a script — without typing in chat. Your tool sends a request to an address that contains a key only you have.
- On Connect, press Make a key. Copy it now: it is shown once, and only a scrambled version is kept, so a lost key is replaced, not recovered. Try it now sends a real test message to your chat.
- Pick your tool in the tabs below it. Each shows the exact steps with your key already in the address:
- Streamer.bot — a Core → Network → Fetch URL sub-action (it only sends GET requests, which is why the address carries the words).
- Stream Deck — a Website action with GET request in background turned on.
- Touch Portal, Mix It Up and similar — their HTTP or web request action, as GET or POST.
- Your own script — curl, PowerShell, Python and JavaScript examples.
- Zapier, Make, IFTTT — their HTTP request step (some are paid features; check your plan).
- From your Discord server — Make, Zapier or n8n turns a webhook of your Discord server (
stream.started,video.published,feed.item) into a say request, so your Twitch chat repeats what the server announces. Let a go-live through only whendata.platformis nottwitch, or your own Twitch go-live comes back into your chat; put the words in asayquery parameter; and never sendmember.*events to chat. Whoever builds this holds your key: build it yourself, or make a new key afterwards.
- Send
{"say": "text"}to say anything (up to 400 characters; a longer text is turned down with a 400, not cut, and it is said exactly as given, with no{variables}filled in), or{"command": "name"}to run one of your commands as you — its words are filled in; a counter shows but isn't changed. For a tool that can only open an address, the same words work as?say=…and?command=…(write%20for a space). A command that makes a clip answers with its link, asclip, in the JSON, and withclipReady, which isfalsewhen Twitch hadn't finished the clip after the wait. What you send asargswith a clip command becomes the clip's title, since the key acts as you. It posts the card in Discord too, without the name of anyone (see Moderation). A command that says{discord}while no link is saved is not run and answers 409, and one that says{schedule}while Twitch can't be asked answers 502; both are decided before any clip is made.
Good to know: the bot must be on; what it says follows the usual limits (one line, at most 18 messages in 30 seconds from the chat account, which other channels share); one key may make 60 requests a minute, and a command that makes a clip waits 30 seconds between clips; the key is part of the address, so keep it off stream and out of screenshots — any tool you paste it into can read it, and so can anyone who builds something in that tool for you. If it leaks, or someone else built with it, make a new key and the old one stops working at once. Nightbot and StreamElements print whatever an address answers into chat, so a deck, Streamer.bot or a script suits this better. Ideas: a “Starting soon” button, a BRB scene that runs your !brb command, an upload announcement from Make or Zapier.
Plans and limits
The chat bot is free, and so are events, the Discord link, the web address and the key for other tools. What a plan changes is how many commands, timers, quotes, blocked words and always-fine sites a channel can have — the moderation filters are free on every plan, and the moderator commands are ordinary commands, so they count toward the command limit like any other:
| What you can have | Free | TrinketSupporter | TrinketChad |
|---|---|---|---|
| Chat commands | 20 | 60 | 150 |
| Timers | 5 | 15 | 40 |
| Quotes | 200 | 1,000 | 5,000 |
| Blocked words | 25 | 100 | 300 |
| Always-fine sites for the link filter | 10 | 40 | 100 |
- A channel takes the plan of the Discord account you link on the Connect page (a Patreon pledge or a Discord subscription on that account — see Premium & Patreon). No server slot is needed, and with no Discord linked the channel is on the free plan. The Overview shows your plan, what is in use and what each plan allows.
- Nothing is ever deleted by a plan. If your plan ends or you unlink Discord and you are over a limit, the newest commands and timers past it are paused — saved, marked as paused, not answered or posted — and come back the moment there is room again (or your plan returns). You can't add more until you are under the limit; quotes past it stay readable.
- TrinketChad also lets the bot chat as your own Twitch account (see Your own bot account).
- The limits are about volume, never about safety: cooldowns, permissions, the message limit and every moderation tool are the same on every plan.
Limits and safety
- In a Twitch shared chat session, what it says (an answer, a timer, an event line) stays in your own chat, and it ignores what is written in the other channels of the session. It never answers itself, and never posts more than 18 messages in 30 seconds from one chat account (every channel that account speaks in shares them), waits a second between two messages in a channel (two between announcements, which count as messages too), and holds back timers and filter warnings before answers, so a busy chat can't get it muted. When it has held messages back, the Overview's Needs attention box says so; if Twitch itself answers that its rate limit was exceeded, the bot stops sending as that chat account until Twitch allows it again and the box says that it was Twitch's rate limit. Everything it says is one line, never starts with a slash, and what a viewer typed is cut to 100 characters.
- A command, timer, quote, event or key request can only change your channel's bot; there is no way to reach another streamer's.
- When it moderates, it never acts on you, a moderator who asks it to, or itself, ignores you and your moderators in its filters, and does at most 60 things in 30 seconds in a chat, so a raid of spam can't make it run away.
- It speaks as one Twitch account of its own, using permissions that you and that account gave TrinketBot on Twitch. You can remove TrinketBot any time in Twitch's Settings → Connections; the bot then leaves your chat and its page says so.
If something doesn't work
- The bot is on but never answers: check the command's name, prefix and who may use it — you are never held back by a cooldown, but everyone else is. If your chat is followers-only or subscribers-only, make the bot a moderator (
/modand its name). - “Twitch says the permission isn't in place yet”: log in with Twitch again from the Overview and turn the bot back on.
- The Overview shows a Needs attention box: each line says what is wrong and has a link to where it is put right (Give permission goes to Twitch). A line that says only TrinketBot's owner can fix it points to the Support server. Fix the thing, then press Check again. The box lists what is switched on and can't work, plus the notes the bot stored; it doesn't list servers (that is Together) and can't see whether Twitch is delivering events.
- An event shows a yellow note: it names the permission that is missing — press Give permission. If Twitch ended the subscription it says that instead. The Overview lists the note too, but only while something is still switched on that it could be about. A note about posting to Discord goes away when a Send a test post goes through.
- A key request answers 409 or “bot is turned off”: turn the bot on. A 409 can also say the command uses
{discord}and no Discord link is saved: save one on Connect. 404 “Unknown key”: the key is wrong or was replaced; make a new one. - A Discord post doesn't arrive: the event says why — usually the linked account can't manage that server any more, or TrinketBot can't see or post in that channel. A server's admin may also have removed your channel from the server (then Connect shows no server chosen). Choose the server and channel again on Connect.
- The go-live alert doesn't arrive: the card on Connect shows the last error (a channel TrinketBot can't see, a deleted channel, or a missing permission), and Send a test shows the reason. Turn off only switches it off. For events and the Twitch log, see the line above.
- A key request answers 429: the key made more than 60 requests in a minute, a clip was made less than 30 seconds ago, or the bot has already said as much as its chat account may (18 messages in 30 seconds, shared with the other channels that account speaks in), or Twitch itself said its rate limit was exceeded and the account is waiting until Twitch allows it again. The first two say how long to wait; for the chat ones, wait a few seconds (or up to half a minute after Twitch's own). A plain “slow down” means the address your tool calls from is very busy: try again in a minute.
- The Twitch log is empty: check that the part is switched on and saved, that Connect shows a Discord channel (or a log channel), that the bot is on for the chat log, and press Send a test — a problem shows in words on that card. Bans and unbans need the moderation permission.
- Moderation says the bot isn't a moderator, or isn't allowed to moderate: the Moderation page says which. Type
/modand the bot's name in your chat and press Check again; once the bot is a moderator, that also clears the yellow note on the page. With your own bot account, press Authorize there and approve again. For TrinketBot's own account, only TrinketBot's owner can allow it. - An emote shows as plain text in chat: the bot can't use it. Check the lock in the emote picker: a subscriber emote needs a subscription to your channel for the bot account, a follower emote needs it to follow you. See Emotes and the bot's subscription.
- A filter removed something it shouldn't, or doesn't catch something: raise the share or length it looks at, add the site to the always-fine list, or loosen a blocked word (
badinstead of*bad*). The Twitch log shows what it removed. - The bot account doesn't chat as expected: the Overview shows who it chats as. “Twitch won't let your bot account speak” means the account's permission is gone — make a new link and approve again.
- A web address stopped working: Connect shows the last error, and the Overview lists it while events are set to go there. Send a test; once it works, switch the address back on.
- A command says nothing, or a timer is quiet, and it says
{discord}: no Discord link is saved, so the bot says nothing rather than the braces. Save it under Your Discord link for chat on Connect, which also says whether the saved link still works, is paused, or leads to another server. The bot says “I couldn't read the schedule just now”: Twitch didn't answer for{schedule}; try again in a minute. - The clip command answers in chat but no card appears in Discord: a card goes to servers whose main Twitch channel is yours, with Post new clips and the server's card switched on, and to your own Discord channel if Clip made with the bot is on with a channel chosen. The command posts no card when the clip wasn't ready after the waits described under Moderation, or after 20 clips made with the bot in an hour, and your own Discord channel gets none for that clip. The Together page shows each server's clip row.
- Anything else: the Support link at the top of every streamer page goes to the TrinketBot Support server, where you can ask.
Your data
Delete my channel account on the Overview removes the bot from your chat and deletes what TrinketBot holds about your channel: settings, commands, timers, quotes, events, the Discord link, the Discord invite you saved for chat, the web address and its secret, and the key. Go-live alerts that Discord servers have set up for your channel, including one you switched on from Connect, belong to the server and stay until that server's admin removes them. It doesn't store what is said in your chat, and a token kept for your own bot account is deleted with it. An account that hasn't logged in for a year, whose bot is off and with no event switched on, is deleted automatically — one that is still working for you is never touched. The Privacy Policy lists exactly what is kept.
56. Discord and Twitch together
TrinketBot has two halves, and neither needs the other. The Discord bot works for a server: you set it up on the server's dashboard, with a Discord login, and it covers go-live alerts, Live status, raids, clips, the schedule, moderation and the rest of this page. The Twitch chat bot works for a Twitch channel: you set it up in the streamer area, with a Twitch login, and it covers commands, timers, events, chat moderation and the Twitch log. This section is for when you use both, or when the streamer and the person who runs the server are two people.
Each recipe says where to click, what to expect and what to check if it doesn't work. The two areas have separate logins, and neither brings you back to where you were, so a link that crosses over says which login it will ask for. Short answers are in the FAQ. When it is set up, or after a hand-off, the streamer area's Together tab reads it all back and says what is stuck: see Check that it all works.
Who does what
Everything in this table is free; a plan only changes how many of some things you can have (see Limits in one place). The speeds are what TrinketBot waits and how often it looks, not something measured on a live stream, so read them as “usually”.
| Job | Set up in | Login | How soon | Plan |
|---|---|---|---|---|
| Go-live alert for a Twitch channel | The server's dashboard, Twitch. Or the streamer's own page, Connect, once Discord is linked | Discord. Or Twitch, with a Discord account linked | Usually within a minute of the stream starting | Free |
| Go-live alert for a Kick channel | The server's dashboard, Kick | Discord | Within seconds, as Kick tells TrinketBot | Free |
| Go-live alert and new uploads for a YouTube channel | The server's dashboard, YouTube | Discord | A few minutes: YouTube is looked at every 5 minutes | Free |
| Marking the alert as ended afterwards. Optionally with the stream's peak viewers, and on Twitch its best clips | The server's dashboard, the platform's page, When the stream ends | Discord | About 2 minutes after a Twitch or Kick stream ends. YouTube once the stream is listed as a replay | Free |
| A Live role and a voice channel status | The server's dashboard, Live status | Discord | Starts with the stream, and ends a couple of minutes after it | Free |
| Raid cards, in either direction, with a smallest size | The server's dashboard, Raids & clips | Discord | As Twitch reports the raid | Free |
| A thank-you in chat for an incoming raid, and optionally a card in Discord | The streamer's page, Events, Incoming raid | Twitch. Linking Discord is only for the card | As Twitch reports the raid | Free |
| A card in Discord for each new clip | The server's dashboard, Raids & clips, Post new clips | Discord | 1.5 to 6.5 minutes after the clip is made, usually. A clip made with the clip command in chat is posted as soon as Twitch has finished it | Free |
| A weekly post of the most-watched clips | The server's dashboard, Raids & clips, Most-watched clips | Discord | At the chosen day and hour (UTC), within about 5 minutes. Within 12 hours if TrinketBot was down | Free |
| Making a clip from chat, with a card for it in Discord | The streamer's page, Commands, the clip command. The card goes to servers that follow the channel with Post new clips on, and to the streamer's own Discord channel if Events has it on | Twitch. Linking Discord is only for the card in your own channel | The chat reply within about 12 seconds: TrinketBot waits that long for Twitch to finish the clip. The card as soon as Twitch has it: TrinketBot asks again every 5 seconds for up to 40 seconds more | Free, more room on a plan |
| Your own message, role ping or webhook for a raid or a clip | The server's dashboard, Automations (or Webhooks), with Raids & clips switched on. A ready-made rule fills in the first steps | Discord | A raid as Twitch reports it. A clip as it is for the clip card | Free, more room on a plan |
| The Twitch schedule as Discord events and a weekly post | The server's dashboard, Stream schedule | Discord | Read every 15 minutes | Free |
| Thank-yous for follows, subs, gifts, cheers, hype trains and rewards, in chat, in Discord or at a web address | The streamer's page, Events and Connect | Twitch. Linking Discord is only for the Discord post | As Twitch reports them | Free |
| Your server's automations reacting to your follows, subs, gifts, cheers, hype trains and rewards | The streamer's page, Events (a switch for each event), then a rule on the server's Automations page | Twitch for the switch, with a Discord account linked that manages the server. Discord for the rule | As Twitch reports them. Follows less than 10 seconds apart count as one, and so do hype trains less than 60 seconds apart | Free, more room on a plan |
| The Twitch log: bans, timeouts, deleted messages and, if you want, all of chat, in Discord | The streamer's page, Events and Connect | Twitch, with a Discord account linked | Posted in groups every few seconds | Free |
| Chat commands, timers, quotes and chat moderation | The streamer's page | Twitch | Live, in your chat | Free, more room on a plan |
| Your Discord invite and your next streams as words in chat commands and timers | The streamer's page: Connect saves the invite, then Commands and Timers use it | Twitch. No Discord account needs to be linked | Live, in your chat. A reading of the schedule is kept for 5 minutes | Free, more room on a plan |
| Saying your server's news in your Twitch chat | The server's Webhooks page, then a tool such as Make, then the streamer's Connect page | Both | As fast as the tool in the middle | Free, and the tool may charge |
| A Discord role for your Twitch subscribers | Discord's own Twitch integration, under Server Settings, Integrations. Not TrinketBot | Discord, and Twitch for the integration | Up to Discord | Not TrinketBot's |
Recipe 1: Announce your streams in Discord
Goal: a message in a Discord channel whenever a Twitch channel goes live. There are two ways to set it up, and both make the same thing: the server's own Twitch connection, which the server's dashboard can change afterwards.
A. On the server's dashboard (you manage the server; no Twitch login):
- Open the server from Your servers (a Discord login) and open Twitch in the sidebar.
- Type the Twitch channel name and press Connect.
- Under Discord setup, choose the channel the alert goes to and, if you like, a role to ping.
- Switch on the Enabled switch at the top of the Twitch page, press Save changes, then press Send test notification.
B. From the streamer's own page (the streamer manages the server and is logged in with Twitch; nothing to type):
- In the streamer area, open Connect and press Link my Discord account. Discord asks you to approve it.
- Choose the server and the channel for your events. If TrinketBot isn't in the server yet, press Add TrinketBot to a server, add it, then press Check again.
- In the Go-live alert card that appears, check the channel, press Turn on the go-live alert, then Send a test.
What to expect. Twitch tells TrinketBot when the stream starts, and the alert usually arrives within a minute: TrinketBot checks for the stream up to 9 times over about 50 seconds, because Twitch's list can take a moment to show it. Each stream is announced once per server. Several servers can use the same channel and each posts on its own, but a server has one main Twitch channel. A new Twitch connection marks the alert as ended once the stream is over (2 to 3 minutes after), with how long it ran and a link to the replay if Twitch saved it, and, if you tick Add the stream's peak viewers and best clips, the most viewers TrinketBot saw and buttons for the most-viewed clips; you can change all of that under When the stream ends. Live status (a Live role, a voice channel status) follows the same switch but has its own settings on the Live status page, and turning the alert off stops it too.
If it doesn't work. The Twitch page shows a Last error, and on Connect the card shows the last error too. The usual ones are a channel that was deleted, a channel TrinketBot can't see (give it View Channel there, or choose another) and a missing Send Messages or Embed Links. Send test notification shows the reason.
Recipe 2: Post every new clip in Discord
Goal: a card in a Discord channel for each new clip made of a Twitch channel. Two other things also put clips in Discord; they are separate settings, and the end of this recipe says how they differ.
- On the server's dashboard, connect the Twitch channel on the Twitch page (Recipe 1, steps A1 and A2). That is enough for clips; you can leave the go-live alert off.
- Open Raids & clips, switch on Post new clips, choose a channel and save.
- Press Post the latest clip now (it appears after saving) to see the card and check that TrinketBot can post there.
What to expect. A card usually comes 1.5 to 6.5 minutes after the clip was made: TrinketBot looks every 5 minutes, and only at clips that have had about 90 seconds to finish. That is the route for a clip made with Twitch's own Clip button, or in any way other than the chat bot's clip command, which has a faster route of its own (Recipe 3). A clip that Twitch lists late may be missed. Clips made before you switched this on are never posted. Each clip is posted once per channel. If more than five turn up in one check, the newest five are posted, with a closing line that says how many more there were and links to the channel's clips on Twitch. The card has the title, picture, length, game, who clipped it and a Watch clip button. Each server posts on its own. A post that fails is tried again, up to a day back. Disconnecting the Twitch channel or connecting another one starts the feed afresh. Each clip is also an event for the server's Automations and webhooks, and the card can be switched off with Post a card in a channel (Recipe 10).
If it doesn't work. Once clips are switched on and saved, the Clips card has an Is it working? box. It lists, in order: this server has a main Twitch channel; TrinketBot can post in the clips channel; nothing has gone wrong posting a clip; and TrinketBot is checking for new clips. The first one that fails is boxed, with what to do. “The clips channel was deleted, or TrinketBot can't see it” means choose another channel, or give TrinketBot View Channel there. “TrinketBot needs Send Messages and Embed Links in the clips channel” says what to grant. The post row shows the last error as Discord gave it. If the checking row turns amber, clips made after the time it names haven't been looked at, usually because Twitch didn't answer for a while or TrinketBot was restarting; it picks up from there once checks go through, as long as that is within a day. Press Check again after you fix something in Discord. Before anything is switched on, the page says “Connect your Twitch channel first” when step 1 isn't done. Then wait a check or two: nothing is posted between checks.
Three ways clips get into Discord. They don't depend on each other, and all three can be on together.
- Post new clips (this recipe) posts every clip as a card, in the order they were made.
- Most-watched clips, on the same Raids & clips page, posts once a week the 3 clips of the week that Twitch counts the most views for, in one message at a day and hour you choose (in UTC). Nobody votes, a week without clips posts nothing, and saving doesn't post. See Raids & clips.
- The weekly pick in Art & clips is for what your members post in a channel and vote on with an emoji. It has nothing to do with Twitch's clip list.
Recipe 3: Make a clip from chat
Goal: someone types the clip command in your Twitch chat, the bot makes a clip and puts its link in chat, and TrinketBot posts a card for the clip in Discord. The chat half is the command; the Discord half goes to the servers whose main Twitch channel is yours, with Post new clips switched on (Recipe 2), and to your own Discord channel if you switch on Clip made with the bot on the Events page. If the command stays silent or says it couldn't, check these in order:
- The command exists and is on. On the Commands page, press Add the moderator commands, or use the clip example next to Start from an example. A command past your plan's limit is paused (the page says so).
- It is typed with your own prefix. The Overview shows it (
!unless you changed it). You are never held back by a cooldown; everyone else is (the starter command waits 30 seconds for the whole chat and 60 seconds for each person). When Twitch itself doesn't answer, the command can be used again after about 10 seconds instead; when Twitch says no (it isn't live, for one), the full wait stays. - The bot is on (the Overview) and you are live. Twitch only makes a clip of a live stream.
- The bot account has the permission to moderate, which the Moderation page shows. If it says TrinketBot's own account isn't allowed to moderate yet, that is for TrinketBot's owner to fix; with your own bot account (TrinketChad) you press Authorize there.
- If the bot answers that it couldn't, read the reason it gives. It says what stopped it, and that is the thing to fix.
What to expect. The bot waits up to 12 seconds for Twitch to finish the clip, then answers in chat with the clip's link, whether or not Twitch has finished it. If it hasn't, a note in brackets follows the link (“Twitch hasn't finished it, so the link may not work yet”). A moderator, or you, can give the clip a title by typing it after the command, written with your own prefix; if Twitch doesn't accept the title the clip is made without one and the note says so. Words from anyone else are ignored, because a clip's title is public.
The card in Discord is posted as soon as Twitch has the clip. TrinketBot asks again every 5 seconds for up to 40 seconds after that wait, and when that is over no card is posted from the command. A server's card never says who asked for the clip. The card in your own channel can say who asked (“Requested in chat by” and their chat name), and the Say who asked for it switch on the Events page is on by default; it is left out when you asked yourself, and the name never goes on the clip on Twitch. A card is posted for no more than 20 clips made with the bot an hour for a channel; past that, the command still makes the clip but posts no card for it. A command used through your key, such as a Stream Deck button, works the same way (see Control the bot from other tools). Clips made in any other way are posted by the server's clip check, as in Recipe 2.
If the chat reply comes but no card does: the server's main Twitch channel has to be yours, with Post new clips and its card switched on, and, for your own channel, Clip made with the bot has to be on with a Discord channel chosen on Connect that TrinketBot can post in. The command posts no card when Twitch hadn't finished the clip within the waits above, or after the hourly limit, and your own Discord channel gets none for that clip. The Together tab shows each server's clip row and whether the command is ready (see Check that it all works).
Recipe 4: Raids, one card and not two
Goal: a card in Discord for a raid, without a second copy. Two things can post one:
- The server's Raids & clips. Raids on the channel, raids it sends or both, a smallest size, and a link to the other channel. It is set per server.
- The streamer's chat bot, Events, Incoming raid. A thank-you in chat, a message to a web address, and optionally a card in a Discord channel. Incoming raids only.
- Decide which one posts the card in Discord. The server's is the richer one and the usual choice.
- Set it on the server's Raids & clips page: Announce, Smallest raid and the channel.
- On the streamer's Events page, for Incoming raid, keep the thank-you in chat and switch off only Post it in Discord. Don't switch off the whole event: that removes the chat thank-you as well.
What to expect. If both are on and post into the same channel, only the server's card is posted there, and both pages say so. If they post into different channels you get both cards, and the Events page offers a Turn this one off button. A raid under the server's smallest size, on a server set to Raids I send, or on a server whose Post a card in a channel switch is off, isn't covered by the server, so the chat bot's own post is made. Only these two built-in cards are de-duplicated: a Discord webhook used as the web address, a webhook of the server, or an Automation that starts from a Twitch raid (Recipe 10) can still add a second post. Raids need no sign-in and no Twitch permission. TrinketBot can't start a raid for you, because that needs your own Twitch login, which it never keeps.
If it doesn't work. Once raids are switched on and saved, the Raids card has an Is it working? box: the Twitch channel, the raid channel (it needs View Channel, Send Messages and Embed Links) and the last post error, with the first row that fails boxed. It can't see whether Twitch is sending the raid. Try the message posts a sample.
Recipe 5: Thank follows, subs and cheers in chat and in Discord
Goal: a thank-you in your Twitch chat, in a Discord channel, or both, when someone follows, subscribes, gifts subs, cheers, starts a hype train or redeems a reward. To let your server's Automations react to the same events, see Recipe 11.
- In the streamer area, press Set it up for me on the Overview, so the bot is on.
- On Events, switch on the events you want, press Give permission where Twitch asks (it asks one event at a time; raids need none), write the words and press Send a test.
- For Discord, open Connect and either link your Discord account and choose a server and channel, or paste a Discord webhook (see Two people, one setup for which to use).
- Back on Events, switch on Post it in Discord for the events you want, and press Send a test again.
What to expect. A burst, such as a follow bot or a big gift, is announced once and not a hundred times. A linked account is checked each time TrinketBot posts: if it can no longer manage the server, the post is refused and the event says so.
If it doesn't work. The event shows why: a permission to give, a channel TrinketBot can't see or post in, or a linked account that no longer manages the server. See If something doesn't work.
Recipe 6: Keep your Twitch log in a private staff channel
Goal: a record of bans, timeouts and deleted messages (and, if you want, all of chat) in Discord.
- On Connect, link your Discord account and choose the server and the events channel.
- Choose a separate channel for the log, and make it a private staff channel. The log copies what viewers write into your server, where Discord's rules and your server's rules apply. TrinketBot needs View Channel and Send Messages there, so add its role to the private channel; a private channel it can't see gets nothing.
- On Events, under Twitch log, switch on Log it in Discord for each part you want and press Send a test.
What to expect. Lines are grouped into one Discord message every few seconds. A timeout ending is not shown, and chat from while the bot was off isn't seen. A server's admins can see on the server's Twitch page that your channel posts there, and whether every chat message is logged, with names. Bans and unbans need one Twitch permission.
If it doesn't work. Send a test shows the reason next to the button: a log channel TrinketBot can't see or can't post in, or a linked account that no longer manages the server. See If something doesn't work.
Recipe 7: Share your Discord invite and your schedule in chat
Goal: chat can find your Discord server and your next streams, from a command and from a timer, without you editing a link or a time when they change. Nothing needs to be linked and no Discord server is needed for this: the invite is a public link you save, and the schedule is read from your Twitch schedule.
- On Connect, under Your Discord link for chat, paste your invite and press Save link. Use one that never expires: the card says how, and says whether the saved link still works (see Your Discord link for chat).
- On Commands, pick the example named discord (shown with your prefix in front) next to Start from an example. It already says
{discord}, so there is nothing to paste: press Create command. - Optional: on Timers, pick Discord invite next to Start from an example and press Create timer.
- Optional, for your schedule: the schedule example on Commands says
{schedule}, and the Next streams example on Timers does the same. The schedule is the one you plan in Twitch's Creator Dashboard; with none, chat is told nothing is scheduled right now.
What to expect. Nothing is saved until you press Create. The bot says the link you saved, so when you replace it on Connect every command and timer follows. A command or timer that says {discord} can't be switched on while no link is saved, and if you remove the link later it says nothing: it never says the braces. TrinketBot doesn't make the invite for you, and it checks it with Discord only when the Connect card is opened or you press Check again: a link that expires or runs out of uses stops working for everyone until you replace it, which is why a never-expiring link is the one to use. {schedule} says up to 3 of your next streams, each as a time in UTC with the time left, because chat can't show each viewer their own timezone. A change on Twitch shows within about 5 minutes.
If it doesn't work. If the command stays silent, check that it is on, that you type it with your prefix, that the bot is on (the Overview), and, for a command that says {discord}, that a link is saved: the Commands and Timers pages warn when it isn't. “I couldn't read the schedule just now” means Twitch didn't answer; try again in a minute. If Connect says the link doesn't work, is paused or leads to another server, replace it. See If something doesn't work.
Recipe 8: Say your server's news in your Twitch chat
Goal: your Twitch chat repeats what your Discord server announces, such as a Kick or YouTube go-live, a new video, or a post from a feed the server follows. There is no built-in route from Discord into your Twitch chat, and a Discord command can't make the bot speak. What works with no code is a webhook of your server sent through Make, Zapier or n8n to your chat bot's key.
- In the streamer area, open Connect and press Make a key. Copy it now: it is shown once.
- Open the tab From your Discord server under the key. It has the steps for Make, Zapier and n8n, with your key already in the address, and the events and fields to use.
- On the server's dashboard, open Webhooks, create one that points at the address your tool gave you and tick the events. A free server has one webhook.
- Let a go-live through only when its platform is not Twitch, and send the words as a
sayrequest.
What to expect. It is as fast as the tool in the middle. If that tool answers slowly or with an error, the webhook is sent again after 30 seconds and after 5 minutes, so a line can be said twice. Never send member.joined, member.left or member.leveled_up to chat: they carry people's Discord names and ids. Whoever builds this holds your key: build it yourself, or make a new key afterwards. See Control the bot from other tools.
If it doesn't work. A 404 “Unknown key” means the key is wrong or was replaced, a 409 or “bot is turned off” means turn the bot on, and a 429 means too many requests. See If something doesn't work.
Recipe 9: Give your subscribers a role
Goal: a Discord role for people who subscribe to your Twitch channel. Use Discord's own Twitch integration for this. TrinketBot doesn't copy it, because reading who subscribes needs your own Twitch login, which TrinketBot never keeps. Discord's integration is available to Twitch Partners and Affiliates. These are Discord's steps as its help article describes them. Discord changes its menus, so if a name here differs from what you see, follow Discord's article.
- You and each viewer connect your Twitch account to your Discord account: User Settings → Connections → Twitch.
- You open Server Settings → Integrations in Discord and follow its steps for Twitch. The Twitch login happens on Discord's side. TrinketBot isn't involved and never sees it.
- Discord makes roles for subscribers: Twitch Subscriber and one for each tier, according to its article. The integration manages them, so nobody can hand them out or take them away by hand. You can rename and recolour them under Server Settings → Roles.
- Choose what happens when a subscription ends: by default the role is removed after a grace period, and Discord also lets you choose Kick, which removes the member from the server. Decide that on purpose.
YouTube members. Discord has the same for YouTube channel memberships, under Server Settings → Integrations → YouTube, for YouTube Partners with memberships on, with roles named YouTube Member and one for each tier. See Discord's article.
What you can do with these roles in TrinketBot. They are managed roles. TrinketBot refuses a managed role wherever it would have to give it: join roles, verification, the roles a reaction-role panel hands out, the points shop, leveling rewards, forms, word commands, invite rewards, sticky and timed roles, the Live role and an automation's role actions. It accepts one wherever it only checks for it or pings it:
- a giveaway's required role, so only subscribers can enter;
- a leveling XP multiplier for the role;
- a reaction-role panel's required role, so subscribers can unlock a panel;
- the go-live ping role on the Twitch, Kick or YouTube page.
A channel only subscribers can see is Discord's own channel permissions, set in Discord with no TrinketBot involved. How quickly Discord syncs subscribers is up to Discord, and TrinketBot makes no promise about it.
Why TrinketBot doesn't do this itself. Twitch gives a channel's subscribers only to the streamer's own login, and TrinketBot keeps no token of your own Twitch account. A version that only heard about new subscriptions could not list the subscribers you already have, could not tell which Discord member a Twitch name belongs to, and still could not give a managed role.
If it doesn't work. If no role appears, the answer is in Discord's integration and not in TrinketBot, which can't see or change it. Discord's article above says what it needs from your channel and from each viewer.
Recipe 10: Your own message for a raid, a clip or a stream start
Goal: a message of your own in Discord, with your words, a role ping and a condition such as a game or a raid size, when a raid arrives, a new clip is made or a stream goes live. It is done on the server's dashboard with Automations, with a Discord login. TrinketBot's own cards stay as they are unless you switch them off.
- On the server's Raids & clips page, switch on Raids or Post new clips, or both (the Twitch channel has to be connected first, Recipe 1). An Automation starts from a raid or a clip only while that is switched on.
- If the rule should post instead of TrinketBot's own card, switch Post a card in a channel off for that part. No channel is needed then, and the raids or clips go only to your Automations and webhooks. Leave it on to get both.
- Open Automations. Under Ready-made rules, press Use this rule on Welcome a raid. For a clip, press New rule and choose A new Twitch clip under When. For a go-live in one game, Ping a role when a stream starts in a game does it, and needs the go-live alert from Recipe 1 switched on.
- Choose the channel, write the words and pick a role to ping if you want one, press Save rule, then Send a test on the rule: it posts a made-up raid or clip.
What to expect. A rule is one of the server's rules, which a plan limits (see Limits in one place); a ready-made rule is an ordinary one. A raid rule starts as Twitch reports the raid, and only for the raids that the server's Announce direction and Smallest raid let through, whether or not the card is posted. A clip rule starts once per clip, for the clips the clip check finds (1.5 to 6.5 minutes after they are made, usually) and at most the newest five of each check; with the card on, a clip is passed on once its card is in the channel. A clip made with the chat bot's clip command is passed on as soon as its card is posted (Recipe 3), or at once when the card is off. Post the latest clip now is a test of the card and tells no rule. A rule's message can't ping anyone but the role you chose.
If it doesn't work. The editor, and a saved rule, say so when what the rule needs isn't switched on (“This rule won't start yet”), with a link to the page that fixes it. A raid rule never starts when Announce is Raids I send, and a raid under the smallest raid never reaches it, whatever the rule says. If the rule starts but nothing arrives, the rule shows what went wrong: a deleted channel or a missing permission.
Recipe 11: Let your server's automations react to your Twitch events
Goal: a rule in your Discord server starts when someone follows your channel, subscribes, shares a resub, gifts subs, cheers bits, starts a hype train or redeems a reward, for example a message for 1,000 bits or more, or a role ping when a hype train starts. It takes two logins: the streamer hands the events over from the streamer area, with Twitch, and someone who manages the server writes the rule on the server's dashboard, with Discord. Raids and clips aren't handed over this way; they have their own triggers (Recipe 10).
- Streamer: on Connect, link your Discord account and choose the server and a channel, as in Recipe 5. The account you link has to manage the server. Automations post where each rule says; the channel you choose here is for “Post it in Discord”.
- Streamer: on Events, for each event you want, switch on Let my server's automations react, press Give permission where Twitch asks, and save. Connect then says On for N events.
- Server manager: on the server's dashboard, open Automations and press New rule. Under When, the events of a streamer's Twitch channel are grouped under From a streamer's Twitch channel: choose one, add a condition if you like (the number of bits is at least 1000, say), choose a channel to post in and press Save rule, then Send a test on the rule.
- Streamer: back on Events, press Send a test on the event. It says whether a rule in the server starts from it, and runs none.
What to expect. Each time an event is handed over, TrinketBot asks Discord whether your linked account still manages the server, and hands nothing over if it doesn't; when no rule there starts from the event it asks nothing. A rule learns the viewer's name, the tier, the amount and the channel, and never anything a viewer wrote. Because a viewer isn't a member of the server, these rules can post but never give or take a role. Follows less than 10 seconds apart on one channel count as one, and so do hype trains less than 60 seconds apart. Rules count against the server's limit (see Limits in one place), so a free server has room for few. Choosing a different server turns the switch off on every event, so each server is agreed to on its own. The server's admins see on the server's Twitch page which events a channel hands over, and can remove the channel; Turn all off on Connect stops it from your side. The channel doesn't have to be the one the server follows.
If it doesn't work. The event on the Events page shows why: a permission to give, a server that is no longer chosen, TrinketBot gone from the server, or a linked account that no longer manages it; the Overview's Needs attention box lists the same. The rule's editor warns when no streamer hands the event over. See If something doesn't work.
Two people, one setup
Often the streamer and the person who runs the Discord server are not the same. The server's admin (Manage Server, a Discord login) sets up the go-live alert, Live status, Raids & clips and the schedule on the server's dashboard. The streamer (a Twitch login) sets up the chat bot, its events, the Twitch log and the key. A checklist for the hand-off:
- Admin: add TrinketBot to the server, and tell the streamer before you connect their channel by name. TrinketBot doesn't ask the streamer to confirm: the go-live alert, raids, clips and the schedule only read what Twitch shows publicly.
- Admin: set up Recipe 1 (A) and, if wanted, Recipes 2, 4 and 10 on the server's dashboard. The streamer does nothing for these.
- Streamer: log in with Twitch at /channel and press Set it up for me.
- For events and the Twitch log in the server, pick one. If the streamer's own Discord account manages the server, they link it on Connect and choose the server. They can then also switch on the go-live alert from their own page (Recipe 1, B) without asking. If their account doesn't manage it, the admin makes a Discord webhook in the channel (Server Settings → Integrations → Webhooks → New Webhook, which needs Manage Webhooks) and sends the streamer the address privately; the streamer pastes it as their web address. Anyone who has the address can post in that channel, so don't share it in public; the admin can delete the webhook to stop it. A webhook is not checked against Manage Server and is not listed on the server's Twitch page. A webhook can't hand events to the server's Automations (Recipe 11): that needs the streamer's linked account, which has to manage the server.
- Admin: to see who posts into the server, open the server's Twitch page and look for Streamers posting here. It also shows which events a channel hands to your Automations. Remove stops a channel, automations included; the streamer can choose the server again for as long as their linked account manages it, but has to switch the automations on again.
- Anything built on the key (a Make, Zapier or n8n scenario): the person who builds it holds the key. The streamer builds it, or makes a new key when someone else is done.
- Stopping: the streamer can unlink Discord, stop posting or turn all automations off on Connect; the admin can remove the channel, or turn the go-live alert off on the server's Twitch page. A go-live alert the streamer switched on from their own page stays with the server until the admin removes it, even if the streamer unlinks Discord or deletes their account.
- Afterwards, both: the streamer opens the Together tab, which checks the channel and every server they manage that follows it or gets their events, and says what is stuck (below). The admin has the Is it working? boxes on the server's Raids & clips and Live status pages.
Check that it all works
The Connect page has a Check tab (it used to be a page of its own, called Twitch and Discord together). It reads everything back to you and changes nothing: each row says what is set up and what is stuck, and a row that is stuck links to where it is fixed. It is the place to look after setting things up, and after a hand-off.
- Your channel: the bot is on; it is a moderator in your chat; Discord is linked and the linked account still manages the server your events go to; TrinketBot can post in the channel your events go to; your events are set up with the permission Twitch needs for each; and your web address, if you have one.
- Making a clip from chat: the bot is on, there is a clip command that is on and within your plan, and the bot account has the permission to make clips. Under it, a note says where the card for a clip goes.
- Each server: for every server your linked Discord account manages and whose main Twitch channel is yours or that gets your events: the go-live alert, raid cards (and whether your own raid post would double them), clip cards, Live role and voice status, and the schedule. A server has one main Twitch channel, so for a server whose main channel is another one the page says so and shows nothing more. Only servers your linked account manages are ever shown, and Discord is asked each time. Find my servers looks through every server TrinketBot is in for the ones your account manages; it asks Discord about each, so it takes a moment. Check again reads the page again and asks Twitch afresh whether the bot is a moderator.
A green row means the saved settings and the permissions are in place. It does not prove that Twitch is sending events. A grey row is something switched off or not set up, which is a choice and not a fault. The Overview's Needs attention box is the short version for your own side.
Kick and YouTube streamers
A Kick or YouTube streamer gets go-live alerts and Live status. The chat bot, raids, clips, the weekly clips post and the schedule are Twitch only, and there is no chat bot for Kick or YouTube chat.
| What | Twitch | Kick | YouTube |
|---|---|---|---|
| Go-live alert in Discord | Yes. Usually within a minute | Yes. Within seconds | Yes. A few minutes, since YouTube is looked at every 5 minutes. Announce live streams turns it off |
| New uploads in Discord | No | No | Yes, and Shorts if you leave them on. TikTok videos are a separate page |
| The alert after the stream | New connections start on mark it as ended, with a replay link if Twitch saved the stream, and optionally the stream's peak viewers and its most-viewed clips | Starts on leave it as it is. Can be marked as ended, with no replay link and optionally the stream's peak viewers, or deleted | Starts on leave it as it is. Can be marked as ended, with a link to watch it back and optionally the stream's peak viewers, or deleted, once YouTube lists the replay |
| Live role and voice status | Yes | Yes | Yes |
| Raid cards and clip cards | Yes | No | No |
| A weekly post of the most-watched clips | Yes | No | No |
| The schedule as Discord events | Yes | No | No |
| The chat bot, its events and the Twitch log | Yes, in Twitch chat | No | No |
| Say a go-live or upload in your Twitch chat (Recipe 8) | Filtered out on purpose, or your own go-live would come back | Yes | Yes, and uploads |
The stream.started webhook event | Yes | Yes | Yes |
The stream.raid webhook event | Yes | No | No |
The clip.created webhook event | Yes | No | No |
| Automations that start from a raid or a clip (Recipe 10) | Yes | No | No |
| Automations that react to a channel's follows, subs and cheers (Recipe 11) | Yes, handed over by the streamer | No | No |
| A role for subscribers or members (Recipe 9) | Discord's Twitch integration | Not covered here | Discord's YouTube integration, for members |
One plan, two products
A pledge on Patreon (or a Discord subscription, or a plan the bot's owner grants) puts your Discord account on a plan: TrinketSupporter or TrinketChad. That one plan reaches two places, and you don't pay twice.
- One Discord server. On the Premium page, choose the server under Choose the server and press Assign (Move if one already has it): the plan goes to one server at a time.
- Your Twitch channel's chat bot. A channel has no server to assign, so it takes the plan of the Discord account you linked on the streamer's Connect page. No server slot is used, and with no account linked the channel is on the free plan.
- So link the same Discord account that holds the pledge in both places: on the Premium page to choose the server, and on Connect for the channel. The plan follows the account up and down: if it ends, both fall back to the free plan, and nothing is deleted. What is over a limit is paused.
- A plan bought for a server in Discord (not for an account) puts that server on the plan and nothing else; it doesn't reach a Twitch channel.
- TrinketChad adds one thing on each side: Bot Identity on the server, and a chat bot that chats as your own bot account on Twitch.
Limits in one place
Going over a plan's limit never deletes anything: the newest items are paused and come back when there is room. The other limits are about volume and are the same on every plan. The full plan tables are under Plans and limits and Premium & Patreon.
| What | Limit |
|---|---|
| A Discord server | |
| Main Twitch channel a server connects | 1. A Twitch channel can be the main channel of many servers |
| Clips in one check, for the cards and for Automations and webhooks | The newest 5. With a card on, a closing line says how many more there were |
| How far back a clip is still posted after a failed post | Up to a day |
| Clips in the weekly most-watched post | 3, and one post a week |
| Outgoing webhooks | 1 free, 3 on TrinketSupporter, 10 on TrinketChad |
| Automation rules | 2 free, 5 on TrinketSupporter, 10 on TrinketChad |
| A Twitch channel's chat bot | |
| Chat commands | 20 free, 60 on TrinketSupporter, 150 on TrinketChad |
| Timers | 5 free, 15 on TrinketSupporter, 40 on TrinketChad |
| Quotes | 200 free, 1,000 on TrinketSupporter, 5,000 on TrinketChad |
| Blocked words | 25 free, 100 on TrinketSupporter, 300 on TrinketChad |
| Always-fine sites for the link filter | 10 free, 40 on TrinketSupporter, 100 on TrinketChad |
| Discord servers a channel posts its events into | 1, with one Discord account linked |
| Messages the bot sends from its chat account, which every chat it speaks in shares | At most 18 in 30 seconds |
| Instant clip cards for clips made with the bot | 20 clips made with the bot an hour for a channel. Past that, the command still makes the clip and answers in chat, but posts no card |
| Streams that {schedule} names in chat | The next 3 on your Twitch schedule |
| The key for other tools | |
| Requests a minute with one key | 60 |
| Requests a minute from one address, whatever the key | 300 |
| Time between two clips made through the key | 30 seconds |
| Length of a line sent to say | 400 characters, and longer is turned down, not cut |
Why two logins, and what is not connected
- Two logins. The Discord dashboard asks for a login with Discord, and the streamer area asks for a login with Twitch. Neither one gives TrinketBot a token of your own Twitch account. Linking Discord from the streamer area is optional and keeps only your Discord user ID and when you linked it; it is not a login, so you still log in to the Discord dashboard with Discord.
- No link between a chatter and a member. TrinketBot keeps nothing that says a Twitch chatter and a Discord member are the same person. So points, roles and levels don't carry from one to the other, and the rules that start from a channel's follows and cheers (Recipe 11) can post but never give a role.
- Bans and timeouts are not mirrored. A ban in your Twitch chat doesn't touch Discord, and a Discord ban doesn't touch Twitch. Without a link between accounts TrinketBot couldn't tell whom to act on, and each place's moderators decide for it.
- Discord can't speak in Twitch chat except through the key in Recipe 8, and TrinketBot can't read your Twitch subscribers or start a raid, because both need your own Twitch login.
57. Trinket
A small shared pet for the whole server. Your server gets one Trinket and gives it a name of its own. Members take turns cooking soup for it and serving it: every bowl makes it a little bigger, and as it grows the picture pulls back from a close-up of its forest stream to show more and more of the clearing. It lives in one message in one channel, which changes in place instead of posting again and again. (With upgrades switched on there is a second message, the Upgrades panel, above it: see Upgrades.) It is off until you set it up, and every part of it is free on every plan; a plan only changes how many things the shop can sell (see Levels, titles and coins).
In the sidebar it is under Activities → Quick games → Trinket.
Setting it up
- On the Trinket page, choose the channel for its message and give it a name (1 to 32 characters), then press Set up the Trinket. Or, in Discord, run
/trinket setupand pick the channel and the name there. Either way the module is switched on and the message is posted. Its other settings appear on the page once it has hatched. - Running
/trinket setupagain with another channel moves the message there; the Trinket keeps its size. If the message is ever deleted, Post a fresh message on the Trinket page puts it back. - The Enabled switch at the top of the page turns the whole module off. The message stays where it is, but its buttons only tell members that the Trinket is resting. Your settings are kept.
Looking after it
The message has four buttons, and a second row of four (see Stir, Season and Taste below, and Style your Trinket for the fourth). Anyone who can see the channel can press them (except that members with a role you list under Roles that can't take part can't add an ingredient, serve or pet):
- Add ingredient puts an ingredient in the pot and starts it simmering. The ingredient is picked at random from a pantry of twelve vegetables (carrot, mushroom, tomato and so on); nobody chooses it. How long the pot simmers is picked at random each time: the soup simmers between 10 and 15 minutes, the same for every server, and there is no setting for it. There is one pot for the whole server, so while it simmers nobody can add another ingredient — that wait is what sets the pace of the Trinket.
- Serve is for when the soup is ready: the message turns green and says so. Anyone can serve it, including the person who cooked it. The Trinket eats and grows, and the message says who cooked and who served. Soup that is ready simply waits; it never spoils.
- Pet cheers the Trinket up for a moment. It doesn't make it grow. It works once a minute for the whole server. Like adding an ingredient and serving, it is refused for the roles under Roles that can't take part and while the Trinket sleeps.
- Refresh redraws the message with how things stand right now. The message also keeps itself up to date (when the soup is ready, when it gets hungry), so this is for when it looks out of date.
Nobody feeds twice in a row is on by default: the person who added the last ingredient can't add the next one, so someone else has to. Turn it off for a very small server, where it would leave the pot empty. It only applies to adding an ingredient; serving is open to everyone.
Stir, Season and Taste
The second row of buttons gives members something to do while a pot is on. They follow the same roles and the same bedtime as the buttons above: a member with a role you list under Roles that can't take part can't press them, and none of them works while the Trinket sleeps.
- Stir works while the soup is simmering. A member can stir again after a while (the wait is the same for every server and is not a setting), and each stir adds a tiny bit to how much the pot grows the Trinket.
- Season works while the soup is simmering, once per member per pot, and adds a tiny bit too.
- Taste works once the soup is ready and before it is served, once per member per pot. It adds nothing to the growth.
Everything the stirs and seasonings add to one pot is held under one small cap, and it is applied once, when the pot is served: that meal grows the Trinket by a little more than it would have. It is small by design, so the ranking moves only slightly. Members are told what happened: after a press a private note says what the press added to the pot's growth, or why nothing happened. Only the member who pressed sees it, it mentions nobody, and a refused Stir, Season or Taste leaves the message as it is.
Now and then a cook brings a rare find: a golden carrot, a star fruit or a moon truffle in place of one of the twelve vegetables. It is luck, nobody can press for it, and it is never the Trinket's favourite. The message shows it with a ✨ line, and it adds its own small boost to that pot's growth when the pot is served, on top of the cap above. How often it turns up and how big the boost is are the bot owner's to adjust, so they are not written here.
What is stored: while a pot is on, the Trinket keeps who stirred, seasoned or tasted it and when, so that each member can do each only as often as the rules say. These records are kept whether or not caretaker stats are on. They are deleted when the pot is served, when a new pot is cooked and when the Trinket hatches again; they go after about a day if nobody serves the pot; and Forget my data deletes them. Reset caretaker stats leaves them alone, and they are not in a backup.
Events
Now and then, after someone has stirred a pot, something friendly happens while it simmers: a butterfly lands on the pot (the common one), a shooting star crosses the sky, or, rarely, a rainbow arches over the forest. The message shows it on the picture, says so in its first line, and gets one more button for a couple of minutes: Catch it, Make a wish or Look!. An event never starts without a stir before it, there is at most one per pot, and it is over before the soup is ready.
- Everyone who presses the button in time gets the reward, once each: a small boost to that pot's growth (it counts toward the same cap as the stirs, with a smaller cap of its own for events), and XP and coins if your server keeps them. An event takes nothing away from anyone, and a member who is too late is told, privately, that the moment has passed. The buttons of an old message do nothing once the event is over.
- If pop-ups are on, a short pop-up announces the event in the Trinket's channel and deletes itself (see Pop-ups). If Discord refuses the edit that shows an event, the event runs without being seen, nobody can answer it and no reward is given.
- An event has no switch of its own: it is a part of the pot. How often they happen, how long they last and what they give are the bot owner's to adjust, for every server at once, so they are not written here.
What is stored: when a member presses an event's button, the Trinket keeps that they took part in that event, under their Discord user ID, so that each member can answer an event only once. These records are kept whether or not caretaker stats are on. They are deleted when the pot is served, when the Trinket hatches again, and after about a day if nobody serves the pot; Forget my data deletes the member's. Reset caretaker stats leaves them alone, and they are not in a backup.
How it grows
- Its size is counted in soup bowls. It hatches at 1 bowl. A meal adds about a tenth of a bowl to a hatchling and less and less as it gets bigger (by 100 bowls a meal adds a third of that). Very roughly, it takes about 40 meals to reach 5 bowls, about 100 to reach 10 and about 6,000 to reach 200. Because a pot simmers between 10 and 15 minutes, even cooking non-stop would take about seven weeks to get there, and real servers don't cook non-stop, so a lively server needs months. These numbers are a starting point and may be tuned.
- The picture zooms out as it grows. A hatchling is shown in a close-up of the stream, and the view pulls back a little every few meals until, at 200 bowls, you see the whole painting. After that the picture stays as it is and the number keeps counting. The message gives its size a name as well: Hatchling, Little, Big, Giant, and Full size at 200 bowls.
- It never dies, never shrinks and loses nothing. If nobody feeds it for a while it just gets hungry and sad.
Moods
The picture shows how it feels with small effects, and the message always says it in words too, so nothing depends on seeing the picture. It is happy for a few minutes after a meal. Every Trinket has a random favourite ingredient, which turns up in about one soup in six, and it shows a bit more joy after eating it; chili makes it sweat. A pat shows for a moment. After about six hours without a meal it is hungry.
- Sleep at night is off by default. Turn it on and choose the timezone and the hours it sleeps (10 pm to 7 am to start with, and the hours may cross midnight). While it sleeps, nobody can add an ingredient, serve or pet (Refresh still works); it wakes in the morning and the pot simply waits.
The ranking line
At the bottom of the message there can be one small line, worded like this:
Your {name} has grown and placed itself into top {number} of trinkets!
{name}is your Trinket's name, and{number}is its place by size among the Trinkets of all the servers that take part. Trinkets of the same size share a place.- It is only a number. The line shows only the place. It never shows another server's name or ID, or another Trinket's name or size, and there is no public list. The Trinket page on the dashboard also tells your admins how many Trinkets are ranked in all (“Number 12 of 340 ranked Trinkets”): a count, and nothing about any of them. Your Trinket's size is used, anonymously, to work out the number; see the Privacy Policy. Nothing you pay for changes a Trinket's size, so nothing you pay for can change its place.
- The place compares size and nothing else. A server with a live bonus grows its Trinket faster and so climbs faster; the place doesn't make up for that setting.
- Abandoned Trinkets aren't counted. Only Trinkets that are switched on and have been fed within the last 30 days count, so forgotten test Trinkets don't push everybody else down. The places are worked out every ten minutes, so the line appears a little after the first meal, and not at all while a Trinket has no place yet.
- Show my Trinket in the anonymous ranking turns it off. The line disappears from your message and your Trinket is left out of everyone's count.
Milestones and pings
- Post when it reaches a milestone is on by default: a short message when the Trinket reaches a round size — 5, 10, 25, 50, 100 and 200 bowls, and beyond that 300, 500, 750, 1,000 and then every 500. They go in the Trinket's own channel unless you choose another, and you can pick a role to ping with them (nobody is pinged by default).
- Ping a role when it gets hungry is off until you choose a role. After about six hours without a meal that role is pinged once, and not again until the Trinket has eaten. It only ever pings the one role you chose, never
@everyone. - While you're live, a meal grows it by is the live bonus: 100% is no bonus (the default), 200% makes every meal count double, up to 1,000%, for as long as a stream you follow is on. It uses Live status, so it needs that switched on and your stream connected.
- Watching is off by default. While your server's Twitch streamer is live, the Trinket sits at a little computer and watches, and the message says so, for example “Soupy is currently watching Mallie.” It shows within about one to three minutes of the stream starting and goes within about one to three minutes of it ending. A brief drop in the stream, or Twitch not answering for a while, changes nothing. It needs a Twitch streamer set up on the Twitch page (the go-live alert may be off), it is not shown while the Trinket is asleep, and it keeps nothing about members. It follows only that one streamer, not the channels your server follows elsewhere and not Live status.
- Roles that can't take part lists roles whose members can't add an ingredient, serve, pet, stir, season, taste, answer an event, buy from the shop or put coins into an upgrade; everyone else can. Adding a role blocks it: no role is ever needed to feed the Trinket.
Pop-ups
A Pop-ups message is a short new message in the Trinket's channel that says something has just become available, and then deletes itself. There are five kinds, each with its own switch: An event starts, A rare ingredient turns up, Stir and Season are available, The soup is ready and The Trinket cheers for the server. Some are on and some are off to begin with: events and rare ingredients are on by default; the other three are off by default, because the first two would come with every pot and the cheers with every giveaway, goal and birthday.
- Pop-ups are silent: they send no notification and mention nobody, unless you choose a role under Ping a role with pop-ups. Then they ping only that role, never everyone.
- Each one deletes itself after a short while (an event's when the event is over), also if the bot restarts in between. A server gets only a limit of a few an hour, and the routine kinds may use only part of it so that they can't crowd out an event or a rare find; a pop-up over the limit is skipped, not saved for later.
- If the bot can't see the Trinket's channel or send messages in it, the Trinket carries on as usual and the dashboard tells you on the Trinket page.
- Pop-ups keep nothing about any member: they are worded from fixed sentences and the Trinket's name, and nobody is named in them.
- The Trinket cheers for the server is the one kind that is about the server and not the pot. It cheers when a giveaway ends with winners, when a community goal of Leveling is filled, when a birthday is announced and when a member reaches a milestone level. It says only that it happened, never who or what the prize or the goal was, it uses the routine share of the limit, and it stays quiet while the Trinket sleeps.
Caretaker stats
Keep caretaker stats is off by default. Turn it on and the Trinket counts each member's cooks and serves: how many turns they have taken in total and in each calendar month (a month starts at midnight UTC), and the dates of their first and latest counted action, kept under their Discord user ID. A cook and a serve each count as one turn; a pat, a Wash, a Play and a Tuck in are not turns. With levels or coins on, a stir, a seasoning, a taste, a pat, a Wash, a Play, a Tuck in or an answer to an event is counted as an action too, and moves the latest date, but it is not a turn. Unless the bot owner turns the streak off, the same record also holds the number of days in a row the member cooked or served and the last day that counted (UTC). Counting starts when you turn it on and save, and turns taken before that are not counted.
- How long it is kept. A member's total is deleted after 400 days without taking part (cooking or serving, or any other action the Trinket counts for them), and a month's count once that month is more than 12 months back (the current month and the 12 before it are kept). A member who has left the server keeps their counts until then. Hatching a new Trinket doesn't reset them.
- Turning it off stops the counting but does not delete what was counted: it stays until it is deleted as above, or you reset it. It can be turned off only while levels and coins are off (turn all three off in one save if you want them all off).
- Reset caretaker stats, a button on the Trinket page that asks first, deletes every member's counts in this server, and their XP and coins if it keeps them, at once and can't be undone. It does not delete the log of turns, or the IDs the Trinket keeps to name whoever is cooking and whoever cooked and served last, or the records of who stirred, seasoned or tasted the pot that is on, and it does not switch counting off: if the switch is on, a turn taken afterwards is still counted, from the start.
- Members can see and erase their own.
/trinket meshows a member, privately, their turns this month and in all, with a Forget my data button. After a confirmation it deletes their counts, with the XP, coins and choice to hide on the same record, their entries in the log of turns in this server, their stirs, seasonings and tastes and their part in an event on the pot that is on, and their ID on the Trinket, and edits the Trinket's message so that it no longer names them (if Discord refuses that edit, the member is told; a message too old to edit is posted again and Discord is asked to delete the old one, and if this server logs deleted messages its log channel may then hold the old text). It works whether or not the Trinket or the stats are switched on. The Trinket's size and meals belong to the server and are not reduced, and a turn taken afterwards is still counted, from the start, if the switch is on. - What Forget my data doesn't reach. A copy that this server's own Activity log feature may have kept of the Trinket's message (up to 7 days, and any line already posted to its log channel), and short-lived technical logs. Nor does it take back anything the shop gave: a role bought in the shop stays after Forget my data, and for a timed one the server's timed-role list keeps a record of who has it until it ends, while the line the Activity log feature may have posted when the role was added and Discord's own audit log can't be reached either. A member who has left the server, or whose server has turned the
/trinketcommand off, can't open/trinket me: they can ask a server admin to use Reset caretaker stats (which deletes the counts, and the XP and coins if the server keeps them), or contact TrinketBot (see the Privacy Policy).
Levels, titles and coins
Two more switches build on the caretaker stats. Both are off by default, neither can be turned on while Keep caretaker stats is off, and the stats can't be turned off while either is on. The page tells you which rule a save would break before you press Save, and the bot refuses it with the same words. Neither switch is in a backup. Counting starts when you turn one on and save, and earlier turns are not converted to XP.
- Levels and titles makes cooking, serving, stirring, seasoning and tasting earn XP. XP becomes a level and a title, and a private note after each action says what it earned and when a level was reached. After the daily limit shown beside the switch, an action pays a quarter of its XP until midnight UTC, so nobody is cut off, only slowed. The XP is kept under each member's Discord user ID, in total and for each calendar month, on the same record as the caretaker stats. If the server switches on Trinket XP on the Leveling page, the XP an action really earns also counts, at the rate chosen there, toward the member's Leveling xp; that xp is kept by Leveling, and neither Forget my data nor a reset of the caretaker stats takes it back.
- The leaderboard.
/trinket topshows it to the member who asks, and no one else: this month or all time. It lists members who are in the server and have not hidden themselves; ties share a place, and a member who has left the server is left out. Under it the member sees their own line. The admins get the same list as a leaderboard table on the Trinket page, with the members who hid themselves marked Hidden: the admins can still see hidden members, marked, on the dashboard. - Hide me from leaderboards.
/trinket mehas a button of that name (and Show me on leaderboards once hidden). Hiding only changes who sees the member listed: their XP and level still count, and it does not hide them from the admins. Forget my data deletes the choice with the rest. Resetting the caretaker stats deletes the XP, coins and counts on the record, but a reset keeps only each member's choice to hide from the leaderboards, so it never puts a hidden member back on the board. - Earn coins makes every action pay a few coins, and a serve pays the most. After the daily limit a quarter is paid. Coins are the Trinket's own, kept for each member in this server only, on the same record. They can't be bought, given, traded or cashed out; they can be spent on roles in the shop, if the admins open one (see Open the shop below), and put toward the server's upgrades, if the admins switch those on (see Upgrades below). The Trinket page shows how many members hold coins and one rounded total of them, and only when at least 10 members hold some; there is never a list of balances.
- Open the shop is off by default and needs Earn coins to be on first; coins can't be switched off while the shop is open. The Shop card on the Trinket page is where you add what is for sale: a name, a short description, a price in coins, one role, how long a member keeps it (for good, or up to a year) and, if you like, how many there are. Only a role below your own highest role can be sold, one item for each role, and never a role that can moderate. An item can be switched off without deleting it, and your plan sets how many items a server may have: past that the newest are paused, not deleted, and come back with the plan. The items are in a backup; the switch is not.
- Buying from the shop. A member runs
/trinket shop, picks an item from a private menu, sees its price, how long they would keep the role and how many are left, and presses Buy. The shop takes coins and nothing else; a role can't be bought with money, given or traded. The coins are taken and the role is given in one careful step, so a member is not left paying for a role they did not get: if the role can't be given the coins stay with the member, and if Discord does not say whether it arrived, the Trinket tells the member so and checks again by itself a few minutes later, giving the coins back if it did not. The same check settles a purchase the bot was interrupted in, a few minutes later, and for as long as Discord can't say whether the role arrived the bot keeps asking, so until then the coins are not back yet. Two rare cases are not covered: a member who renews a timed role they still hold, when the bot stops after taking the coins and before giving the role, loses the paid time, because the check finds the role still held and takes the purchase as done (an admin can extend the role by hand); and a member who erases their own data, or an admin who resets the stats, while a purchase is going through (a few seconds as a rule, longer while the bot is waiting for Discord to say whether a role arrived) loses the coins with the record. A role is kept while the member is in the server (a Sticky roles module may give it back if they return); a timed one, up to a year, ends by itself, and until then it is also in the server's timed-role list. A member with one of the roles you excluded under Roles that can't take part can't use the shop either, and the shop is open at night. TrinketBot needs the Manage Roles permission, with its own role above every role on sale; when it can't give a role, the member is told to ask the staff. The shop keeps no list of purchases. A role bought in the shop stays after Forget my data, and the server's timed-role list, the line an Activity log may have posted when the role was added and Discord's own audit log are not erased with it; short-lived technical logs can name the member when a timed role fails to be given or taken back. - How long it is kept. XP and coins are deleted with the record: after 400 days without taking part, by Forget my data and by Reset caretaker stats. A month's XP is deleted once that month is more than 12 months back. A balance survives switching coins off, and is lost with the record.
Upgrades
Upgrades give a server's members a goal to put their coins toward together. There are four, and they belong to the whole server: the Cauldron, which raises the most that stirs, seasonings and events can add to one pot and shortens its simmer, Stir, which raises what one stir adds, the Pantry, which makes rare ingredients turn up more often, and the Lantern, which makes events more likely. Each has ten levels. When enough coins have been put toward the next level, it is reached for everybody, and its effect counts from the next press. The effects are small by design: at the numbers the bot starts with, even the top level of the Cauldron makes a meal grow only a few percent more than it would have, and no level can raise a number past the ceiling the bot keeps for it.
- Switching them on. The Upgrades card on the Trinket page has the switch. It is off by default and needs Earn coins to be on first; coins can't be switched off while upgrades are on. The page tells you which rule a save would break before you press Save, and the bot refuses it with the same words. The switch is not in a backup.
- What the card shows. For each upgrade: its level out of ten, the coins put toward the next level, what the level gives now and what the next one will give, and how many times coins were put in (a count of contributions, not of members). The numbers on this card are as of when the page was loaded or last saved: Refresh on the Trinket's card brings them up to date. It is read-only: there is no way to put coins in from the dashboard.
- Putting coins in. Members do it themselves, from Discord, with the buttons on a panel the bot posts in the Trinket's channel, above the Trinket's message: 10, 50 or all they have that the level still needs. The answer is private to the member and mentions nobody. A contribution is final: what a member puts in is kept for the whole server and can't be taken back, given or traded, and their balance goes down by what they put in. A member with one of the roles you excluded under Roles that can't take part can't put coins in either; bedtime does not matter.
- The panel. It shows the same numbers as the card, with no names, and is brought up to date within about half a minute of a contribution. With upgrades on, the channel holds two messages: the panel, and the Trinket's message below it (a pop-up or a ping can land between them). If you delete the panel by hand it is not posted again by itself: Post a fresh message on the Trinket page brings it back, or switch upgrades off and on. To remove the panel for good, switch upgrades off. Switching off takes the panel down and keeps the levels, the coins put in and the count; switching on again brings the panel back with them. While upgrades are switched off the levels give nothing, and nothing is lost: switch upgrades on again and they work again, with the levels reached and everything members put in. If the bot can't post or edit the panel, the Trinket page says so. It needs nothing more than the Trinket's message does.
- What each level costs, and how much each gives, are the bot owner's to adjust, for every server at once, so they are not written here; the card and the panel show the real ones.
What is stored: for the server, its four upgrade levels, the coins put toward the next level of each and how many times coins were put in. Nothing about who put coins in is kept, so there is nothing of a member's in it: Forget my data and Reset caretaker stats leave the levels as they are, and all of it is deleted with the server's data. The one exception is a member who chooses to be thanked by name, with the button in /trinket me: their own total is then kept with their other numbers, shown by name on the panel, and deleted when they use Forget my data or switch the choice off. It is progress, like the Trinket's size, and not in a backup.
Looking after the Trinket
Looking after the Trinket pays a little. A pat earns a little XP and, now and then, a golden pat earns coins; pats also fill a shared affection meter. Wash, Play and Tuck in raise the Trinket's three needs, Clean, Play and Rest, which fall by themselves; a Trinket that is loved and looked after makes every press pay a little more, still inside the daily limits. A new pot sometimes carries an order, such as three different members stirring it, or is swirled by three members stirring together, and either adds a little growth; the Trinket also wishes for one ingredient a day, a pot on the fire can be spiced for coins, days in a row with a cook or a serve are counted with a coin bonus at a week and at a month, and once a week there is a soup festival in which a press pays more. The Trinket's message shows each of these while it is on, and the bot owner can change or turn off any of them.
Style your Trinket
Every member has a card: a picture of the Trinket that is theirs to dress up. There are four colour tints (rose, mint, sky and violet) and ten accessories (a bow, glasses, a chef's hat, a crown, a laurel wreath that a server earns for all its members by finding every recipe in its recipe book, a collector's cap that a server earns the same way by cooking every ingredient of its ingredient album, and four seasonal ones: a pumpkin hat, a winter hat, a flower crown and a sun hat), and a member can wear one of each. They are drawn on the picture by the bot, so the Trinket in its channel is never changed by them, and nothing here is something you set up: the list is the same on every server. It is part of the Trinket, so it works while the Trinket is on and not while it is off.
- Free for everyone: the rose tint and the bow, so a server that doesn't keep levels still has something to put on.
- By Trinket level: mint at level 5, glasses at level 8, sky at level 10 and the chef's hat at level 15. The level comes from the XP a member has earned in your server, and it counts whether or not levels are switched on now.
- By a season of Leveling: the crown for a place in the top 3 of a finished season, and the violet tint for a place in the top 10. A place is kept, so it stays for good once the season is over.
- By the time of year: the pumpkin hat is out from October 20 to November 2, the winter hat from December 1 to January 6, the flower crown from March 20 to May 31 and the sun hat from June 15 to August 15 (UTC dates, the same every year, the last day included). A member who wears one while it is out keeps it, and can wear it all year; one who has not sees it in the picker as back in the month it returns, and can't choose it until then. There is nothing to set up for it.
A member chooses with the Style button on the Trinket's message, with /trinket style or with the Style my Trinket button under /trinket me. Each opens a private picker with two menus and the card, which changes at once, and lists what is still to earn. /trinket visit shows another member's card to the channel, and /trinket top puts the emoji of what a member wears by their name. A member can keep their card to themselves with /trinket hide (or the button on the picker): visit then refuses it and top leaves the badge off. A member's choice, and the seasonal accessories they have kept, are kept for them in your server until they erase it with Forget my data on /trinket me, until it has gone 400 days without a change, or until the server's data is deleted, and it is not part of a backup.
Recipes
A recipe is a named combination that a pot can turn out to be when it is served. There are eleven, three of them secret, the same in every server, and Let a served pot be a recipe on the Trinket page turns them on; it is off by default. Nothing changes while the pot simmers and no button does anything new: the pot is looked at once, when it is served, and at most one recipe counts for a meal, the one worth the most. Which one a pot turns out to be depends on what the members did with it: how many different members stirred, seasoned or tasted it, how many had a hand in it, what is in the pot (a rare find, or the Trinket's favourite), whether its event was answered, and how soon after it was ready somebody served it.
- A recipe adds a small amount of growth to that meal, on top of the pot's own bonus and a rare find's, and outside the most that stirs and seasonings can add to one pot (the cap the Cauldron upgrade raises): recipes that ask for many helpers would otherwise lose their reward to a cap those same helpers have already filled. Each recipe has a number of its own, at most 3 percent, which only the bot owner can change, so a meal is never worth more than the pot's capped bonus, a rare find, one recipe, and the one order, the one swirl and the one spice a pot can have, each at most 2 percent.
- The private reply of the serve says which recipe it was and what it added, for example “Recipe: Hearty stew, +1.5% on this meal.”, and the first time your server makes one it says “New recipe discovered!” as well. The Trinket's message is not redrawn for it.
- Your server keeps a recipe book of the recipes it has found. Open it with the Recipes button on the Trinket's message (it is there while recipes are on) or with
/trinket recipes. It is private to the person who opens it, shows each recipe found with what it adds and what the pot needed, and a question mark for each one that has not been found yet, with a hint for all but the three secret ones, with the count. The book holds the server's recipes and the day each was first served, and nobody's name: it stays when a new Trinket hatches, it is deleted with the server's data, and it is not part of a backup (the switch is).
Commands
/trinket setup— hatches the Trinket in a channel you choose, or moves its message there (requires Manage Server)./trinket name— renames it. By default only people with Manage Server can; set Who may rename it to Anyone and every member can./trinket status— anyone can use it; it shows the Trinket's card and facts, and the answer is private to the person asking./trinket hatch— starts over with a new Trinket: its size goes back to 1 bowl, its meals and pot are reset and it gets a new favourite, its message is updated in place (a new one is posted only if the old one is gone), and your settings stay. It asks for confirmation first (requires Manage Server). The same button is on the Trinket page./trinket me— anyone can use it; it shows you, privately, your turns this month and in all (or says that the server keeps no stats), then your title, level, XP and coins if the server has levels or coins on, with a Forget my data button and, with levels on, a button to hide from the leaderboards. See Caretaker stats and Levels, titles and coins for what those do./trinket top— anyone can use it; it shows, privately, the leaderboard of the month or of all time, ten members a page, and mentions nobody. Choose the list with view and the page with page; the buttons under it turn the page. It works only while levels are on./trinket shop— anyone can use it, while the shop is open; it lists, privately, what the server sells for coins, cheapest first. Pick one to see its card and press Buy. See Levels, titles and coins for what the shop needs./trinket style— anyone can use it; it opens, privately, the picker for your own card./trinket visit— anyone can use it; choose a member and their card is shown to the channel, with what they wear and nobody pinged, unless they keep it to themselves./trinket hide— anyone can use it; it keeps your card fromvisit, and hide: False shows it again. See Style your Trinket./trinket recipes— anyone can use it, while recipes are on; it shows, privately, the recipes your server has found and a hint for the rest. See Recipes.
The commands work only inside a server.
What TrinketBot needs
In the Trinket's channel, TrinketBot needs to view the channel, send messages and embed links — that is the message itself. It also needs attach files, because the picture is sent as a file; without it the message is still posted and kept up to date, just without the picture. To ping a role that isn't set to “anyone can mention” (the milestone or hungry role) it needs Mention Everyone, as described under Tips & troubleshooting. If it can't post or edit in the channel, the Trinket page and the module's tile on the Overview say so.
What is stored: for the server, the Trinket's name, size and settings; for a member, only their Discord user ID. The log of turns at the pot (when they cooked or served, and what they added) is kept for 400 days. The Trinket itself also names who cooked and who served last, and when it was last petted (not by whom), and keeps those until a newer turn replaces them, it hatches again, the member erases them with Forget my data, or the server's data is deleted. While a pot is on, who stirred, seasoned or tasted it, and who answered its event, are kept too, until the pot is served or a day has passed (see Stir, Season and Taste and Events above). If a member styles their card or hides it, their tint, accessory and choice are kept under their ID as described under Style your Trinket above. If you switch on caretaker stats, each member's turn counts are kept too, as described under Caretaker stats above, and with levels, coins and the shop on, their XP, their coin balance and the marker of a purchase that is going through are kept on the same record, as described under Levels, titles and coins. Nothing from anyone's messages is ever kept. All of it is deleted with the server's data. The settings and the shop's items are included in backups, except the caretaker stats, levels, coins, shop and upgrades switches; the Trinket itself (its name, size and message) and the stats, XP and coins are not, and a restore never changes a switch.
58. Trivia
Trivia gives a server a question of the day and quiz nights with a scoreboard, from questions you write yourself and a small pack of ready-made ones. It is off until a server's admins switch it on. Its page is under Activities → Quick games → Trivia in the dashboard, and the command is /trivia.
- Questions: a question has its text (up to 300 characters), two to four answers with exactly one right (up to 80 characters each), and optionally a category (up to 30) and an explanation shown with the right answer (up to 200). Write them one at a time on the page, or paste a list: a blank line between questions, the question on the first line, then one line for each answer, starting the right one with
*and the others with-, and optionalCategory:andWhy:lines. If one question in a pasted list has a problem, nothing is added and the page says which line. Copy my questions as text gives the same format back, to paste into another server. A server can keep 50 questions of its own on the free plan, 200 on TrinketSupporter and 500 on TrinketChad; the ones past the limit are kept but not asked until there is room. - The built-in questions: 60 ready-made questions in six categories (Science, Geography, History, Nature, Language and Everyday knowledge), about things that stay true. They are asked next to your own, do not count against the limit, and can be switched off on the page.
- The daily question: at the time and in the timezone you choose, TrinketBot posts a question with the answers as buttons A to D in the channel you choose. Each member answers once; they are told at once, privately, whether they were right. After the number of hours you choose (a day by default) the post is edited to show the right answer, the explanation and how many got it right. A right answer scores 100 points and adds a day to the member's streak of days in a row. No question is asked twice until every question has been asked, and you can limit it to one category. It is posted by a check that runs every five minutes, so it can be a few minutes late; if the bot was down at the time it is still posted when it is back within three hours.
- Quiz nights:
/trivia startruns a quiz night in the channel it is used in, with 5 to 20 rounds of 10 to 30 seconds and an optional category. It needs the Manage Messages permission or the role you choose on the page. Each round is a question with the answers as buttons and a countdown. A right answer scores 100 points, 5 fewer for each second that has passed and never fewer than 10, so the faster the better; the right answer, who got it and the scoreboard are shown when the time is up, and a podium at the end. Only one quiz night runs in a channel at a time./trivia stopends it: whoever started it, or anyone with Manage Messages, can. If the bot restarts in the middle of one, the quiz night ends with “the game was interrupted” and the scores of the finished rounds. - A weekly quiz night: on the page you can also have a quiz night start by itself every week, on the day and at the time you choose in your timezone, in the channel you choose, with the rounds and seconds you set as the defaults. It is off until you switch it on and never starts the moment you save it. It can post a notice in the channel some minutes before (it pings nobody), and members who asked for a Heads-up when a trivia night starts are told as usual. It is started by the check that runs every five minutes, so it can begin a few minutes late, and a night more than half an hour late is skipped. If it cannot start (the channel is hidden from TrinketBot, or there are too few questions) the Overview says so and it tries again the next week.
- Scores:
/trivia topshows the best members of this month or of all time (withpublicit is posted in the channel, without pinging anyone), and/trivia meshows your own points, right answers and streak. Members who have left the server are not listed. You can also have a right answer pay points of the Points module, if that is switched on, and Leveling XP (up to 25 for each right answer, the same for the daily question and for every round of a quiz night), if Leveling is switched on. - Your data: TrinketBot keeps each player's points, right answers and streak by their Discord account, with the month, for as long as the server uses Trivia. Forget my scores in
/trivia measks first and then deletes them in that server, and an admin can reset every score on the page. Trivia's settings and questions are not part of a backup. What is stored, and for how long, is in the Privacy Policy.
59. Looking for group
A board where members find people to play with. A member runs /lfg post, picks one of your server's games and says how many players they want, and TrinketBot posts one card with Join, Leave and Close buttons. The card shows who is in, how full the group is (for example 2/4), when the post ends, and, once the group is full, a voice channel to meet in if you set one for the game. /lfg when asks when people can play, and /lfg list shows what is open. It is off until you switch it on, and it never reads anyone's messages.
In the sidebar it is under Activities → Quick games → Looking-for-group board.
Setting it up
- Turn on the switch at the top of the page, choose the channel where posts go and press Save. With no channel chosen, a post goes to the channel the command was used in. Send a test posts a sample card marked as a test: its buttons are switched off, nobody is pinged and nothing is recorded.
- Games is the list members choose from. A game has a name (up to 40 characters), an optional emoji, the usual party size (2 to 99), an optional role to ping and an optional voice channel to suggest once a group is full. A game can be switched off without deleting it. Deleting a game leaves the posts that are open as they are. How many games a server can have depends on its plan: 5, 15 or 40. A game past the limit is paused (kept, but not offered for a new post), the newest first.
- Who may post is everyone, or only the members who have a role you choose. How long a post stays open is the length used when a member picks none: 30 minutes, 1, 2, 4, 12 or 24 hours.
- The two waits keep a role from being pinged over and over: after a member's post pinged a game's role, that member can ping it again only after their wait (10 minutes unless you change it), and the same channel only after the channel's wait (2 minutes). A post made inside a wait is still posted, without the ping, and the member is told when it can go again.
- Say when a group is full is off until you switch it on. When the last place is taken, TrinketBot replies under the post and mentions the host and the members of the group (the first 50 at most, never a role or everyone), so they know it is time to play. One post gets at most 3 such replies in 10 minutes, and if the reply cannot be posted the member still has their place.
- The page also lists the newest posts and polls, with a link to each, so you can see what members have been doing; finished ones are kept for 7 days.
What members do
/lfg posttakes the game (the box offers your server's games as they type), and, if they like, a party size, when (up to 60 characters of their own words, such as “tonight at 20:00”), a note (up to 200) and how long the post stays open. The poster takes the first place. The names on the card are written as code, never as mentions, so nobody is pinged by a name.- Join and Leave change the places, and a place can never be given twice: the last place goes to one member, however many press at once. A full group says Full, Join switches off and Leave still works. Only the poster can Close, and a member has one open post for each game. A post ends by itself when its time is up: the card says Expired and its buttons switch off.
- If you delete a post's message, or the channel it is in, the post is closed.
The role ping
A game's role is pinged once, with the post. TrinketBot refuses to ping @everyone, and tells you on the page when it cannot ping the role you chose: either turn on “Allow anyone to @mention this role” for it in Server Settings, or give TrinketBot the Mention @everyone, @here and All Roles permission. Only that one role can be pinged by a post; the text a member writes pings nobody.
When can you play?
/lfg when takes two to six times, separated by commas (up to 30 characters each, for example Fri 20:00, Sat 18:00, Sun afternoon). TrinketBot posts a message with a button for each time and the number of members who can make it, which changes as people press: a press says “I can”, and another press takes it back. The member who asked picks the best time from the menu (TrinketBot announces it in the channel, without pinging anyone) or closes the poll. It ends by itself after 48 hours, and a member has one open poll at a time.
Permissions
In the channel for posts, TrinketBot needs to view the channel, send messages and embed links. A post is edited by its id, so it does not need to read the channel's history. To ping a role that isn't set to “anyone can mention” it needs Mention Everyone, as described under Tips & troubleshooting. If the channel you chose is gone or TrinketBot cannot post in it, the page and the module's tile on the Overview say so.
What is stored
For the server, the settings and the games. For each post: who posted, the game and the words they wrote (when and note), the members who joined (their Discord user ID and the display name they had when they joined, shown on the card) and when it was made and ended. For each poll: who asked, the times, and the user IDs of the members who pressed each time. A post or poll that ended is kept for 7 days and then deleted. Nothing from anyone's messages is kept. All of it is deleted with the server's data. The settings and the games are included in backups; the posts and polls are not.
60. Themes and rhythm
Two ways to make a server change with the calendar. A theme changes some of your settings between two dates and puts them back afterwards: a Halloween colour, a double-xp weekend, a different welcome for the server's anniversary. A rhythm gives a channel a weekly routine: a topic and a name for each day, opening hours, and a slowmode that follows the time of day. It is off until you switch it on, it has no commands, and it never reads anyone's messages.
In the sidebar it is under Tools → Server → Themes and rhythm. The page has two tabs, Themes and Channel rhythm, a timezone that every date and hour is read on, and the usual switch and save bar at the top. Every five minutes TrinketBot works out what should be true now from the dates and the clock, so a bot that was away at the start or the end of a theme simply catches up in its next round.
Themes
A theme has a name, a start and an end (a date and a time on the server's clock), an optional comes back every year (the same dates every year, shorter than a year) and a list of up to ten changes. A change is one of these, and nothing else (no module switch, and nothing about moderation):
- The accent colour or the footer text of the Server style.
- Which message template a welcome message (join, goodbye or boost) is sent from, or the built-in message.
- The server-wide xp boost of Leveling, for as long as the theme lasts (a theme with a boost can last at most 30 days, the longest a boost can run). It ends with the theme by itself.
- An automation rule switched on or off.
Preview what it would change shows each setting as it is now and as it would be during the theme, without changing anything. When a theme starts, TrinketBot first writes down what every setting holds, then sets them; when it ends it puts each one back — but only if the setting still holds what the theme set. If someone changed it in between, their value stays, and the page says so. If a setting cannot be put back (Discord or the database was unavailable) TrinketBot tries again every five minutes until it works, and the Overview says so meanwhile. If two themes change the same setting at the same time, the one that began first wins and the other leaves that change out; the page says which. A theme you switch off, delete or edit while it is under way is put back first (an edit of its dates or its changes starts it again straight after). Each start and end is also written in the settings history, as “Theme: …”.
How many themes a server can have depends on its plan: 2, 6 or 15. A theme past the limit is paused (kept, not run), the newest first. The record of a finished theme is kept for 30 days.
Channel rhythm
Give a text or announcement channel a rhythm and choose what it does. Each part can be used alone:
- Topic: one for each day of the week, or a list that goes round one topic a day. Name: one for each day of the week, such as
music-monday. Discord allows only two name or topic changes in ten minutes, so TrinketBot changes a name or topic only when the day's value changes, and leaves a change somebody made by hand alone until then. - Opening hours: for each weekday, the hours it is open (a night that runs past midnight is the end of one day and the start of the next). Outside them @everyone cannot send messages, add reactions or start threads in the channel, and it is opened again exactly as it was: TrinketBot writes down what @everyone had before it closes the channel, and gives back only what is still as the closing left it. Optionally it posts one short note when it closes, saying when the channel opens again, and takes it down when it opens. A channel somebody opens by hand during closed hours is closed again at the next round. The channel stays visible and read-only unless you also switch on Hide the channel while it is closed, which takes View Channel away from @everyone as well, so the channel disappears from their list; TrinketBot first gives itself access to the channel so it can open it again, and gives that back last. Either way, a role or person with a permission of their own on the channel (to send there, or to see it) is not stopped by @everyone's closing.
- Slowmode: windows of the week with their own slowmode (text channels only), and the slowmode to use outside them.
The page shows, for each channel, what is true right now: open or closed and when it opens, the topic, the name and the slowmode against what they should be. If the raid lockdown is holding a channel, its hours and slowmode are left alone until the lockdown ends, so the two never fight. A channel that was deleted, or that TrinketBot cannot see, is reported on the page and on the Overview and skipped. How many channels can have a rhythm depends on the plan: 3, 10 or 25, the newest past the limit paused. Deleting the rhythm of a channel it has closed opens the channel first.
Permissions
A theme needs nothing in Discord. A channel's rhythm needs Manage Channels in the channel for the topic, the name and the slowmode, and Manage Roles to close and open it at set hours; the permission check on the Overview lists both. For the closing note it also needs to send messages there.
What is stored
For the server, the settings, the themes and the channel rules, with the Discord user ID of the admin who made each (shown to nobody outside the server). For each run of a theme: what every setting held before and what the theme set it to (colours, texts and the ids of the rules and messages concerned), for 30 days after it ends. For a channel it has closed: what @everyone had before, until the channel is opened again. No member's data is stored, and nothing is read from anyone's messages. All of it is deleted with the server's data. The settings, the themes and the channel rules are included in backups; what a theme did and what a rule did to a channel are not.
61. Predictions
Members bet their points on what happens: a match, a stream, a vote. A staff member runs /predict create, TrinketBot posts one message with a button for each outcome, members press one and type how much, and when the result is known a staff member settles it. The winners share the whole pot in proportion to their stakes. It uses the balance of the Points & shop module, so Points has to be switched on too, and it is off until you switch it on.
In the sidebar it is under Community & streaming → Levels & points → Predictions.
Setting it up
- Turn on the switch at the top of the page and press Save. Choose a channel if every prediction should go to the same place; with none chosen, a prediction is posted in the channel where
/predict createwas used. - Who may run predictions: anyone with Manage Messages, and anyone with the role you choose, can open a prediction, stop the betting, settle and cancel. Everyone can bet.
- The smallest and the largest bet (10 and 1,000 points unless you change them). A prediction keeps the limits it opened with. How many predictions can be open at the same time depends on the plan: 1, 2 or 3 (a prediction counts until it is settled or cancelled).
How a prediction goes
/predict createshows a form: the question (up to 100 characters), two to four outcomes, one on each line (up to 40 characters each), and how long betting stays open, from 5 minutes to 24 hours (write 30m, 2h, 1h30m or 1d).- The message shows, for each outcome, the points on it, how many members bet, its share of the pot and what a point on it would pay; it is updated when bets come in, at most once in ten seconds.
- A member has one bet: pressing the same outcome again adds to it, up to the largest bet; pressing another outcome is refused. The stake is taken from the member's Points balance at once, and nobody can bet more than they hold.
- When the time is up the buttons go. A staff member presses the Staff button on the message (or uses the dashboard), chooses the outcome that won and confirms. The winners share the whole pot in proportion to their stakes, each share rounded down; what the rounding leaves (always less than one point for each winner) stays unassigned and is written down. If nobody bet on the winning outcome, or the prediction is cancelled, every stake is given back, also to a member who has left.
- A prediction whose message or channel is deleted is cancelled and the stakes are given back, and so is one that nobody settles within 7 days after the betting closed, so points are never kept for good.
- Every opening, bet, closing and ending goes to your activity log under Points & shop, and the page has a ledger of the last 30 predictions that are over, with each bet.
What members do
Press an outcome, type the number of points, and see the answer in private. /predict mine shows a member their own bets and how each stands.
Permissions
In the channel, TrinketBot needs to view the channel, send messages and embed links. A message is edited by its id, so it does not need to read the channel's history, and nothing in a prediction pings anyone.
What is stored
For the server, the settings. For each prediction: the question and outcomes, who opened it and who ended it, the times, and the sums (the pot, what was paid, the winners and the rounding left over). For each bet: the member's Discord user ID, the outcome, the stake and what it paid. A prediction that is over is kept for 90 days, its bets with it, and then deleted; everything is deleted with the server's data. The settings and the predictions are not included in backups.
62. Question of the day
Something to talk about every day. At a time you choose, in a channel you choose, TrinketBot posts either a question of the day or a this-or-that: two options with a button each, one vote for each member, with the result shown a day later. Unless you turn it off, each post opens a public thread under it, named “Discuss: …”. It is off until you switch it on, and TrinketBot never reads what is said in the thread or in the channel.
In the sidebar it is under Community & streaming → Suggestions & polls → Question of the day.
Setting it up
- Turn on the switch at the top of the page, choose the channel, the time of day and the timezone, and press Save. The post is made by the five-minute round, so it can come a few minutes after the time. If TrinketBot was down at the time, it still posts when it is back within three hours; later than that, the day is skipped.
- What is posted: questions only, this-or-that only, or take turns (a question one day, a this-or-that the next).
- Role to ping: optional. It is pinged once with each post, and nobody else is. To ping a role that isn't set to “anyone can mention” TrinketBot needs Mention Everyone, as described under Tips & troubleshooting; the page says when a role would notify nobody.
- Discussion thread: on by default. It needs Create Public Threads in the channel; without it the post is still made, with no thread.
- Post one now makes a real post right away, outside the schedule (the scheduled one still comes), and Skip the next post leaves the next scheduled day out. The same as
/qotd post-nowand/qotd skipfor people with Manage Messages.
The pool
TrinketBot comes with 100 light, funny questions in ten topics and 40 this-or-that pairs, and you can switch them off. Add your own on the page: a question (up to 200 characters) or a this-or-that (two options of up to 80). How many of your own you can keep depends on the plan: 50, 200 or 500. An item past the limit is paused (kept, but not asked), the newest first. Nothing is asked twice until everything of its kind has been asked once; then the round starts again.
This or that
Members press A or B. A member votes once and is told at once, in private. The counts on the post are updated as votes come in, at most once in ten seconds. A day after it was posted the post is edited to show the result, and the buttons go.
Permissions
In the channel, TrinketBot needs to view the channel, send messages and embed links, and create public threads for the thread. A post is edited by its id, so it does not need to read the channel's history.
What is stored
For the server, the settings, your own items and which items have been asked. For each post: the text, when it was posted and, for a this-or-that, its final counts. A member's vote (their Discord user ID and the option) is kept only until the result is shown, a day later, and then deleted. A post is kept for 90 days and then deleted; everything is deleted with the server's data. The settings and the items are not included in backups.
63. Confessions and Ask-me-anything
Members send an anonymous confession with /confess write, or a question to an Ask-me-anything (AMA) with /ask. Nothing is posted until your staff approve it, and what is posted has no name on it. It is off until you switch it on, and it never reads anyone's messages. In the sidebar it is under Community & streaming → Suggestions & polls → Confessions.
Setting it up
- Choose two channels and press Save, then turn on the switch at the top. The channel for confessions is where approved ones are posted. The staff review channel must be a channel only your staff can see: TrinketBot refuses a channel that @everyone can see, and the same channel for both. What is said in the review channel is not copied to the message log.
- The staff role and members with Manage Server press the buttons in the review channel and open and end an AMA. The role that can see who wrote a post is empty by default, which means nobody can, an administrator included. Read Who wrote it before you choose one.
- Wait between two (10 minutes unless you change it, 1 to 1,440) and most in a day (5, 1 to 50, counted in the 24 hours that begin with a member's first one) apply to everyone, for confessions and for questions separately. A member who is blocked or in a timeout cannot send at all, and is told only “You cannot use this.”
- Start a thread under each confession lets members reply under their own names; it needs the Create Public Threads permission. The staff read AMA questions first is on by default; switching it off sends a question straight to the answerer's list (it still passes the checks below). There is no setting that lets a confession skip the staff.
What members do
/confess writeopens a form for up to 1,500 characters. The member is told “Sent for review” and nothing after that: they are not told whether it was posted, and nobody is sent a direct message./confess forgetcuts the link between the member and everything they sent in the server, at once (see Who wrote it).- Under a posted confession there is a Report button. A report puts a message in the review channel with the number, a link and the buttons Remove the post and Keep it; the member who reported is not shown. A member can report a post once.
What the staff do
- Every submission arrives in the review channel with Approve, Reject and Reject and block. The first press wins: a second staff member is told it was decided. Approving a confession posts it as “Confession #1”, “Confession #2” and so on, a number for the server that has no gaps among the posted ones. Rejecting tells the member nothing and deletes the words. Reject and block also puts the author on the block list, without showing anyone who it is.
- Before it reaches the queue, a text passes your server's Message Filters (word, link and pattern rules) and the signs Scam Shield looks for; one that fails is refused and never kept, and one that only looks odd goes on with a note. @everyone, @here, mentions of members and roles, and Discord invite links are made harmless or taken out, in the queue and in the post, and a link written as a word has its address shown.
- A posted confession can be taken down with one click, from the queue message or from a report. A confession or message you delete by hand counts as removed; a submission nobody decides on for 14 days is closed and its words are deleted.
- The block list is on the page. An entry made by Reject and block has no ID in the list, only a note, because showing it would tell everyone who reads the list who wrote a rejected confession. You can also add a member by their Discord ID.
Who wrote it
A submission is saved with the Discord ID of its author, so that staff can act on abuse. It is never put in a message, in the dashboard, in a log line or in a backup. It is kept for 30 days after the decision, then cleared by a daily clean-up. Only members who have the role you chose can ask for it: a Reveal author button asks first, the name is shown only to the member who pressed it, and every reveal is written to the reveal log on the page and to your moderation log (the Moderation cases category) with who asked and which post. A reveal that cannot be written down is not made. With no role chosen, nobody can reveal anyone.
Ask-me-anything
- A staff member opens one with
/ama start: a title, how long it runs (1 to 168 hours, 24 by default), the channel (this one by default), who answers (the person who opens it by default), and whether the askers are anonymous (their names are shown by default). One AMA is open at a time. TrinketBot posts an announcement with a Next question button./ama stop, or the End button on this page, ends it. - Members ask with
/ask(up to 300 characters) and the staff approve questions like confessions, unless you switched that review off (then a question goes straight onto the answerer's list). The answerer, or the staff, press Next question and the oldest approved question is posted as “Question #1” with a thread. Two presses at once get two questions, and a question is never posted twice. The answerer answers as ordinary messages in the thread, which TrinketBot never reads. Questions nobody read when the AMA ends are not posted, and their words are deleted.
Permissions
In both channels TrinketBot needs to view the channel, send messages and embed links. A thread needs Create Public Threads. If a channel is gone, hidden, or the review channel is open to everyone, the page and the module's tile on the Overview say so.
What is stored
The settings and the block list. For each submission: its words until it is posted, rejected, taken down or closed (then they are deleted; a posted one lives only in the public message), the Discord ID of its author for 30 days after the decision, the staff member who decided, the number and the message it was posted as. For each report: the post, and the reporter's Discord ID for 30 days. A member's last send and the count of the day, kept for 2 days. The reveal log (who asked, which post) for a year. Ended AMA sessions for 90 days. All of it is deleted with the server's data. Nothing of this is included in backups.
64. Collectible drops
Now and then an item drops in one of your busy channels, with a Claim button, and the first member to press it keeps the item. Items are small collectibles (a name and an emoji): forty built-in ones in five sets of eight, and any you add yourself. Members look at what they have caught with /collection, give one away with /gift and swap with each other with /trade. Drops are off until you switch them on, and they never read anyone's messages.
In the sidebar it is under Activities → Quick games → Collectible drops.
Setting it up
- Turn on the switch at the top of the page, choose up to three channels and press Save. TrinketBot needs to view each channel, send messages and embed links there. Send a test posts a sample drop marked as a test: its button is switched off, nobody is pinged and nothing is recorded.
- A channel gets a drop after a random wait between the shortest and the longest you set (half an hour to three hours unless you change it, from 10 minutes up to a day), but only if the channel has been active in the last 30 minutes. TrinketBot knows that from the time of the channel's last message and from nothing else: it never reads what anyone wrote. A quiet channel keeps its drop until it is busy. Two drops in one channel are never closer than 10 minutes, and a drop that nobody catches in 10 minutes gets away.
- Most a member can catch in a day (20 unless you change it, the day being the UTC day) keeps one member from taking every drop. A member who has reached it is told, and the drop stays for the others.
- While the streamer is live: choose 1.5 times as often or Twice as often and the wait between drops is shorter while a stream is on, never under 10 minutes. A wait that was already running when the stream began is shortened too. It counts the streams Live status has noticed, so it does nothing in a server that has not switched Live status on. The default is As usual.
- Your own items have a name (up to 40 characters, none of
@ < > ` * _ ~ | \ [ ] ( ) #), an emoji and a rarity. They drop together with the built-in ones, in the rarity you give them, and members collect them in a set of their own, which is never complete because you can add to it. How many a server can have depends on its plan: 10, 40 or 100. An item past the limit is paused (kept, and members keep what they caught of it, but it doesn't drop), the newest first. Removing an item takes it from the members who had it. - Rewards for completing a set: a role for each of the five built-in sets and some points (through Points, and only while Points is on). A member gets them once, the first time they hold all eight items of a set. TrinketBot needs the Manage Roles permission and a role above the one it gives, as described under Tips & troubleshooting; if it can't give the role the member is told, and it is tried again the next time they collect something.
- The page also lists the newest drops with who caught them and a link to each; finished ones are kept for 7 days.
Rarity
Every drop picks a rarity first, then one item of it: common 60%, uncommon 25%, rare 10%, epic 4% and legendary 1%. In a built-in set, three items are common, two uncommon, one rare, one epic and one legendary. Items of your own join the rarity you give them, so a rarity with no item is never picked.
What members do
- Claim is a button on the drop. The first press wins, however many members press at once, and the message changes to say who caught it. A member who was too late is told so, privately.
/collection viewshows a member's items one set at a time (choose the set from the menu), with how many of each they have; leave member out to see your own./collection toplists the ten members who have found the most different items; members who have left the server are not listed, and their items stay. Both are private to whoever asks and mention nobody./gift member itemgives one of your items to a member. TrinketBot asks you to confirm, and the item is theirs the moment you do; the channel is told, without pinging anyone./trade offer member give wantoffers one of your items for one of theirs. The offer is posted in the channel with Accept, Decline and Withdraw buttons, and pings the member it is for and nobody else. Accepting swaps the two items in one step and checks that both still have what they offered. An offer ends by itself after 10 minutes. There is one open offer between two members at a time, and a member can have three open./collection forgeterases a member's own collection after a confirmation. It works whether drops are on or off.
Permissions
In each channel drops appear in, TrinketBot needs to view the channel, send messages and embed links. A drop is edited by its id, so it does not need to read the channel's history. If a channel you chose is gone or TrinketBot cannot post in it, the page and the module's tile on the Overview say so, and TrinketBot keeps trying.
What is stored
For the server, the settings, the channels and your own items. For each drop: the item, the channel and message, and who caught it (their Discord user ID); a drop is kept for 7 days after it ends and then deleted. For each member who has caught anything: their user ID, each item they hold and how many, how many drops they caught today, and which sets they were rewarded for. For each trade offer: the two members' user IDs and the two items, kept for 7 days after it ends. Nothing from anyone's messages is kept. All of it is deleted with the server's data, and a member can erase their own with /collection forget. None of it is included in backups.
65. Staff applications
A way to take applications for your team. Members press an Apply button, answer your questions in pop-ups, and the answers go to a private channel where your reviewers read them, vote and decide. An approval can give the applicant a role and tells them the result by direct message. It is off until you switch it on, and it is separate from Forms, which collects answers it never stores.
In the sidebar it is under Members → Help desk → Staff applications. You choose the review channel (private to your reviewers), a reviewer role (pinged on each new application; its members vote), an optional decider role (besides people with Manage Server, who may press Approve and Deny) and how many Yes votes approve an application by themselves (0: only a decider's button does). Then you add the kinds of application and post the panel: one message with an Apply button for each kind that is open.
Kinds of application
- Each kind has a name, a description, up to fifteen questions and the rules for who may apply: the age of the Discord account and the time in the server (in days), a role they must have, the wait after a denial (0 to 90 days), whether it is open and an optional deadline. Questions are the same as in Forms (short and long answers, a dropdown, buttons, checkboxes, a file), asked five to a pop-up: after the first pop-up the applicant presses Next for the following one. What they have typed is kept in memory for 30 minutes and nowhere else until they send the last page.
- The answers are shown to the reviewers in one message, which Discord limits to 6,000 characters, so the answers of a kind can add up to at most 4,200 characters (the page shows the running total and refuses a save over it). Shorten the longest answer of some questions, or ask fewer.
- A role given on approval can't carry powerful permissions (Administrator, Manage Server, Roles or Channels, Kick or Ban): give those by hand. If the role can't be given when the application is approved (TrinketBot's own role is below it, or it lacks Manage Roles), the Overview says so and TrinketBot tries again by itself, at a growing interval, until it works; Try the roles again on the page tries at once.
- Two messages of your library can tell the applicant the result by direct message, one for an approval and one for a denial (TrinketBot's own words otherwise). The reviewer's optional note is added after either. An applicant whose direct messages are closed is noted on the review message.
- How many kinds a server can have depends on its plan: 2, 5 or 10, as set out in Premium & Patreon. A kind past the limit is paused (kept, not shown on the panel), the newest first.
Reviewing
- Each application is posted in the review channel as a message with the answers and these buttons: Yes, No and Abstain for the reviewers, and Approve, Deny and Interview. A reviewer has one vote, shown on the message, and can change it by pressing another button until the application is decided. Nobody votes on or decides their own application.
- When the Yes votes reach the number you set the application is approved on the spot. Approve and Deny, which ask for an optional note to the applicant, are for the decider role and people with Manage Server; two people deciding at once cannot both win.
- Interview opens a private thread in the review channel with the applicant and the reviewers. A private thread needs the Create Private Threads permission, which the invite link does not ask for: give it to TrinketBot's role in the review channel if you want interviews, and the button tells you when it is missing.
- A member sees where their own applications stand with
/applications status, and a reviewer lists the applications waiting for a decision with/applications list. A message deleted by hand is posted again by the next round while its application waits.
What is stored
For each application: who applied (their Discord user ID), which kind, what they answered (and the names and addresses of files they attached), when they applied, each reviewer's vote (the reviewer's user ID and the vote), who decided it, the optional note to the applicant and whether the result message and the role went through. An application is deleted 90 days after it is decided, with its answers and votes, or at once when its kind is deleted. A denial's wait is counted from the decision, so it never lasts longer than the 90 days it is kept for. Answers typed but not yet sent are held in memory for 30 minutes. Nothing is read from anyone's messages. All of it is deleted with the server's data. The settings and the kinds of application are included in backups; applications, answers and votes are not.
66. Forum helper
Looks after the forum channels you choose (and media channels, which work the same way). When someone makes a post, TrinketBot writes one message in it with your guidelines and a Mark as solved button. The owner of the post, the staff role and people with Manage Threads or Manage Server can press it, and the post is tagged, archived and, if you like, locked. A post that goes quiet gets a reminder and then a notice before it is archived. It is off until you switch it on, it has no commands, and it never reads what anyone writes.
In the sidebar it is under Members → Help desk → Forum helper. You add forums one at a time (up to ten), and each has its own rules, so a support forum and a showcase forum can behave differently.
- First message. A message from your library (your guidelines; it can use
{mention}for the post's owner and{channel.name}for the post's title), or TrinketBot's own short guidelines. TrinketBot adds the Mark as solved button to it. It can be pinned, and an untagged post can be told once to add a tag. Discord's own “require a tag” setting is the way to make a tag compulsory. - Mark as solved. The button is switched off and a line says who pressed it. TrinketBot then puts on the tag with the name you chose (matched without regard to capitals; none if empty), locks the post if you chose that, and archives it. An archived post is reopened by anyone who writes in it unless it is locked; a locked one is reopened by staff.
- Quiet posts. After the days you set, the owner is reminded once in the post (their name is in the message and they are pinged only if you chose that). After more days a notice says the post will be closed in a day, and a day later, if nobody has written, it is archived. A person writing ends it, and the post can be reminded again later. Quiet is counted from the last message by a person, worked out from the message's time alone; pinned and locked posts are left alone, and a few posts are looked at every five minutes, so a forum with many old posts is worked through over hours, oldest first.
Permissions
TrinketBot needs to view the forum and send messages in its posts. Putting on a tag, locking and archiving need Manage Threads, which the invite link does not ask for: give it to TrinketBot's role in the forum if you want posts marked solved or closed. Without it everything else works, a closing notice is never sent (a post that could not be closed is not warned about closing), the Solved button says what could not be done, and the page and the Overview say the permission is missing. Pinning needs Pin Messages or Manage Messages.
What is stored
The server's settings (the switch, the staff role) and, for each forum, its rules. For a post it has acted on, the post's ID, the IDs of the messages TrinketBot posted there, when a person last wrote in it (a time) and when it reminded, warned or marked it solved. No member's ID is stored, and nothing anyone wrote. A post's record is deleted with the post, or 90 days after the post was made, and everything is deleted with the server's data. The helper's settings are not included in backups.
67. Wrapped
A recap people want to share. A member uses /wrapped to see a card and a few lines about their own season, year or all time: their level and place, their games, trivia, badges and thanks, tournaments won and more. They can post it in the channel after TrinketBot asks them to confirm. The server can post a recap of its own, once a year on a date you choose or whenever you press Post it now. It is off until you switch it on.
In the sidebar it is under Community & streaming → Events & celebrations → Wrapped.
What is in a recap
Only what TrinketBot already keeps for the modules you have switched on. It tracks nothing new: no messages, no time in voice, and it never reads what is said in a channel. A stat TrinketBot has no honest answer to for a period is left out of that period, never guessed. This season is the running month (UTC), this year is the calendar year so far, and all time is everything TrinketBot has kept.
- Leveling: the level, xp, place and streak as they stand now, whatever the period (xp starts again each season), and how many finished seasons in the period the member was among the best kept.
- Games: for a season, the month's best scores, daily words solved and Rare Find points; for a year, the best scores set this year; for all time, the best scores, rounds played and matches won. A run of days in a row in the two daily games is shown within the last 62 days, which is as long as they keep it. A member an admin removed from Games has no Games lines.
- Trivia: right answers over the months of the period, and the best run of the daily question. Recognition: badges earned in the period, and thanks received for a season (from the log, which is kept for eight weeks) or all time; a year has no thanks.
- Tournaments: won and finished second in (results are kept for 12 months). Invite tracking: members invited who are still here. The Trinket: turns looking after it.
- The server's recap (not a member's) also has a Streams line from Live status: how many streams there were in the period, for how many hours, and the most viewers TrinketBot saw. It is kept for 400 days, so a recap of all time says how far back it looks.
The weekly digest
A short post once a week, “This week in your server”, for a pulse of your own community that nobody has to write. It is off until you switch it on in the Weekly digest card, and it needs Wrapped itself to be on. You choose the channel, the day of the week and the hour (in the timezone of the yearly recap), and which parts it says. It says only what the modules you have switched on already keep with a time on it, for the last seven days:
- New members (from Server insights, once they have been counting for a whole week), most thanked (Recognition), how the daily question went and who answered most of it right (Trivia), who solved the most daily words, made the most Rare Find points and rolled the best Lucky Roll (Games), bowls cooked and how big the Trinket is, the tournaments that finished and who won them, predictions settled and the points paid out, drops caught, and the streams of the week: how many, for how many hours and the most viewers seen (Live status; public numbers only).
- A part with nothing to say is left out, and a week with nothing at all is not posted. It names only members who are in the server and who have not asked to be left off a board, and it pings nobody.
- Switching it on, or changing its channel, day or hour, never posts for a time that has already passed: the first digest comes the next time the day and hour come round. If the bot was down at the time it still posts within a day, and each week is posted once.
- Preview shows what it would say right now, as you would see it, and Post it now makes a real post after asking (at most three an hour); neither uses up the week.
Privacy
A member who asked to be left off a board (the leaderboard, the Trinket's boards, or Recognition's badges) is never named in the server's recap, and their own recap is for them alone: its Share button is switched off. The server's recap names only people who are in the server, and leaves out of its Games lines anyone an admin removed from Games. It counts them in a plain total, which names nobody.
Setting it up
- Turn on the switch at the top of the page. Let members share is on by default; each member can have three fresh recaps an hour (one they opened in the last 15 minutes opens again at once) and share three times an hour.
- The look: TrinketBot yellow, Night or Minimal, or your own design from the dynamic image designer (copy a ready-made Wrapped card there or on this page). The designer previews a design as a member's Wrapped card or the server's. The cards need Attach Files in the channel; without it the recap is posted as text. If a card can't be drawn, the recap is the same text without a picture.
- The server's recap: choose the channel, then either switch on the yearly post and pick the month, day, time and timezone, or press Post it now for a season, a year or all time. Each period is posted once; a period already posted asks before it is posted again. If the bot was down at the date it still posts within a day.
- See a card draws one from the saved settings without posting it.
What is stored
Wrapped stores nothing about members: it reads the other modules' records when a recap is asked for, and keeps a recap for fifteen minutes in the bot's memory only. The one record it reads that is not about members is the short history of finished streams that Live status keeps (the platform, when each began and ended and the most viewers seen, for 400 days). For the server it keeps the settings and one small record for each recap it posted: the period, when, the channel and the message. The weekly digest adds only its own settings and a note of the last week it posted (the week, when, the channel and the message), never a member and never what it said. They are deleted with the server's data, and the settings and the records are not included in backups.
68. Quests
A few small goals a day and a week that members reach by doing what they already do here: cook the Trinket, answer a trivia question, play a round of a game, thank someone. A member uses /quests to see how far they are, with a bar for each, and presses Claim rewards for the ones that are done. Everyone in the server sees the same quests on the same day. It is off until you switch it on.
In the sidebar it is under Community & streaming → Levels & points → Quests.
The quests
Each quest is one kind of action and a number of times, for example “Cook the Trinket 3 times”. A day has one to five and a week has up to three (or none); a weekly quest asks for about four to seven times as much as a daily one. They are not stored: they are drawn from the date and your settings, so the quests of a day are the same for everyone and nothing is kept for a quest nobody has started. A day and a week (Monday to Sunday) turn over at midnight in the timezone you choose. Changing the kinds or the numbers changes the quests of the day too; a member who has already started one keeps the number it had.
You choose which kinds can be used. They are the actions of other modules, and a kind counts only for what that module really did, so a module that is off gives nothing to count:
- The Trinket: cook, serve, stir or season. Games: finish the word game, answer a Rare Find prompt, finish a round of a duel, a table game, Snake or Ping-Pong.
- Points: claim the daily points. Trivia: answer a question. Recognition: thank someone. Question of the day: vote on a this-or-that. Collectible drops: catch a drop. Predictions: place a bet. Looking-for-group: join a post.
- Leveling: send messages that earn XP (a message counts only when Leveling paid it, so its cooldown is the pace) and spend minutes in a voice channel (a minute counts only when voice XP paid it). Events: sign up for an event, once for each event. Giveaways: enter one. Art & clips: share a picture or a clip, at most once in five minutes. Games: play the daily Lucky Roll. A server that has used Quests before keeps the kinds it chose; these appear on the page unchecked.
- Starboard: get a message onto the starboard. It counts once, the first time the message reaches the board, and not for a message that only got there because its author starred it themselves. The kind appears on the page unchecked for a server that has used Quests before.
Rewards and the streak
You set what a daily quest, a weekly quest and a streak day pay, each in points and in XP, within limits the page shows. Points are paid through the Points module and XP through Leveling, each only while that module is on in the server; if one is off, that part is not paid and the member is told. A reward is paid once, when a member presses Claim: a double press, or the button on two devices, pays once, and a reward that could not be paid is given back to be claimed again. The quests of a day are claimed that day and the week's that week.
The streak is the number of days in a row a member finished and claimed every daily quest. From the second day of a run on, the streak pays its small extra once a day. A day without it starts the run again.
The daily post
Optional: once a day, at the time and in the channel you choose, TrinketBot posts one message that lists the day's quests and the week's and what they pay. It mentions nobody. Use Send a sample post to see it first.
The first week
Optional, and off until you switch it on: a short checklist for members who joined in the last few days (1 to 30, you choose). A step is either something TrinketBot counts, such as playing a round of a game once, or something the member confirms with a button, such as “I have read the rules”, in words you write (up to 80 characters; up to five of each). A member inside their first week sees the checklist above their quests in /quests. When every step is done they press a button to claim a one-time reward, points and XP, and optionally a role.
When a member joins, TrinketBot posts one short line in the channel you choose, with a button that shows their checklist privately. It never sends a direct message. A member who joins into the server's rules screening gets the line once they pass it. You can also name a role of volunteers: one of them, picked at random from the members TrinketBot can see, is named in the line as the new member's buddy; the line mentions the new member and the buddy and nobody else, and goes without a buddy if the role is empty. A raid cannot fill the channel with them: at most ten lines a minute are posted in a server, and a member whose line was left out still finds their first week with /quests.
The role for finishing is held to the same rules as every role TrinketBot gives by itself: it cannot be a role with powers such as Administrator, and TrinketBot's own role has to be above it. If it cannot be given, the member is told, the admins are told on the Overview, and the reward is still paid. Use Send a sample line to see the line first.
Setting it up
- Turn on the switch at the top of the page, choose how many quests a day and a week, the timezone and the kinds, and set the rewards. The page shows today's quests as they would be drawn, and, as counts only, how many were claimed this week.
- Make sure Points and Leveling are on if you want them paid. The page says when one is off.
- Choose a channel and a time for the daily post, if you want it. Choose a channel, the steps, the days and (if you like) a role and a buddy role for the first week.
What is stored
For each member who takes part: their count toward each quest of the day and the week, the days in a row they finished every daily quest, and, in their first week, when they joined, the steps they confirmed and when they finished. Nothing is kept for a quest nobody has made progress on, and nothing that anyone wrote. It is kept for 60 days after its last change, and a member can delete all of it with Forget my quest progress in /quests; what they were paid stays where it was paid. All of it is deleted with the server's data. The settings are included in backups; what members did is not.
69. Live boards
A leaderboard message that TrinketBot keeps up to date by itself. You choose a channel and which board to show, and TrinketBot posts one message there and edits it in place on a schedule, so the board is never stale and never adds a new message each time. It is off until you switch it on.
In the sidebar it is under Community & streaming → Levels & points → Live boards. It has no slash command and no button: it is set up on the dashboard.
The boards
A board never has a ranking of its own. Each one shows what the module that owns the data already shows on its own board, read through that module, so the same members are listed and the same people are left off. A module that is switched off has no board to show, and the board says so on its page.
- Leveling: the members with the most xp, with their level. Anyone who asked to stay off the public leaderboard is left out. Points: the biggest balances, under your server's name for them.
- The Trinket: the top caretakers of the month, or of all time, while the Trinket and its levels are on. Anyone who chose to be left off the leaderboards is left out.
- Games: the month's best Ping-Pong scores, the month's best Snake scores, the most daily words solved in the month, or the most Rare Find points in the month. A member an admin removed from the boards is left out.
- Trivia: the top players of the month, or of all time. Recognition: the members thanked the most in the last seven days.
A member who left the server is skipped and the next one takes the place, so a board shows as many places as you asked for whenever it can. The names are plain text; nobody is mentioned by a board.
Setting it up
- Turn on the switch at the top of the page, then Add a live board: choose which board, the channel (a text or announcement channel where TrinketBot can send messages and embed links), how many places (3 to 15) and how often it is refreshed (every 15 or 30 minutes, every hour or every 3 hours; fifteen minutes is the shortest). Look at it now shows what the board would say, and posts nothing.
- How many boards a server can have depends on its plan (the table under Premium & Patreon lists it). A board past the limit is kept but not refreshed until there is room again.
- Each board shows when it was last looked at, when it is next, a link to its message, and what is wrong with it, if anything. Refresh now looks at a board at once (once a minute for each board). Delete asks first, and takes the board's message down too.
How it keeps a board up to date
TrinketBot looks at the boards that are due every five minutes. A board is edited only when the list changed, so a quiet board costs nothing. Discord limits how often a message that is more than an hour old can be edited. When it refuses, or when somebody deletes the message, TrinketBot posts a fresh message at the next refresh and takes the old one down, so a board can appear as a new message now and then. A deleted message is not posted again at once: it may have been taken down on purpose. About once a day TrinketBot also checks that a board's message is still there, in case it was deleted while the bot was away.
If the channel is deleted, TrinketBot cannot see it, or it may not send messages and embed links there, the board says so on its page and in the list of problems on the Overview, and is tried again at its next refresh.
What is stored
Live boards store nothing about members. For each board they keep the kind, the channel, the places, the interval, the message they keep up to date and a fingerprint of what it shows, and who made it; the names and numbers are read from the modules that own them each time a board is drawn. They are deleted with the server's data. The boards' settings are included in backups; the message and its fingerprint are not.
70. Today
One private answer to /today with what is going on in the server today and where, so a member sees at a glance what to do. It is off until you switch it on.
In the sidebar it is under Tools → Commands & automations → Today.
What it shows
One card with a section for each thing that has something to say, and only for modules you have switched on: whether a pot is simmering, ready or empty and how big the Trinket is; whether the member has played today's daily games and when the next ones come; the question of the day; how many groups are looking for people; a tournament with sign-ups open; how many birthdays there are today (with the names only if your server announces birthdays in a channel); open predictions; a drop waiting to be caught; the member's own quests; who is live now and when the next planned stream starts (from Live status and the stream schedule); and the next event of the server. A section with nothing to say is left out, and if there is nothing at all the member is told so in one line.
/live shows only the streams part, privately: who is live and when the next stream is. It follows the Streams section, so switching that section off switches /live off too. It asks no streaming site for anything, and while Live status is off it never says that nobody is live, because it could not know.
Under the card are buttons that link to the right channel or message (at most five), and a Refresh button that reads everything again. A link, a title or a question is shown only for a channel the member can see, and the answer is private to them and pings nobody.
It reads what the other modules already know, writes nothing, and never reads what is said in a channel. It reads every section at the same time and waits about two seconds in all: a section that is slow or fails is left out of the answer, never an error for the whole of it.
Setting it up
- Turn on the switch at the top of the page and choose which sections to show (all are on by default; switching on with every section off is refused).
- What you would see right now builds the answer for you from the saved settings, whether or not Today is on yet, and says which sections were on but had nothing to say (their module may be off here).
- The settings are included in backups.
What is stored
Nothing about a member. TrinketBot keeps only the server's settings (the switch and the sections you turned off); an answer is built when it is asked for and forgotten after a few seconds.
71. Heads-ups
A member can ask for a private message when something they care about happens in your server, so they do not have to keep an eye on a channel: the Trinket's soup is ready, a trivia game night starts, a tournament opens for sign-ups or their match is ready, the question of the day is up, their daily points streak is about to break. A member chooses with /headsup. Nobody is signed up for anything, and it is off until you switch it on.
In the sidebar it is under Community & streaming → Events & celebrations → Heads-ups.
What a member can ask for
You choose which of these your server offers, and a member picks from those, per server:
- The Trinket's soup is ready, at the moment the pot has finished cooking (not while the Trinket sleeps).
- A trivia game night starts, when someone starts a quiz night in a channel.
- A tournament opens for sign-ups, when its sign-up message is posted.
- My tournament match is ready, only for the two players of a match and only if they chose it.
- The question of the day is posted, for the scheduled daily post (a post made by hand with
/qotd post-nowtells nobody). - My daily Lucky Roll is ready, when the UTC day turns (or the day of the timezone your server chose for its Games days) and the roll opens again (only where Games and its Lucky Roll are on).
- A stream goes live, right after your server posts its go-live alert for your Twitch, Kick or YouTube channel or a Twitch channel you follow, for members who would rather have a private message than a role ping (the alert and its ping are not changed).
- An event I said Going to is about to start, only for the members on the event's sign-up Going list who chose it, from the event's reminder at the start or 5, 15 or 30 minutes before it (an event with no reminder that close tells nobody).
- My daily points streak is about to break, six hours before it ends, for a member whose
/points dailystreak is three days or more and who has not claimed since (only where Points and its daily amount are on, and only if the member chose it; a streak is warned about once for each claim).
A heads-up needs its own module switched on in your server: with the Trinket off there is no soup to tell about. Moments the bot cannot know to the second are not offered; the streaks of Games, Quests and Leveling are among them, and the daily points streak is the one it can.
What a member gets
One short private message from TrinketBot with the server's name and a button that opens the place it is about. Every message also has Stop these reminders, which turns that kind off, and Stop all from this server, which turns every heads-up from your server off, each in one click and without asking you. The text is fixed and nothing a member wrote is ever put into it, it mentions nobody, and it is never posted in a channel.
To stay a kindness and not become spam: a member is sent at most the number you choose a day from your server (5 unless you change it, from 1 to 10, counted per UTC day, all kinds together), each moment is told once, a moment more than an hour old is not told about at all (a bot that was down does not send yesterday's news), and a server with hundreds of members signed up is told a few at a time over several minutes rather than all at once. A member whose private messages are closed is switched off and not tried again.
Setting it up
- Choose which kinds to offer, and the most a member gets in a day, then turn on the switch at the top of the page. Switching on with nothing offered is refused.
- Next to each kind the page says how many members chose it. It shows a number and never who.
- No permission is needed in any channel, because nothing is posted in one. Members need to allow private messages from the server's members (Server Settings → Privacy).
- The settings are included in backups; what members chose is not.
What is stored
For each member who signs up, TrinketBot keeps their Discord user ID and the kinds they chose, for that server only, and how many heads-ups they were sent today (kept two days at most). It keeps no name and no avatar, and it never reads what a member writes. It is deleted when the member turns a kind off, presses Stop all from this server, leaves the server, or cannot be reached by private message, and with everything else when TrinketBot is removed from your server. A moment that was noted (a soup, a game night, a match) is kept two days so that it is not told twice, and holds no member except the one a match is about.
72. TrinketBot news
TrinketBot can post what is new in TrinketBot in a channel you choose, when it ships: new features and changes you may want to know about, the same short notes the megaphone button in the dashboard header shows an admin. It is off until you switch it on, and it starts from now, so switching it on does not post anything old.
In the sidebar it is under Tools → Server → TrinketBot news.
What is posted
- One message each time there is something new, with the new things as a short list, newest first: a title, a sentence or two, and a link to the page it is about. If a lot came out while you were away, the five newest are listed and the message says how many more there are, with a link to the release notes.
- It is posted a few minutes after TrinketBot is updated, once, and never again. It does not post anything about a feature that is not open to everyone yet.
- It pings nobody. If you choose a role, that one role is pinged with each post and nobody else.
Setting it up
- Choose the channel and, if you like, a role to ping, then turn on the switch at the top of the page.
- Send a test post posts the newest entry once in the saved channel, marked as a test. It pings nobody and does not change what TrinketBot posts by itself.
- TrinketBot needs to see the channel and to send messages and embed links in it. If it cannot post, the Overview says so on the TrinketBot news tile, and TrinketBot does not keep trying: it tells you once and carries on with the next news.
- The settings are included in backups. A restore that switches the news on starts from the newest entry too.
What is stored
Only the server's settings (the switch, the channel and the role) and the name of the newest entry the server has been told about, so that nothing is posted twice. Nothing about a member. It is deleted with everything else when TrinketBot is removed from your server.
73. Contests
Time-boxed contests for fan art, clips and captions, the kind a community runs by hand today. You make a contest on this page: its name, what it takes, the channel it is held in, when entries open and close, when the voting opens and closes, and optional prizes. Members enter with /contest enter, every entry becomes its own message in the channel with a Vote button, and when the voting ends TrinketBot posts the podium, gives the prizes and marks the contest done. It is off until you switch it on.
In the sidebar it is under Community & streaming → Highlights → Contests.
Making a contest
- Turn on the switch at the top of the page and press Save, then press Make a contest. A server can have 3 contests that are not over (waiting to open, taking entries, or being voted on).
- What it takes: pictures (one image of up to 8 MB, PNG, JPG, WebP or GIF, attached to the command), clips (one https link) or captions (a text of up to 200 characters). A picture or a clip may carry a short note too.
- The times: entries open and close, and voting opens and closes. Voting opens when the entries close unless you choose a time, which can be earlier, while entries are still coming in. Each window is at least half an hour, voting ends at least half an hour after the entries do, and a whole contest runs for 60 days at most.
- Entries and votes per member (1 entry and 3 votes unless you change them), whether the vote counts show while the voting is open (off by default, so nobody piles onto the entry that is ahead), and an optional rule that a voter must have been in the server for some days.
- Prizes: Points and Leveling XP for the first three places, and a winner role for first place, for good or for some days through the timed roles. The Points and XP are paid through the Points and Leveling modules, so each is paid only while its module is on. TrinketBot's own role has to be above the winner role.
- You can cancel a contest that is not over. Nobody can enter or vote after that, and no prize is paid. To take one entry down, delete its message in Discord.
How a contest goes
- When the entries open, TrinketBot posts the announcement: what the contest is, how to enter, when it closes, the rules and the prizes. When the voting opens later than the entries, it posts that too.
/contest enterasks for the contest (found by typing) and then the picture, the link or the text. A picture is downloaded and uploaded again as a file of TrinketBot's own message, so it lasts as long as the contest and does not depend on a link that expires. A caption is shown with no mention, link or heading that could be made of it.- A member can vote for up to the votes they have, not for their own entry, and takes a vote back by pressing Vote again. The answer is private, and nobody is ever shown who voted.
- When the voting ends, TrinketBot posts the podium: the first three places with their entries and votes. Entries with the same number of votes share a place, and an entry nobody voted for has no place, so a contest nobody voted in has no podium and pays nothing. If nobody entered, it says so in a friendly line.
- The prizes are given once, each by a statement of its own, so a prize is never paid twice. If something fails (the channel is hidden, Points cannot be read), the Overview says so on the Contests tile and TrinketBot tries again at the next round. A winner who has left the server is not paid.
What members do
/contest enter to enter, the Vote button to vote, and /contest withdraw to take their own entries in a contest back, with the votes on them, at any time, even after the contest is over.
Permissions
In the channel, TrinketBot needs to view the channel, send messages and embed links, and attach files for a picture contest. For a winner role it needs Manage Roles. Nothing in a contest pings anyone.
What is stored
For the server, the switch and how long a finished contest is kept. For each contest: its settings and times, who made it, and the podium message. For each entry: the member's Discord user ID, their text or link (never a picture: that lives only in the message), the number of votes and the place. For each vote: the voter's Discord user ID and the entry, kept so that nobody votes twice and never shown to anyone. A contest that is over or cancelled is deleted with its entries and votes after the days you set (30 unless you change it, from 7 to 90). Contests are not included in backups.
74. Code hunt
A secret-code hunt: you hide a code in a stream, a panel, a video or a channel topic, and members find it and redeem it with /hunt redeem. Every find is counted, /hunt me shows a member what they found and /hunt top shows the members who found the most. A code can also pay Points and Leveling XP. It is off until you switch it on.
In the sidebar it is under Community & streaming → Levels & points → Code hunt.
Adding a code
- Turn on the switch at the top of the page and press Save, then add your codes. You can add them before you switch the hunt on. A server can have 50 codes; a switched-off or expired code counts until you delete it.
- The label is what you and the finder call the code (“Stream 12 panel”). A member who finds the code is told its label. The code is 4 to 32 characters: letters, digits and hyphens, with no spaces. It does not matter whether it is written in capitals, and a server cannot have the same code twice.
- Optionally, an expiry, the most finders (once that many members have found it, it is too late for the rest) and a reward: Points and/or Leveling XP, paid through the Points and Leveling modules, so each is paid only while its module is on. With no reward the code is recognition only.
- You can switch a code off at any time: to a member it then looks like a code that does not exist, and the finds stay in the tally. Deleting a code deletes its finds with it.
What members do
/hunt redeemwith the code. A code can be found once by each member. The answer is private. A text that is not a code, a code of another server and a code you switched off all get the same answer, so a guess reveals nothing.- A member who guesses wrong 5 times in 10 minutes, or 30 times in a day, is asked to wait. A right code never counts against that.
/hunt meshows a member the codes they found (by label, never the code) and where they stand, and/hunt topshows the ten members with the most finds who are still in the server.
Keep the codes secret
A code is shown on this page, to the people who can open it, and nowhere else: not in a member's answer, not in a log, not in a problem note and not in the settings history, which records that a code was added or deleted and nothing more.
What is stored
For the server, the switch. For each code: its label, its text, its limits and reward, and the Discord user ID of the administrator who added it. For each find: the member's Discord user ID and when they found the code, kept until you delete the code or the member is forgotten. The code hunt is not included in backups.
75. Stream bingo
Bingo played in your server while a streamer linked to it is live. Each member presses Get my card on the round's post and gets a card of their own: five rows of five buttons, the middle one free. Squares are marked by themselves from the stream's Twitch events (a raid, a new follower, a hype train and so on), and the streamer's own written squares are called by your moderators with /bingo call. The first full line (a row, a column or a diagonal) wins, then second and third place, and /bingo top shows the month's board. It pays nothing and is off until you switch it on.
In the sidebar it is under Activities → Quick games → Stream bingo.
Setting it up
- Turn on the switch at the top of the page, choose the Channel where a round and its winners are posted, and press Save. TrinketBot needs to see that channel and to send messages and embeds there.
- Optionally pick a Staff role. Members with Manage Server can always call squares and start or end a round; the role lets your moderators do it too.
- Each streamer who plays here switches Bingo on in the Stream bingo card on the Events page of their TrinketBot channel page and writes their own squares there (up to 40 squares of up to 40 characters). It is played in the server their Discord posts go to, and their squares are held against that server's word filters.
A round
- A round starts when the stream goes live, or when a moderator runs
/bingo start. A server has one round at a time, and the round's post carries the Get my card button. - A card has 24 squares drawn at random from the round's squares, and at most 12 of them are automatic. A round does not start while the squares make fewer than 24; the streamer's card on the Events page says why.
- Automatic squares need the Twitch permission of their event (a raid needs none), which the streamer gives on the Events page. A written square is called by a moderator with
/bingo call, which offers the open squares as you type, or shows a private menu of them when no square is named. - When a square is called, every card with a full line asks for the next place. Each place is posted in the round's channel with the member's name in a code span, and nobody is pinged. The third place ends the round.
- A round also ends with
/bingo end, 12 hours after it started, or when the stream has stayed offline for a few minutes. The post then loses its button.
What is stored
For the server, the switch, the channel and the staff role. For each round: the streamer's Twitch ID and name, the channel and post, the squares of the round, which were called and when, and the Discord user IDs of the first three members to make a line. For each card: the member's Discord user ID and the 24 squares on it. Nothing a viewer wrote on Twitch is kept. A round and its cards are deleted 7 days after the round ends; the month's board (per member and month: rounds won and places on the podium) is kept for 12 months. A member erases their own cards and board rows with Forget my scores in the Activity. Stream bingo is not included in backups.
76. Tips & troubleshooting
- A page with unsaved edits always shows the bottom save bar — if you navigate away without saving, your edits are discarded, same as clicking Discard.
- A module's sidebar toggle is just another field: switching it off queues into the same unsaved-changes state as any other edit, and only takes effect once you save (with the exception noted for Bot Identity above, where the toggle is derived from whether any field has a value, not its own switch).
- Any "Send test"/"Post panel" button acts immediately and isn't affected by unsaved changes elsewhere on the page — save your other edits first if you want the test to reflect them.
- Every "direct link" field (birthday gifs, embed images, the bot identity avatar) needs a URL that points straight at the file itself. If pasting it into a browser tab shows a webpage instead of just the image loading, it's the wrong kind of link.
- Join roles, reaction roles, word-command role actions and role buttons all need TrinketBot's own role to sit above the roles they hand out — if one isn't working, check Server Settings → Roles first.
- A word command that isn't firing: check its card first — it shows if it's paused (past your server's limit), if its message or role is gone, or if the Moderation module is off. Then check the channel limit, the match type (whole word won't match inside a longer word) and the cooldown. Bots never trigger word commands.
- A custom command that doesn't show up when you type
/can take a few moments to appear; if it still doesn't, reload Discord. A built-in command you turned off still appears in the list but answers with a "turned off" note. - Polls and events not working on a server that added TrinketBot a while ago? They need the Send Polls and Create Events permissions, which older invites didn't ask for — grant them in Server Settings → Roles → TrinketBot.
- No thread under the posts in an Art & clips channel? On a server that added TrinketBot a while ago, grant Create Public Threads and Send Messages in Threads in Server Settings → Roles → TrinketBot (or re-invite it).
- Join to Create not making a channel, or a role ping that shows in a message but never notifies anyone, on a server that added TrinketBot a while ago? Join to Create needs Move Members and Connect, and pinging a role that isn't set to “anyone can mention” needs Mention Everyone — grant them in Server Settings → Roles → TrinketBot, or re-invite the bot. TrinketBot only ever pings the one role you chose, never @everyone.
- Twitch chat bot not answering, an event asking for permission, or a Connect step not working? See If something doesn't work in the Twitch chat bot section.
- Still stuck, or want to suggest something? Ask in the TrinketBot Support server on Discord — it works for the Twitch chat bot too, and you don't need to use the Discord bot to join.
- New members not getting the Welcome DM is normal for anyone who has direct messages from server members turned off — TrinketBot skips them quietly.