Guides
Sign in with Discord, open Your servers, and choose Add to this server on a community you manage. When Discord finishes, return here and open that server. The same steps are at the top of each settings page.
Start with one server
Settings on this server do not copy to another server.
- 1. Add the bot first
From Your servers, use Add to this server. Discord asks you to approve Stretz Bot. Come back here after that.
- 2. Refresh channels and roles
Pickers stay empty until you press Refresh from Discord on a settings page. That reads the current channel and role list.
- 3. Publish the parts members see
Saving a setting stores it here. A ticket panel, role button, giveaway, or scheduled message appears in Discord only after you post or the event happens.
- 4. Read the message preview
On pages that send a Discord message, the box on the right is that message. Switches, limits, and staff roles stay on this page and are not part of the message.
First-time setup
Pick a starting set. You can change every setting later.
- 1. Choose modules
A preset fills the checkboxes. Untick anything this server does not need. Nothing is posted to a channel during setup.
- 2. Choose a log channel and staff roles
Press Refresh from Discord if the lists are empty. The log channel receives module logs. Staff roles can review cases and tickets without changing security settings.
- 3. Finish, then open each module
Finish setup returns you to the overview. Turn a module on and pick its channel before you expect it to do anything.
Welcome message
The preview is the join or leave message, not the rest of the form.
- 1. Turn join messages on and pick a channel
Welcome has to be enabled, join messages have to be on, and a text channel has to be selected. Save after that.
- 2. Write the message
Use {user} for a mention, {server.name} for the server name, and {server.members} for the member count. The preview fills those with an example so you can read it.
- 3. Leave messages are separate
A leave message is posted only when leave messages are on and a leave channel is selected. It is a second Discord message, shown under the join message.
Level-up message
Members earn XP from messages. The preview is only the announcement.
- 1. Turn leveling on
XP amounts, cooldown, and the level curve are stored here. They are not written into Discord.
- 2. Choose where the announcement goes
Off posts nothing. Channel uses the announcement channel. Context posts in the channel where they earned the level. Direct message sends it privately.
- 3. Write the announcement
{user} mentions the member and {level} is the new level. Members can use /rank and /leaderboard.
Role buttons
Discord gets a normal message and buttons. It does not get an embed of this form.
- 1. Refresh channels and roles
Pick the channel that should show the buttons, then the role members receive.
- 2. Write the button text
The panel title is the message text. The button text is the label members press. Dropdown shows a menu instead of buttons.
- 3. Publish
Publish posts it immediately. Members press again to remove the role.
Giveaway message
The prize is the embed title. The timer, winner count, and entry count are the description.
- 1. Choose the channel and prize
The prize is the title members see. The channel is where the message is posted.
- 2. Set the timer and winners
The description says when it ends, how many winners, and how many entries. An Enter button is attached.
- 3. Publish
Publishing posts the message now. The draw runs when the timer ends. Winners are chosen with secure randomness.
Ticket panel
The preview is the panel members see, then the first message inside the ticket.
- 1. Write the panel
The title and description are the embed. Each button opens that kind of ticket. More than five buttons become a menu.
- 2. Write the first message
{user} mentions the person who opened it. {type} is the button they pressed. Claim and Close are added on that message.
- 3. Post it
Posting saves the ticket settings and sends the panel. Turn tickets on first, and pick a staff role if staff should see the channel.
Knowledge for ticket answers
An article is not posted as an embed. The bot may quote it as a normal reply inside a ticket.
- 1. Write the answer you want repeated
Save the title and the answer, then approve it. Unapproved articles are not used.
- 2. Ask a question in a ticket
If an approved article covers it, the bot replies with that answer in the ticket channel. If nothing covers it, the ticket stays with staff.
- 3. Claim stops the bot
When a person claims the ticket, automatic replies stop. Close ticket and Ask staff are the buttons members see.
Custom command reply
The preview is the reply text. The command name and description are only for Discord’s slash menu.
- 1. Name the command
Members run it as /name. The description is the slash-command hint, not part of the reply.
- 2. Write the reply
{user} becomes a mention of the person who ran it. The bot sends that text and nothing else.
- 3. Choose who can see it
Turn on the private reply if only the person who ran the command should see it. Save registers the command with Discord.
Automation message
The preview is the message text. The name and the trigger stay in the dashboard.
- 1. Pick the event
Join, leave, a new message, a ticket opening or closing, or a level-up. The bot does not run custom code.
- 2. Pick the channel and write the message
That text is what Discord receives. {user} mentions the member the event is about.
- 3. Save
It runs when the event happens. It is not posted at the moment you save.
Scheduled message
The preview is the message. The schedule name is not sent.
- 1. Write what should be posted
Only the message box is sent. Leave it as normal text.
- 2. Pick a channel and a time
The time is stored and still runs after a restart. The same run is not sent twice.
- 3. Schedule it
The worker sends it at that time. The same run is not sent twice.
Embed Studio
The preview beside the editor is the message you are building.
- 1. Edit the message
Title, description, fields, and images in the editor are the embed. The preview updates as you type.
- 2. Check the limits
Discord rejects a message that is over its length limits. The editor reports that before you post.
- 3. Save, test, or publish
Save keeps a draft here. Publish sends the message to the channel you pick.
Moderation settings
These settings change how actions behave. They are not a Discord embed.
- 1. Require a reason
Staff use /warn, /timeout, /kick, and /ban. A reason is required when that switch is on.
- 2. Direct message the member
When that is on, the member gets a direct message with the action and the reason. A note stays in the case log and is not sent.
- 3. Run an action from Cases
Cases records the action and asks Discord to apply it. The case list is the history, not a message preview.
Cases
A case is a record. Discord receives the moderation action, not a copy of this page.
- 1. Pick the action and the member
Paste the member’s Discord user id. Warn, timeout, kick, and ban are sent to Discord. A note is stored here only.
- 2. Write the reason
The reason is stored on the case. If direct messages are on in Moderation, the member is told the action and the reason.
- 3. Check the result
Discord confirmed means Discord accepted the action. Record only means it was stored without a Discord action.
AutoMod
Turn on the checks you want. Matching messages can be deleted and logged.
- 1. Choose what to block
Invites, links, repeated messages, and blocked words are separate switches and lists.
- 2. Exempt staff channels or roles
Exempt roles and channels skip the checks. Pick them after refreshing from Discord.
- 3. Pick a notify channel
When a message is caught, the explanation can be posted in that channel.
Anti-raid
This watches how many people join in a short time.
- 1. Set the threshold
If more people than the threshold join during the window, the bot treats it as a raid heuristic.
- 2. Choose the action
Notify posts an explanation. Other actions use the quarantine role or a short lockdown when you select them.
- 3. Save and watch Diagnostics
If the bot is missing a permission, Diagnostics lists it. The check does not run for joins that happened before the bot was added.
Suggestions, polls, and starboard
Members create these in Discord. This page chooses where they go.
- 1. Turn the module on and pick a channel
Starboard is on this page. Suggestions, polls, birthdays, and feedback each have their own page in the module list, and each one needs a channel.
- 2. Members use slash commands
/suggest takes a title and details. /poll takes a question and options separated by |. /feedback sends anonymous feedback.
- 3. Starboard
A message is copied to the starboard channel after it reaches the reaction threshold. The copy is the star, the count, and the message.
Logging
Pick a channel per event type. Empty means that event is not logged.
- 1. Refresh channels
Choose a text channel for the events you want. Leave the others empty.
- 2. Message content is optional
Stored message content is off until you turn that switch on. Days before the bot joined are not filled with zeros.
- 3. Save
New events after the save are posted to the channels you picked.
Appeals
Members submit /appeal. You approve or deny it here.
- 1. A member runs /appeal
They can include a case number and a reason. The appeal shows up in this list.
- 2. Approve a ban appeal
Approve asks Discord to unban. It is marked approved only after that request is made.
- 3. Deny
Deny records the decision and does not unban.
Who can manage this server
Discord permissions decide who can change settings. Moderator roles can review without that access.
- 1. Owners and managers
The server owner, and people Discord reports as Administrator or Manage Server, can change settings and add the bot.
- 2. Add moderator roles
Roles you check can review cases and tickets. They cannot change security settings.
- 3. Set the timezone
Times in this dashboard use the timezone you save.
When something does not happen
Diagnostics lists missing permissions and failed jobs. It does not post a message.
- 1. Check the bot is in the server
If it is missing, go back to Your servers and use Add to this server.
- 2. Read each missing permission
Fix it in Discord under Server Settings, Roles, then the Stretz Bot role.
- 3. Read failed jobs
A failed job shows its error. Pending means it is waiting for its time.
How long logs are kept
This deletes stored logs. It does not delete Discord’s own history.
- 1. Choose a number of days
Message logs and join events older than that are deleted by the worker.
- 2. Save
Discord messages the bot never received cannot be rebuilt.
Webhook storage
A webhook URL is encrypted and kept on the server. This install does not post to it yet.
- 1. Paste a Discord webhook URL
After you save, the URL is not shown again.
- 2. Remove it
Save an empty field to remove the stored webhook.
All modules
Open a module to turn it on. A module that is off does nothing.
- 1. Open the module
Each card goes to its settings.
- 2. Turn it on and save
Then pick the channel or role it needs. Refresh from Discord if the picker is empty.
Channel counters
A counter renames a voice or text channel to a count. It does not post an embed.
- 1. Add a counter
Pick the channel and the count you want in its name, such as members.
- 2. Save
The bot renames that channel when it can. If Discord rejects the rename, the error is stored on the counter.
Temporary voice channels
A member joins the hub channel and gets their own room.
- 1. Pick the hub and the category
The hub is the channel they join. New rooms are created under the category.
- 2. Set the room name
{user.display} is the member’s name. They can use /voice to rename, limit, or lock their room.
Ticket history
This is the list of tickets stored for this server.
- 1. Open tickets from the panel
A ticket appears after a member uses the panel you posted.
- 2. Closed tickets stay in the list
The transcript follows the ticket settings. Staff-only transcripts are hidden from the member.
Automation runs
Each row is a run that already happened.
- 1. Save an automation first
A run is recorded when the event fires.
- 2. Read the result
A failure includes the error. A run is not the same as the message preview on the Automations page.
Suggestions
This page chooses the channel. Members create the suggestion in Discord.
- 1. Turn suggestions on and pick a channel
Refresh from Discord if the channel list is empty, then save.
- 2. Members run /suggest
They enter a title and details. Discord gets an embed with that title and text, plus votes. This page does not build that embed.
Polls
This page chooses the channel. Members write the poll in Discord.
- 1. Turn polls on and pick a channel
Save after the channel is selected.
- 2. Members run /poll
The question is the embed title. Options are separated by | and each one becomes a button. The poll is posted in the channel you saved. This page does not preview it, because the question is typed in Discord.
Birthday announcement
The preview is the announcement text, not the channel setting.
- 1. Pick the channel and write the message
{user} mentions the member. Save the module.
- 2. Members opt in
They run /birthday with a month and a day. The message is posted in the channel on that day.
Anonymous feedback
Members use /feedback. The author stays hidden until a manager reveals it.
- 1. Pick a channel and a daily limit
Save. The channel is where the feedback embed is posted.
- 2. The message is the member’s text
Discord shows the feedback and a reference id. The author is not in that message. A manager reveal is written to the audit log.
Utility commands
These switches decide whether a member gets an answer. This page does not post a message.
- 1. Turn Utility on and save
Until you save this page, /userinfo, /serverinfo, /avatar, /banner, and /rank keep working.
- 2. Turn off a single command
After you save, that command still shows in Discord’s slash menu. Running it replies that it is turned off for this server.
Audit log
This lists changes made in the dashboard and by the bot for this server.
- 1. Read the summary
Each row says what changed. It is not posted back to Discord unless logging is configured for that event.
Operating this deployment
People using https://stretz.co.uk do not need this. It is for someone running the dashboard on their own machine.
Discord setup
Create an application, add a bot, and enable the Server Members and Message Content intents. Presence is optional. The bot will not connect if a privileged intent is requested while that intent is turned off.
OAuth redirect
Add your site origin plus /api/auth/discord/callback to the application’s redirect list. Sign-in uses identify, email, and guilds. The invite separately requests bot and applications.commands.
Environment
Copy .env.example. Generate SESSION_SECRET and a 32-byte ENCRYPTION_KEY. Never commit real tokens. The dashboard reports missing variables instead of pretending sign-in works.
Database
Start Postgres, set DATABASE_URL, then run npm run db:migrate. Prisma migrations live with the database package. Redis is optional.
Bot permissions
The invite asks for moderation, channels, roles, messages, and voice move. Diagnostics lists anything still missing for the modules you turned on.