About CurlioBot
I wasn't happy with the bots that were already out there -too incoherent, too opinionated, or just not working the way I wanted. So I built my own.
CurlioBot does exactly what I wanted it to do, nothing more. Every feature was added because I actually wanted it, not because it fills a feature checklist that no-one uses.
Every feature you see here is completely free. No paywalls, no premium tiers, no locked commands. If you enjoy the bot and want to help cover hosting costs, the coffee button in the corner is always appreciated. ☕
Everything is configured directly inside Discord using slash commands. There is no web dashboard, no OAuth login, and no need to hand your server credentials to a third-party website.
Not every section below may be available on your server. Admins and mods can enable or disable individual features -if a command isn't showing up for you, it's been turned off by choice.
Invite the bot with this link: invite only
Want to talk? Come say hi on our Discord server -discord.gg/2RR4sbwbaN
Feature Settings & Setup
2 commands · Manage Guild only
/settings
View and toggle bot features for this server MOD
Shows a live panel listing every bot feature with a status dot - 🟢 enabled, 🔴 disabled, or 🟣 missing permissions. Click any button to toggle a feature on or off; the panel updates in place. When a feature is disabled its slash commands are removed from this server immediately. When a dot is purple the panel lists exactly which bot permissions are missing - grant them in Server Settings and run
/settings again to activate the feature. Run this first to decide which features you want active before setting them up./setup
Show pending server setup tasks MOD
Displays a checklist of configuration steps that still need to be completed - such as setting a welcome channel or a server timezone. Only shows tasks for features that are currently enabled and have the required bot permissions; items for disabled features are automatically hidden. Run
/settings first to turn off any features you do not need, then use /setup to work through what remains.How XP Works
🔐 Requires:
Manage Nicknames -to append level and ⁿᵉʷ suffixes to member nicknamesType a message
up to 10 pts per message
Be in voice
pts accumulate over time
Gain levels
voice & text tracked separately
Climb rankings
server-wide leaderboards
⚡ 2× voice XP during events you signed up for & attend
/xp showlevel <true|false>
Toggle whether voice level numbers appear in member nicknames -disable to track XP silently without touching names. MOD
Events
4 commands
/event create
Schedule a gaming session
A form opens - enter game name, date/time in your timezone, and duration (default 2 h). You'll see a preview showing both your local time and the server's configured timezone before it posts.
/event list
Browse all upcoming events
Each card shows sign-up count and a ✏️ Edit / 🗑 Cancel button - visible only to the organiser or mods. MOD
/timezone set
Save your local timezone
Required once so event times display correctly for you. Accepts IANA names like America/New_York or Europe/Amsterdam.
/timezone show
Check your saved timezone
Displays your stored IANA timezone and your current local time for reference.
Polls
3 commands
/poll create
Create a poll
Choose single (one vote, swappable) or multi (vote for many). Add up to 8 options across two form pages. Set a duration in minutes.
/poll list
See all active polls
Shows live vote counts and time remaining. Creators and mods get Edit and Cancel buttons. MOD
/poll results [id]
View a bar-chart of results
Renders a result image showing vote counts and percentages per option. The winner bar is highlighted in gold. Works on active or ended polls.
Giveaways
3 commands
/giveaway start
Launch a giveaway MOD
Parameters: prize, duration_hours, optional winners (default 1), and optional anyone (true/false). By default only active members (20+ text pts or 100+ voice pts in the last 30 days) can enter. Requires Manage Messages or a role granted via
/admin addgiveawayrole./giveaway list
See active giveaways
Shows prize, entry count, time remaining, and whether an activity requirement applies.
/giveaway cancel [id]
Cancel a giveaway
Greys out the embed and disables the entry button. Only the creator or a mod can cancel. MOD
Kudos
2 commands
/kudos give [@user]
Give someone a thumbs-up
One kudo per person per day. Kudos are purely social - no XP bonus. The total appears on the recipient's scorecard as 👍 N kudos.
/kudos stats [@user]
View kudos stats
Shows total kudos received and given for you or another member. Leave the user blank to see your own stats.
Steam Friend Codes
3 commands
/steam add <code> [user]
Add or update your Steam friend code
Accepts a friend code, Steam64 ID, account ID, or profile URL. Fetches your Steam avatar and persona name automatically. Mods can specify another user to add on their behalf. MOD
/steam remove
Remove your Steam friend code
Deletes your entry from the list and immediately regenerates the overview image in #steam-code.
/steam update
Force-refresh the overview image MOD
Regenerates the Steam codes card and reposts it in #steam-code. Runs automatically when the image is more than 24 hours old.
Stream Alerts
10 commands
How it works - register your streamer handles once with the commands below. When you go live the bot posts an alert embed in the server's configured stream alerts channel. Twitch and YouTube use webhooks (near-instant); Kick is checked every 5 minutes. A 30-minute cooldown prevents duplicate alerts for the same stream session.
/stream settwitch <handle>
Register your Twitch channel
Links your Twitch username so the bot posts a go-live alert whenever you start streaming. Alerts are sent via Twitch EventSub webhooks - no polling. Updating your handle automatically re-registers the webhook.
/stream setyoutube <channel-id>
Register your YouTube channel
Links your YouTube channel ID (the
UC... identifier from your channel URL) for go-live alerts. Uses YouTube PubSubHubbub push notifications - the bot only alerts for actual live streams, not regular video uploads. Your channel ID can be found in YouTube Studio under Settings → Channel → Advanced settings./stream setkick <handle>
Register your Kick channel
Links your Kick username for go-live alerts. Kick does not offer a public webhook API so the bot polls your channel status every 5 minutes.
/stream profile
View your registered stream channels
Shows your currently linked Twitch, YouTube, and Kick channels with clickable links. Response is private to you.
/stream clear
Remove all your stream channels
Unlinks all of your registered handles and cancels the associated Twitch EventSub and YouTube PubSubHubbub webhook subscriptions. Kick polling simply stops on the next cycle.
/stream setchannel <#channel>
Set the stream alerts channel MOD
Designates the text channel where go-live alert embeds are posted for this server. All platforms (Twitch, YouTube, Kick) post to the same channel. Requires Manage Channels.
/stream clearchannel
Disable stream alert announcements MOD
Removes the configured alerts channel so no go-live embeds are posted. Individual member stream registrations are preserved - reconfigure with
/stream setchannel to resume. Requires Manage Channels./stream ban <@user>
Suppress a member's stream alerts MOD
Prevents the specified member's go-live alerts from being posted in this server. The member's stream registrations are untouched - they remain active on other servers. Requires Manage Channels.
/stream unban <@user>
Restore a member's stream alerts MOD
Lifts a previously applied stream alert ban, allowing the member's go-live alerts to appear in this server again. Requires Manage Channels.
/stream banlist
View the stream alert ban list MOD
Shows all members whose stream alerts are currently suppressed in this server, along with the date the ban was applied. Requires Manage Channels.
Inactivity Detection
7 commands · Manage Roles only
/inactivity info
Show inactivity settings MOD
Displays the current inactivity configuration: threshold days, tag, role, and whether stream alerts are suppressed for inactive members.
/inactivity setdays <days>
Set the inactivity threshold MOD
Number of days without any XP (text, voice, or reaction) before a member is flagged as inactive. Default is 90 days; minimum is 7. The daily sweep adds the role and/or tag; earning any XP removes them immediately.
/inactivity tag <enabled>
Enable or disable the nickname tag MOD
When enabled, inactive members have a tag (default: ˡᵘʳᵏ) appended to their nickname. Removed instantly when they next earn XP. Use
/inactivity settag to change the tag text./inactivity settag [tag]
Customise the inactivity tag MOD
Sets the text appended to inactive members' nicknames. Leave blank to revert to the default (ˡᵘʳᵏ). Superscript Unicode characters work well here.
/inactivity setrole <role>
Assign a role to inactive members MOD
The specified role is added to members when the daily sweep marks them inactive, and removed immediately when they earn any XP.
/inactivity clearrole
Remove the inactivity role MOD
Clears the configured inactivity role so no role is assigned to inactive members (nickname tag still works independently).
/inactivity streamalerts <suppress>
Control stream alerts for inactive members MOD
When
suppress is true (the default), go-live notifications from inactive members are silently skipped. Set to false to allow them through regardless of inactivity status. New Member Role
8 commands · Manage Guild only
/newmember setrole <role>
Set the new member role MOD
This role is automatically assigned to every member when they first join the server. It is removed after the configured number of days -and minimum XP, if set. While a member holds this role their nickname can optionally show a ⁿᵉʷ tag (see
/newmember tag)./newmember setdays <days>
Set the removal delay MOD
How many days a member keeps the new member role before it is automatically removed. Defaults to 14 days. Accepts 1–365.
/newmember setmintextxp <xp>
Set a minimum text XP requirement MOD
If set, the member must earn at least this much text (chat) XP before the role is removed -even if they've been around long enough. Requires the XP & Levels feature to be enabled. Set to
0 to remove the requirement./newmember setminvoicexp <xp>
Set a minimum voice XP requirement MOD
Same as text XP but for voice channel activity. Useful for ensuring new members actually participated in voice before being promoted out of the new-member tier. Set to
0 to remove the requirement./newmember setxpmode <and|or>
Set XP requirement mode MOD
Controls how the text and voice XP requirements interact when both are set. and (default) -the member must meet both minimums. or -meeting either one is enough. Has no effect if only one XP requirement is configured.
/newmember tag <on|off>
Toggle the ⁿᵉʷ nickname tag MOD
When on (default), the bot appends ⁿᵉʷ to new members' server nicknames while they hold the role -e.g.
Dusty¹²ⁿᵉʷ. The tag is automatically removed when the new member role is removed. Turn off if your server prefers nicknames untouched./newmember info
Show current configuration MOD
Displays the configured role, day threshold, text and voice XP minimums, XP mode, and whether the nickname tag is enabled for this server.
/newmember disable
Disable new member role MOD
Clears the configuration. No role will be assigned to future joiners. Members who already have the role keep it.
Invite Roles
3 commands · Manage Guild only
/inviterole set <invite> <role>
Assign a role to an invite link MOD
Anyone who joins the server using this invite link will automatically receive the specified role. Pass either the bare code (e.g.
2RR4sbwbaN) or the full link (https://discord.gg/2RR4sbwbaN) -both work./inviterole remove <invite>
Remove an invite role mapping MOD
Stops automatically assigning a role for this invite link. Members who already received the role keep it.
/inviterole list
Show all invite role mappings MOD
Lists every invite code configured for this server and the role it maps to.
About / Member Stats
2 commands
/about member [user]
View stats for a server member
Shows text and voice XP with server-wide rank, original join date, who invited them, and (for former members) when they left. If the member has registered any stream channels, clickable Twitch, YouTube, and Kick links are included. Leave user blank to see your own stats. Response is private to you.
/about server
View server statistics and member count history
Displays a server overview embed with active and all-time member counts, historical peak, top 3 text and voice XP holders, top 5 inviters, birthday registrations, and totals for events, polls, and giveaways. Also posts a member count graph -a filled area chart covering the last 12 months of daily member snapshots. Posted publicly.
Voice Rooms
15 commands
Auto-behaviors -no command needed: •
When a member joins a designated lobby channel, the bot creates a temporary voice channel named after them and moves them in. •
Rooms are deleted automatically when the last member leaves. •
Orphaned empty rooms are cleaned up when the bot reconnects. •
Blocked users are kicked the moment they try to enter. Muted users are re-muted if they leave and rejoin. •
When the host leaves, ownership passes to another member still in the room.
/voicerooms add-lobby <channel> [category] [user-limit]
Register a lobby channel MOD
Any voice channel can be a lobby. Members who join it get their own temporary room created automatically. Optionally pin rooms to a specific category and set a default user-limit.
/voicerooms remove-lobby <channel>
Unregister a lobby channel MOD
Stops the channel from creating rooms. Existing rooms are not affected.
/voicerooms list
List all configured lobbies MOD
Shows every lobby channel, the category rooms are created in, and any default user limit.
/room lock
Lock your room
Prevents new members from joining. People already inside stay in. Only the host can use room management commands.
/room unlock
Unlock your room
Reopens the room so anyone can join freely.
/room hide
Hide your room from the channel list
The room becomes invisible to everyone except members already inside.
/room show
Make your room visible again
Restores the room in the channel list without changing the lock state.
/room limit <count>
Set a user limit
Caps how many members can be in the room at once. Use
0 to remove the limit./room kick <user>
Kick a member
Disconnects the user from the room. They can rejoin unless the room is locked or they are blocked.
/room block <user>
Block a member
Kicks the user and prevents them from rejoining for the life of the room. The block is cleared when the room is deleted.
/room unblock <user>
Remove a block
Allows the user to rejoin. If the room is still locked they still can't enter until you unlock it.
/room mute <user>
Server-mute a member
Silences the user in the room. The mute is re-applied automatically if they leave and come back.
/room unmute <user>
Remove a server-mute
Restores the user's ability to speak in the room.
/room transfer <user>
Transfer host control
Hands all room management permissions to another member currently in the channel.
/room preset [lock] [hide] [limit] [password]
Pre-configure your next room
Set your preferred lock, visibility, and size before you join a lobby. Settings are applied automatically when you create your room, and expire after 30 minutes if you don't join.
Server Administration
6 commands · Manage Guild only
/admin setwelcomechannel <#channel>
Set the join message channel MOD
Welcome messages are posted here whenever a new member joins the server. The welcome channel and goodbye channel are configured independently - you can set only this one and leave goodbye unconfigured, and no departure messages will ever be posted.
/admin clearwelcomechannel
Disable join messages MOD
Turns off welcome messages for this server without deleting the channel.
/admin setgoodbyechannel <#channel>
Set the leave message channel MOD
Goodbye messages are posted here whenever a member leaves or is removed from the server. This is fully optional - leaving it unconfigured means no departure messages are posted at all. You can also point it at a private or mod-only channel to keep departures out of public view.
/admin cleargoodbyechannel
Disable leave messages MOD
Turns off goodbye messages for this server without deleting the channel.
/admin setsteamchannel <#channel>
Set the Steam codes channel MOD
The Steam friend-code overview image will be posted and auto-refreshed here.
/admin clearsteamchannel
Disable Steam overview MOD
Turns off automatic Steam friend-code image posting for this server.
/admin settimezone <timezone>
Set the server display timezone MOD
Sets the IANA timezone used for all server-side time display - event cards, leaderboard footers,
!time. Example: America/Chicago, Europe/Amsterdam./admin cleartimezone
Reset server timezone to default MOD
Resets the server timezone back to
America/Chicago (CST/CDT)./admin addgiveawayrole <@role>
Allow a role to start giveaways MOD
Grants members of the specified role permission to use
/giveaway start, in addition to the default mod requirement./admin removegiveawayrole <@role>
Revoke a role's giveaway permission MOD
Removes a role from the giveaway allow-list. Mods with Manage Messages can always start giveaways regardless.
Prefix Commands
type in any channel
!card [@user]
Personal scorecard image
XP bars, voice/text levels, server rankings, game playtime, and kudos count. Leave blank for your own card.
!top
All-time top 10
Two leaderboards side by side - top 10 by total voice XP and top 10 by total text XP.
!lastmonth
Last month's top gainers
Top 30 players ranked by XP earned in the previous calendar month - voice and text separately.
!gamer
Top 10 gamers
Ranked by total tracked in-game playtime from the last month.
!time
Server time
Displays the current time in the server's configured timezone (set by an admin via
/admin settimezone; defaults to CST). Cross-Server Bridge
23 commands
/bridge info
Bridge info for this channel
Shows the topic this channel is bridged to, the relay mode, all subscribed servers and their channels, and whether the topic is password-protected. The password itself is never shown. Works for any member - no permissions required.
/bridge index [filter]
Browse public bridge topics
Lists all public (non-password-protected) bridge topics and the servers subscribed to them. Topics with a description show it beneath their name. Supports
* as a wildcard filter on the topic name - e.g. *gaming* shows every topic with "gaming" in the name. Password-protected topics are never listed./bridge subscribe #channel topic [mode] [password] [description]
Subscribe a channel to a topic MANAGE CHANNELS
Connects a channel to a named logical topic so messages are relayed across all servers subscribed to the same topic.
mode is AlwaysOn (default - relay every message) or OptIn (only relay messages that start with >>). The bot creates a webhook automatically. If the topic is password-protected, the correct passphrase must be supplied. The first server to subscribe creates the topic; they may also supply an optional description (max 150 chars) at creation time, or set it later with /topic setdescription. All existing subscribers are notified when a new server joins. Attached images (JPG/PNG/GIF/WEBP) are displayed inline on the receiving end; bare GIF/media URLs are passed through so Discord's link preview renders them./bridge unsubscribe topic
Unsubscribe from a topic MANAGE CHANNELS
Removes this server's subscription and deletes the relay webhook. Topic name autocompletes from your active subscriptions. If you are the topic owner, a confirmation dialog appears - confirming terminates the topic entirely and notifies all subscriber servers.
/bridge setreadonly <topic> <enabled>
Set topic to read-only (announcement mode) TOPIC OWNER
When enabled, only messages from the owner server are relayed - subscriber servers receive but cannot send. Pass
false to restore two-way messaging. Only the guild that created the topic can toggle this./topic setdescription <topic> [description]
Set topic description TOPIC OWNER
Sets a short description (max 150 characters) shown beneath the topic name in
/bridge index and at the top of /bridge about and /bridge info. Leave blank to clear the description. Only the server that created the topic can use this./bridge pause #channel topic
Pause incoming relay MANAGE CHANNELS
Stops incoming relayed messages from appearing in this channel's subscription without removing it.
/bridge resume #channel topic
Resume incoming relay MANAGE CHANNELS
Re-enables relaying after a pause.
/bridge topics
List all active topics
Shows every topic name that currently has at least one server subscribed.
/bridge subscriptions
List this server's subscriptions MANAGE CHANNELS
Shows all channels and topics this server is subscribed to, including mode and paused state.
/bridge setimage url
Set custom footer image MANAGE GUILD
Sets a custom image shown in the bridge footer to identify this server. Overrides the Discord server icon.
/bridge removeimage
Remove custom footer image MANAGE GUILD
Reverts to using the Discord server icon in bridge message footers.
/bridge refreshimage
Refresh cached server icon MANAGE GUILD
Forces the bot to re-cache the Discord server icon for use in bridge footers (normally cached until midnight UTC).
/bridge controlled
Topics you control MANAGE CHANNELS
Lists every bridge topic this server created and owns, along with the current subscriber count and whether it is password-protected.
/bridge listservers topic
List subscribed servers TOPIC OWNER
Shows all servers subscribed to a topic, their guild IDs, subscribed channels, and relay mode. Only the server that created the topic can see this.
/bridge kickserver topic server-id
Remove a server from a topic TOPIC OWNER
Forces another server off a bridge topic and removes their relay webhook. Use
/bridge listservers to find the server ID. Only the topic-creating server can do this./bridge setpassword topic password
Set topic passphrase TOPIC OWNER
Sets or changes the passphrase required to subscribe to a topic. Only the server that originally created the topic can do this.
/bridge removepassword topic
Remove topic passphrase TOPIC OWNER
Removes the passphrase from a topic, making it open for any server to join. Only the server that originally created the topic can do this.
/bridge ban user-id [topic]
Ban a user from bridge feeds MANAGE MESSAGES
Prevents a user's messages from appearing in this server's bridge feeds. Omit
topic to ban across all topics; specify a topic to restrict the ban to one feed./bridge unban user-id [topic]
Remove a bridge ban MANAGE MESSAGES
Lifts a previously applied bridge ban for the specified user.
/bridge banlist
List bridge bans MANAGE MESSAGES
Shows all users banned from this server's bridge feeds and which topics they're banned from.
/bridge topicban <topic> <user-id>
Ban a user from an entire topic TOPIC OWNER
Silences a user across every server on the topic - no relay carries their messages in or out, regardless of which server they send from. Only the guild that created the topic can use this.
/bridge topicunban <topic> <user-id>
Remove a topic-wide ban TOPIC OWNER
Lifts a previously applied topic-wide ban, restoring the user's ability to participate on that topic from any server.
/bridge topicbanlist <topic>
List topic-wide bans TOPIC OWNER
Shows all users silenced network-wide on a topic. Only the topic owner can see this list.
💡 Tip -protect Bridge channels from new members:
In your Discord server settings, add your new-member role to each Bridge-subscribed channel and set View Channel (or Send Messages) to ❌ Deny. This stops freshly joined members from seeing or posting in shared channels until they earn the role's removal -a simple way to vet users before they appear on your bridge feed and protect partner servers from spam.
📋 Bridge Usage Policy
Topic names are not owned. We reserve the right to rename any topic at any time -including to resolve copyright claims or abuse reports. All subscribers automatically follow the renamed topic with no reconfiguration needed.
Prohibited content. Topics found to contain illegal content, facilitate illegal activity, or promote racism will be blocked immediately upon discovery.
No expectation of privacy. Bridge messages are relayed across multiple servers and are not private. Message content is only reviewed when required by law or when a report is filed. By using the Bridge, you acknowledge these terms.
Prohibited content. Topics found to contain illegal content, facilitate illegal activity, or promote racism will be blocked immediately upon discovery.
No expectation of privacy. Bridge messages are relayed across multiple servers and are not private. Message content is only reviewed when required by law or when a report is filed. By using the Bridge, you acknowledge these terms.
Roles
8 commands · Manage Guild only
/roles setchannel <#channel>
Set the roles channel MOD
Designates the channel where the roles embed is posted. Changing it clears the stored message ID so the next
/roles publish posts a fresh embed./roles publish
Publish or update the embed MOD
Posts the roles embed with one button per role, sorted alphabetically. Uses 2 columns normally, 3 columns at 15+ roles. Edits in place if already published; pins on first post.
/roles add <role> <desc> <emoji>
Add a role entry MOD
Adds a role to the list. Emoji accepts a standard emoji (😁), a custom server emoji, or a shortcode like
;robot; - semicolons bypass Discord's own emoji replacement. Run /roles publish to update the embed./roles remove <role>
Remove a role entry MOD
Removes a role from the list. Only currently configured roles appear in the autocomplete. Run
/roles publish to update the embed./roles exclude <role>
Exclude a role MOD
Hides a role from the
/roles add dropdown permanently. Useful for roles that should never be self-assigned./roles unexclude <role>
Unexclude a role MOD
Lifts an exclusion so the role can be added to the list again. Only excluded roles appear in the dropdown.
/roles excludelist
Show excluded roles MOD
Lists all roles currently on the exclusion list. Response is ephemeral.
/roles list
Show configuration MOD
Shows the configured channel, publish status, all current role entries, and the exclusion list. Response is ephemeral.
Utility
1 command
/whois <userid>
Look up a Discord user by ID
Fetches and displays a user's profile by Discord ID - works even if the user is not in this server. Shows username, display name, account creation date, and (for members) their server join date and roles. The result is posted publicly so the whole channel can see it.
Automatic behaviours - no command needed: •
Text XP is earned on every message (up to 10 pts). •
Voice XP accumulates while you're in a voice channel, checked every 30 s. •
You earn 2× voice XP during an active event if you signed up and are in the organiser's voice channel. •
When an event ends the bot posts an Event Recap with sign-up vs attendance, minutes per attendee, and an MVP. •
Polls and Giveaways resolve automatically when their timer expires - the bot picks a winner and posts results. •
The Steam codes image auto-refreshes every 24 hours and whenever someone adds, removes, or changes their display name. •
When you gain a voice level the bot updates your server nickname to append a Unicode superscript number showing your current voice level (e.g. Dusty¹²) -disable this per-server with
/xp showlevel false without losing XP tracking. •
If the New Member Role feature is active and the nickname tag is enabled, newly joined members will also see ⁿᵉʷ appended to their name (e.g. Dusty¹²ⁿᵉʷ); the tag is removed automatically when the role is removed. •
The bot records each member's original join date and who invited them the first time they join -this data powers /about member and the top-inviters list in /about server.