Documentation ยท v1
How to do everything with Panda.
One page, every feature, written for owners โ not Discord-bot veterans. If a step assumes you already know something, that's a bug โ open an issue and we'll fix it.
Setup ยท 2 min
If you've never set up a bot before
Panda doesn't have a one-click invite URL โ you add it from inside Echoed, the way you'd add any other bot, then come here to configure it. These five steps get you live with sensible defaults.
- In Echoed, open the server you want Panda in. Click the server name at the top of the channel list, then Server Settings.
- Click the Bots tab. You'll see this tab only if you have Manage Server permission โ if you don't, ask your server owner to add Panda for you.
- Find Panda in the list of available bots and click Add. Echoed shows you what permissions Panda is requesting โ review them and confirm. Panda appears in your member list immediately.
- Come back to this site (memebot.echoed.gg) and click Login with Echoed in the top right.
- Pick your server from the sidebar. The first time you land, Panda's already running with sensible defaults โ type
!pingin any text channel to confirm it's responding.
That's it. Everything else on this page is fine-tuning.
Inviting Panda to a server
You add Panda from inside Echoed โ there's no separate invite URL or OAuth popup. The full flow is below. You'll need Manage Server permission on the server. If you don't, ask the owner to add it for you.
- Open Echoed and go to the server you want Panda in.
- Click the server name at the very top of the channel list โ a menu drops down.
- Pick Server Settings. The settings panel opens.
- In the settings sidebar, click the Bots tab. (If you don't see this tab, you don't have Manage Server permission โ see the heads-up below.)
- Browse the available bots, find Panda, and click Add.
- Echoed shows you what permissions Panda needs. Read them โ you can untick anything you don't want, but some features will stop working without their permissions (e.g. untick Manage Roles and reaction roles + level rewards stop working).
- Confirm. Panda joins your server within a second or two and shows up in the member list.
- To configure Panda, come to memebot.echoed.gg and click Login with Echoed. Your server appears in the dashboard sidebar.
Heads up
Don't have Manage Server permission? You can still configure Panda's settings via this dashboard if your server owner grants you a role with Manage Server later. Without it, you can't add the bot in the first place.
Heads up
Removing Panda works the same way โ go back to Server Settings โ Bots in Echoed and click Remove next to Panda. Your saved configuration stays available for 30 days in case you re-add it.
Finding your way around the dashboard
Every feature has a dedicated page. The sidebar on the left lists them all; the main panel shows whichever one you've clicked. Whatever changes you make are not saved until you press Save at the bottom of the page โ you'll see a yellow bar appear once you've edited anything.
If you switch pages with unsaved changes, the dashboard warns you before discarding them. Press Discard to throw them away or Stay to go back.
Heads up
Saved settings apply within a few seconds. If you've just changed something and chat doesn't reflect it, give it 10 seconds before assuming it's broken.
Permissions & roles
Most features can be restricted to specific roles or channels. The pattern is the same everywhere in the dashboard:
- Allowed roles โ only members with at least one of these roles can use the feature. Leave empty to allow everyone.
- Ignored roles โ members with any of these roles are blocked from the feature, even if they're in Allowed roles. Useful for muting bots from earning XP.
- Allowed channels โ the feature only fires in these channels. Leave empty to allow everywhere.
- Ignored channels โ the feature is suppressed in these channels. Useful for excluding spam channels from XP or auto-mod.
Ignored always wins over Allowed. So if you put @bots in Ignored roles, members with that role never trigger the feature, even if they have other roles in Allowed.
Community
Music
Panda plays YouTube and SoundCloud audio in any voice channel. It joins the channel you're in when you run !play, so you don't have to specify one.
DJ role: if you set a DJ role on the dashboard, only members with that role can skip, pause, stop, or change the volume. Everyone can still queue songs and use !rank-style lookup commands.
- Open the dashboard โ Music.
- DJ role โ pick a role (or leave empty to let anyone control playback).
- Default volume โ 50 is a reasonable starting point; persists per server.
- Click Save.
- Join a voice channel and type
!play lofi study mix. Panda joins, queues the result, and starts playing.
Commands
!play <query or url>Search and queue a track. Accepts plain text, YouTube URLs, SoundCloud URLs, or playlists.!skipSkip to the next track. DJ-role only if a DJ role is set.!queueShow the current queue with positions and durations.!nowplayingShow the current track and progress.!volume <0-100>Set playback volume. DJ-role only. Persists across restarts.!pause / !resumePause or resume the current track. DJ-role only.!stopStop playback and clear the queue. DJ-role only.!loop track / queue / offLoop the current track, the entire queue, or stop looping.!shuffleShuffle the queue.!seek <time>Jump to a position in the current track. Format: 1:30 or 90.!remove <position>Remove the track at that queue position.
Community
Levels & XP
Members earn XP for each message they send. As they level up you can grant them roles โ that's how you build a "regulars" or "veteran" tier without manually assigning roles every time someone hangs around.
Anti-spam decay is built in: once a member sends a message they have to wait 60 seconds before another message earns XP. Bots and ignored channels never earn XP.
- Open the dashboard โ Levels and toggle Enabled on.
- XP per message โ defaults to 15-25 (random in that range). Lower numbers slow progression; higher speeds it up.
- Ignored channels โ add channels where messages shouldn't earn XP (spam, bot-commands, etc).
- Role rewards โ click Add reward. Pick a level (e.g. 5) and a role (e.g. @member). When someone hits level 5 they automatically get @member.
- Stack roles โ if on, members keep all reward roles they've earned. If off, they only have the highest one.
- Click Save.
Commands
!rankShow your XP, level, and how much you need for the next level.!rank @memberShow another member's rank.!leaderboardTop 10 members in the server by XP.!setxp @user <n>Override a member's XP. Manage Server only.!resetxp @userReset a member to 0 XP. Manage Server only.
Community
Welcome messages
When a new member joins, Panda can post a greeting in any channel and optionally assign them a starter role.
- Open the dashboard โ Welcome and toggle Enabled on.
- Channel โ pick where the welcome message should appear (usually #general or a dedicated #welcome).
- Message โ write the greeting. Use
{user}to mention the new member,{server}for the server name, and{count}for total member count. - Auto-role (optional) โ pick a role to assign new members automatically. Useful for verification gates.
- Click Save, then Test to see what the message looks like.
Commands
!welcometestTrigger the welcome message as if you just joined.
Community
Reaction roles
Members assign themselves roles by reacting to a message with a specific emoji. Common uses: pick your colour, opt into a ping role, choose a pronoun.
- Post a message in your server explaining the choices (e.g. "React with ๐ด for red, ๐ต for blue").
- Right-click that message and copy its message ID. (If your settings don't show "Copy ID", turn on Developer Mode in Echoed's user settings.)
- Open the dashboard โ Reaction Roles and click New panel.
- Paste the message ID, pick the channel, then add each emoji + role pair.
- Mode: Toggle โ react to add the role, react again to remove it. Verify โ react once to add, can't unassign. Pick one โ only one role from the panel at a time.
- Click Save. Panda adds its reactions to the message.
Heads up
Panda needs Manage Roles permission and the roles you're handing out must sit below Panda's role in the role list. If a role is above Panda, the assignment silently fails.
Community
Giveaways
Run reaction-based giveaways with auto-pick winners, configurable duration, and entry requirements (minimum account age, required role, etc.).
- Open the dashboard โ Giveaways and click New giveaway.
- Channel โ where the giveaway message will be posted.
- Prize โ short text describing what's being given away.
- Duration โ when the giveaway ends. Format:
3dfor 3 days,12hfor 12 hours. - Winners โ how many people win.
- Requirements (optional) โ required role, minimum account age in days, etc.
- Click Start. Panda posts the giveaway and members enter by reacting with ๐.
Commands
!giveaway startQuick-start a giveaway from chat. Walks you through the prompts.!giveaway end <id>End a running giveaway early and pick winners.!reroll <id>Pick new winners for a finished giveaway. Useful if a winner doesn't claim.
Automation
Auto-mod filters
Eight filters that watch every message and act when something crosses your threshold. Each one is independent โ you can turn any on or off without affecting the others.
The filters: spam (rapid messages), caps (high uppercase ratio), links (URLs), invites (Discord/Echoed invites), mass-mention, emoji-spam, zalgo (corrupted text), bad-words (your custom list).
- Open the dashboard โ Auto-mod.
- For each filter you want active, toggle it on and set the threshold:
- Spam: N messages within M seconds
- Caps: percentage of uppercase letters in messages over X characters long
- Bad-words: add your own list one per line; supports partial matches
- Action per filter: delete, warn, timeout, or kick. Choose what happens when the filter fires.
- Exempt roles โ moderators and trusted members. They never trigger filters.
- Click Save.
Heads up
Filter actions log to the audit channel you set under Moderation (see below). If you haven't set one, the actions still happen but you won't have a record โ we strongly recommend setting an audit channel before turning auto-mod on.
Automation
Auto-react
Panda adds reactions automatically to messages matching patterns you specify. Useful for: marking announcements with a starter set of reactions, adding ๐ to every message in #suggestions, etc.
- Open the dashboard โ Auto-react and click New rule.
- Match โ choose any message in channel (always reacts) or contains text (matches a keyword).
- Channel โ restrict to one channel, or leave empty to apply server-wide.
- Reactions โ pick one or more emoji. Custom server emoji work.
- Click Save.
Automation
Custom commands
Define your own !commands that send a fixed response. Common uses: server rules, FAQ replies, role-info cheatsheets, recurring jokes.
- Open the dashboard โ Custom Commands and click New command.
- Trigger โ the command name without the
!. E.g.rulesmeans members run!rules. - Response โ what Panda replies. Use
{user},{server},{args}placeholders. - Restrictions (optional) โ limit to specific channels or roles.
- Cooldown (optional) โ minimum seconds between uses, per member.
- Click Save. The command works immediately.
Heads up
Custom command names can't collide with built-in commands (e.g. you can't make !play a custom command because !play is built in). The dashboard warns you before saving.
Automation
Scheduled messages
Post messages on a schedule โ daily reminders, weekly event announcements, monthly check-ins.
- Open the dashboard โ Schedules and click New schedule.
- Channel โ where the message gets posted.
- Message โ what to send. Mentions and links work normally.
- Frequency โ once, daily, weekly, or custom (cron-style:
0 9 * * 1= 9am every Monday). - Timezone โ defaults to UTC. Pick your server's primary timezone for sane "9am" expectations.
- Click Save.
Automation
Keyword alerts
Get a DM when specific words show up in your server's chat. Useful for catching mentions of your name, your project, or a topic you care about โ without scrolling everywhere.
- Open the dashboard โ Keywords and click Add keyword.
- Keyword โ the word or phrase to watch for. Case-insensitive. Whole-word matching by default.
- Notify โ yourself, or a list of members.
- Restrict to channels (optional) โ only watch in specific channels.
- Click Save. You'll get a DM the next time the word appears.
Heads up
Keywords don't fire when the keyword is in the watcher's own message โ you won't ping yourself.
Server health
Moderation
Manual mod actions with full audit logging. Each action gets a case number and shows up in your audit channel with the actor, target, reason, and any escalation context (e.g. "3rd warning in 30 days").
- Open the dashboard โ Moderation.
- Audit channel โ pick a private channel only mods can read. Every mod action gets logged here.
- DM target on action โ if on, Panda DMs the kicked/banned member with the reason. If off, they're silently removed.
- Escalation thresholds (optional) โ e.g. 3 warnings in 30 days = auto-timeout. Configurable per action.
- Click Save.
Commands
!warn @user <reason>Issue a warning. Logged + escalation-aware. Reason is required.!timeout @user <duration> <reason>Mute the member for a duration. Format: 1m, 1h, 7d.!kick @user <reason>Remove from server. They can rejoin with a new invite.!ban @user <reason>Permanent ban. Logged. Use !unban to reverse.!unban <userId>Lift a ban. Use the user ID since they're not in the server anymore.!case <number>Pull up a specific case from the audit log.!history @userShow every mod action against this user.
Server health
Anti-raid
Watches the rate at which new members are joining and the average age of their accounts. When something looks off, Panda enters lockdown: invites pause, verification level climbs, new joiners go to a holding queue you review when you're back.
- Open the dashboard โ General โ Anti-raid.
- Join rate threshold โ N joins within M seconds triggers lockdown. Default 12 / 60 catches most automated raids without false-positiving viral growth.
- Account age threshold โ accounts younger than this go straight to the queue. Default 24 hours.
- Lockdown notification channel โ where Panda pings you when lockdown engages.
- Auto-lift โ minutes after the last suspicious join with no further activity, lockdown lifts automatically. Default 30. Set to 0 to require manual lift.
- Click Save.
Commands
!lockdownManually engage lockdown. Pauses invites and queues new joins.!unlockManually lift lockdown.!raidqueueShow the holding queue with timestamps and account ages.!raidqueue approve <user>Approve a queued member into the server.!raidqueue reject <user>Kick a queued member.
Server health
Stat counters
Live-updating voice channel names that show server stats โ member count, online count, custom values you push from outside.
- Create a voice channel that nobody will join (e.g. ๐ Members: โ). Members listening to the channel name = members not connecting to it.
- Open the dashboard โ Stat Counters and click New counter.
- Channel โ pick the voice channel from step 1.
- Stat โ total members, online members, member count of a specific role, or custom (push values via the API).
- Format โ e.g.
๐ Members: {value}. - Click Save. The channel renames within a minute.
Heads up
Echoed rate-limits channel renames to about twice every 10 minutes. Counters refresh on that schedule โ don't expect second-by-second updates.
Outside reach
Social alerts
Watch Twitch streamers, YouTube channels, and Reddit feeds. Panda posts in your channel when they go live or upload something new.
- Open the dashboard โ Notifications and click New watcher.
- Service โ Twitch, YouTube, or Reddit.
- Account / channel / subreddit โ paste the username, channel handle, or subreddit name.
- Notify in โ pick the channel where the alert posts.
- Mention (optional) โ role to ping with each alert. Many servers create a @stream-pings role members opt into via reaction roles.
- Custom message (optional) โ override the default text. Use
{title},{url},{author}. - Click Save.
Heads up
Watchers poll every few minutes โ alerts arrive within 5 minutes of the actual event, not instantly. Twitch is slightly faster (1-2 min) because it uses webhooks.
When something doesn't work
Most "Panda isn't responding" reports come down to one of three causes. Walk through these in order before opening a bug report.
Panda isn't responding to commands at all
- Confirm Panda is online โ it should appear with a green dot in your member list.
- Check the channel โ Panda needs Send Messages permission in the channel you're typing in. If @everyone can talk and Panda can't, an explicit role override is blocking it.
- Check the command prefix โ defaults to
!. If your server changed it, use the new prefix instead. - Try a known-working command like
!ping. If that responds, the issue is feature-specific (next section).
Panda responds to !ping but a specific feature doesn't work
- Open the dashboard โ the feature's page. Confirm Enabled is on.
- Check the channel and role restrictions on that feature. The feature might be configured to only run in certain channels or for certain roles.
- Check Panda's role permissions. Some features need extra permissions (e.g. reaction roles need Manage Roles; auto-mod with delete action needs Manage Messages).
- Check role hierarchy. Panda can't moderate or assign roles that sit above its own role in the role list. Drag Panda's role up if needed.
Music plays but skips/stops randomly
- Confirm the source is reachable. Some YouTube videos are region-locked or marked as music-label-only โ those won't play.
- Check voice channel size. If your channel hits its user limit, Panda may have been auto-disconnected.
- Try
!stopthen!play <query>again. This resets the audio pipeline. - If only specific tracks fail, paste the URL โ that lets us check whether it's a source issue or our parser.
Still stuck? Open an issue on GitHub with: what you tried, what you expected, what happened instead, and your server ID (visible in the dashboard URL). We read every one.