Admin handler
Bot-side handler for dashboard owner actions (leave_guild, ...) + guild blocklist enforcement.
Features
Every feature works on its own and can be turned on or off per server from the dashboard. Pick the ones that fit your community — ignore the rest.
Bot-side handler for dashboard owner actions (leave_guild, ...) + guild blocklist enforcement.
Stops members from posting links to other Discord servers. Catches official Discord invite links, sneaky redirectors, and shortened links (like bit.ly) that hide an invite. Each type can be turned on or off independently.
Detects and acts on message spam patterns: rapid-fire, duplicates, mass-mentions, mass-emojis, ALL CAPS. Each pattern is individually togglable per guild.
Records every moderator action and every automated filter trigger to the audit_log table, AND echoes them as rich embeds to per-event-type log channels you pick below. Set the channels you care about; leave the rest blank to suppress.
Make your own slash commands. /cc <name> runs whatever response you saved — text, mentions, server info, even arguments the user types. Great for FAQs, rules links, or running gags. Manage your commands from the dashboard.
Daily DELETE sweep over high-growth tables (audit_log, filter_matches, bot_command_queue, mention_events, etc.) so the DB stays bounded over time. Per-table retention is policy-driven (sane defaults bundled). Logs deletion counts to lifecycle_log on every cycle. Never touches infractions, tickets, transcripts, or anything the operator might need long-term — those are preserved by design.
Send a rich embed to any channel via /embed send. Save embeds as named templates per server with /embed save, then /embed load to re-use them for announcements. JSON-edit supported for power users.
Tracks guild joins / removes / rejoins. When the bot is removed from a guild, the guild's data is archived (not deleted) for 30 days; if the bot is re-added within that window, all settings and history are restored. A daily janitor task purges expired archives.
Per-guild config storage + the /config slash commands. Disabling this cog leaves all other cogs running on their default settings (slash commands stop responding, but the underlying cache still works).
Members add words they want to know about (their username, their game, their company, etc.) and MARVIN DMs them when someone mentions one of those words in chat. Like a personal ping system that doesn't bother the rest of the server.
The core mod toolkit: /warn, /mute, /kick, /ban, /note, /case, /cases. Members rack up warnings, and MARVIN can auto-escalate (for example: 3 warnings in 30 days = 1 hour mute). All actions are recorded so your staff can pull a member's full history with /cases.
Welcome flow when the bot joins a server. Creates a private bot-setup channel visible only to the user who added the bot + anyone with Manage Server, and pins a how-to embed with links to the dashboard and a 5-step quick-start checklist.
Members run /remind to have MARVIN ping them later — in a channel or a DM. Accepts natural times like "in 30 minutes" or "tomorrow at 9am". Reminders fire within seconds of when you set them.
Members thank each other with /rep — builds a leaderboard of the most helpful people in your server. Great for finding natural community leaders. Cooldowns prevent spam.
Save bits of text that anyone can recall with /tag <name>. Common uses: server rules, FAQ answers, copypasta. Members can create their own snippets too (or you can lock that to specific roles).
Catches the classic scam pattern: a fresh account posts 3-6 near-identical images very quickly, often pinging @everyone. MARVIN recognises the images even if they've been slightly edited, reads any text in them, and combines those signals into a confidence score. Default settings are gentle — if you see false positives, you can dial it back.
When someone deletes a message, anyone can run /snipe in that channel to see what was deleted. Useful when scammers post and quickly delete, or when you missed something before it got removed. Stops working after the message is older than a configurable time (default 60 minutes).
Sticky messages stay at the bottom of a channel — perfect for rules or important info. Scheduled messages fire on a timer you set (once, or repeating) — great for daily reminders, weekly events, or one-off announcements.
Remembers what roles a member had when they leave, and gives them back on rejoin. Stops people from leaving and rejoining just to drop a mute, and saves your members from having to re-pick their roles every time they come back.
Catches members using multiple accounts to dodge bans. Members click a Verify button → confirm with Discord → MARVIN quietly notes a fingerprint of their connection. If two accounts share the same fingerprint, your staff get an alert. We don't ban anyone automatically — a shared connection can mean two people in the same house. You decide what to do.
Protects against rogue admins or compromised staff accounts. If someone with admin powers mass-deletes channels, mass-bans, or mass-creates roles in a short time, MARVIN strips their admin roles and alerts you before they can do real damage. Lifesaver if a moderator's account ever gets hacked.
Spots raid waves — lots of accounts joining at once. When the join rate spikes past what you set, MARVIN alerts your staff and (if you want) auto-kicks everyone who joined during the wave. After the wave passes, things go back to normal.
Automatically create threads in selected channels, and/or auto-adjust slowmode based on message rate. Set per-channel from the dashboard.
User-supplied regex rules + caps/link/slur banlist categories. Each type is individually toggleable. Off by default because it needs your rules — add them via /automod add or the dashboard.
Daily birthday announcements + optional role on the day.
Create button-based giveaways. Bot auto-picks winners when the timer runs out. Staff can reroll or end early. Active + past giveaways listed on the dashboard.
A trap channel that auto-bans anyone who posts in it. Catches spam bots and malicious accounts that blast every channel. Pick an existing channel or create a 'do-not-type' channel, set who's exempt, and enable it.
Connect MARVIN to other services (game leaderboards, weather, your own website's API, etc.) so other features can pull in live data. Welcome messages, tickets, and custom commands can all use these connections to show real-time information.
Tracks which invite each new member came through. Lets staff see who's actively recruiting + supports invite-reward systems. /invites for personal stats, /invites leaderboard for top inviters.
Members earn XP for chatting and being in voice channels, leveling up over time. You can give out roles automatically at certain levels (Level 10 → Active Member, etc). /rank shows a member's progress; /leaderboard shows the top XP earners. Pick a dedicated channel for level-up announcements so they don't spam your main chat.
Checks every new member as they join and acts on the obvious warning signs of bot accounts: brand-new accounts (days old), accounts with DMs locked off, default avatars, etc. You pick what counts as suspicious and what to do — log, quarantine, kick, or ban. Pairs well with the Anti-Raid feature for full raid coverage.
Scans images for adult content, gore, hate symbols, self-harm imagery, and more. Each category has its own on/off, sensitivity slider, and action (delete, warn, ban). All scanning happens on your own machine — pictures never leave your server.
/poll create <question> · 2–10 options · single or multi-choice voting via buttons · timed auto-close with results embed · /poll close to end early · /poll list active in this server.
Button-panel role pickers. Three modes: single (one role from a set), multi (any combination), binding (one-way). Manage panels from the dashboard or the /rrpanel slash group.
Locked voice channels that show live member counts. Discord rate-limits channel renames to 2 per 10 minutes per channel — the bot debounces and skips no-op updates. Pair with the public /status page for the operator-side view.
Share bans with other servers that also use MARVIN. Turn on "share my bans" so other servers can see them, and "check for shared bans" so MARVIN flags people who've been banned elsewhere when they join you. The default action is "flag for review" — your staff still decide whether to ban. No one else's decision gets enforced automatically.
⭐ react above threshold reposts a message to a designated starboard channel.
Members run /suggest to post ideas to a dedicated channel. Each suggestion gets 👍/👎 vote buttons + a status tag that staff can update via /suggest-approve, /suggest-deny, etc.
Join-to-create voice channels. Configure a trigger channel; anyone who joins spawns their own owned channel. Empties get auto-cleaned. Owners use /voice rename|lock|limit|kick.
Two ways for members to talk to your staff privately: an in-server ticket panel (click a button → MARVIN makes a private channel just for you and the staff team) and modmail (a member DMs MARVIN → staff get a hidden conversation channel they can reply from). Categories like "Report" or "Support" each have their own staff team. Closing a ticket saves a clean transcript.
Quietly keep an eye on specific members. Add someone with /watch, and MARVIN mirrors their messages and join/leave/role changes to a private staff channel. They don't know they're being watched. Useful for borderline members on a final warning.
Send configurable welcome + leave messages in-channel and/or DM. Pick text or embed per direction; both support variable substitution: {user.mention}, {user.name}, {user.avatar}, {user.created}, {guild.name}, {member_count}, {join_date}, {time_in_server}, {roles}, {inviter}.