Built for Discord communities

Make your mark.

A better way to run your Discord server.

Moderation, threat protection, tickets, community tools, activity tracking and custom bots. One platform, configured from a dashboard instead of a list of commands nobody remembers.

Graffiti in numbers

7 Servers
4 Custom bots
953,814 Links flagged
4 Threats blocked
2,620 Messages tracked
723 Voice hours

One server's bot, grown up.

Graffiti started as a small bot for a single Discord server. The features arrived one at a time, because that server needed them — a way to stop scam links, then a ticket system, then somewhere to put the messages everyone kept screenshotting.

It grew into a platform. The same modules now run for any server that wants them, sharing one dashboard, one set of settings, and one place to see what happened and why. Nothing is bundled: every module has its own switch, and a server that only wants tickets only gets tickets.

It is still an independent project, still built by the people who use it, and still shipping.

Read the docs

Features

Four jobs, one bot.

Every module below is a switch on the dashboard. Turn on what your server needs and leave the rest alone.

Protection

  • Image protection Perceptual hashing catches a known scam image even after it has been recompressed or cropped.
  • Link protection Six independent filters: phishing, malware, IP loggers, gambling, NSFW and scams.
  • Cross-channel spam The same message pasted across many channels is fingerprinted, removed and punished.

Moderation

  • Ban, kick, timeout, warn Plus unban and untimeout, all running through one shared punishment engine.
  • Moderation logging Every action lands in your log channel with the reason, the moderator and whether the DM arrived.
  • Audit log mirroring Bans handled by hand in Discord's own UI are logged and notified the same way.
  • Member lookup One command for warnings, activity, account age and join-risk flags.

Community

  • Tickets Button panels, per-type staff roles, private channels and saved transcripts.
  • Auto-roles One role or several, assigned on join in a single API call.
  • Join-to-Create voice Temporary rooms with a control panel: rename, limit, lock, hide, claim, allow and block.
  • Welcome messages and DMs Two independent greetings, plain or embedded, with a preview command.

Engagement

  • Activity tracking Messages and voice time per member, with channels you can exclude.
  • Leaderboard A public web page per server, linked straight from Discord.
  • Hall of Fame Star a message and it gets posted, kept in sync, and ranked.
  • Counting A counting channel that remembers your server's record.

Protection

It catches the raid before anyone reports it.

Three detectors run on every message, independently of each other, and each one has its own punishment ladder — delete only, warn, timeout, kick or ban.

How protection works

  1. Known scam links

    Eleven public threat-intelligence feeds are pulled every day into one database of flagged links, split across six categories you enable separately. A whitelist means a domain you trust never gets added.

  2. Known scam images

    Images are matched by perceptual hash rather than by file, so a re-uploaded, resized or recompressed copy still matches. You set the confidence threshold, and you can opt into a shared global database.

  3. Copy-paste raids

    The same content posted across more channels than your threshold allows, inside your time window, is treated as one event: every copy is removed and the account is dealt with once.

Modular

Use what your community needs.

Nothing is a bundle. Every module is a switch, so two servers running Graffiti can look nothing alike.

A support server

Tickets, and nothing else.

TicketsOn
ProtectionOff
Moderation logOff
ActivityOff

A public community

Locked down, heavily moderated.

TicketsOff
ProtectionOn
Moderation logOn
ActivityOff

A friend group

Voice rooms and bragging rights.

TicketsOff
ProtectionOff
Moderation logOff
ActivityOn

Dashboard

Settings belong in a browser.

Sign in with Discord, pick a server you administrate, and every module Graffiti has loaded is there as a labelled control. Channels, roles and categories come from your actual server, so there is no ID to copy.

Changes save straight to the bot. There is no restart and no sync command.

Dashboard guide

Custom bots

Run it under your own name.

Create a Discord application, hand Graffiti the token, and it runs a full instance for you — your name, your avatar, your presence. Members see your bot, not ours.

Every feature on this page works the same way inside it, and it is configured from the same dashboard.

Your token Encrypted before it is stored, and never shown again.
Your presence Set the status type and text; change it whenever you like.
Your controls Start, restart and read the last lines of its log from the dashboard.
One bot per server Your bot serves the servers you install it on. Everywhere else stays with the main Graffiti bot, so nothing double-fires.

Custom bots are a paid feature. Free accounts get the shared Graffiti bot, which has the same modules.

Still being built.

New modules land regularly, and they show up on your dashboard on their own — the settings schema is read from the code at boot, so there is nothing to migrate and nothing to re-invite.

If something is missing or behaving oddly, the support server is where it gets fixed. It is a small project and the feedback loop is short.

Ready to make your mark?

Add Graffiti to your server and turn on the parts you need.