Skip to content

Verification

Forces new members to complete a challenge before gaining full server access. The single biggest filter against drive-by bot raids.

Modes

ModeFrictionWhat the user does
ButtonLowOne click on a button in the verify channel.
CaptchaHighSolve a generated captcha image.
ReactionLowReact with a specified emoji to the verify message.
DM codeMediumReceive a code via DM, type it back.

Higher-friction modes catch more bots but also turn away more legitimate users. Pick based on your threat profile.

Settings

SettingWhat it does
EnabledMaster switch.
ModeOne of the above.
Verified roleGranted on successful verification. This is the role that gates access to the rest of your channels.
Unverified roleOptional. Granted on join so you can use Discord channel permissions to hide channels from unverified members.
ChannelWhere the verify panel is deployed.
Expire (minutes)A pending challenge expires after N minutes. Default 30.
Max attemptsFailed attempts before the user is locked out. Default 3.
Kick on failKick the user instead of locking them out.
MessageThe text in the verify embed.
TitleEmbed title.
ColourHex string (e.g. #50E0C0).
FooterOptional small text.
Thumbnailnone / guild_icon / custom_url.
Button labelOverride the default per-mode label.
Button styleprimary / secondary / success / danger.

Setup

  1. Create the Verified role in Discord. Give it access to channels you want post-verification.
  2. (Optional) Create an Unverified role for explicit pre-verification channel gating.
  3. On the dashboard, set the mode + channel + roles.
  4. Click Deploy to post the verify panel.
  5. Test by joining the server with an alt account.

Pre-verification channel layout

The recommended layout:

  • #welcome (default channel for everyone) — has the verify panel and rules.
  • All other channels — visible only to Verified.

This way, an unverified user (including a bot) sees only #welcome and the verify button. No spam target.

Tips

  • Button mode is the right default. Bots have been beating captchas for years; the real value of verification is forcing a click — a vast amount of raid software doesn't click anything.
  • Captcha mode is right for high-profile servers willing to accept the friction.
  • kick_on_fail = true is the cleanest UX — failed attempts get kicked; legitimate users re-invite and try again.
  • expire_minutes = 30 is generous. Tighten to 5-10 minutes on high-security servers.

Multi-bot scenario

If you have multiple verification systems running (Phantom + another bot), the two will conflict. Pick one. Phantom's logs include the configured mode + the actual challenge each user attempted, so you can audit if it's working.

Cross-Server Sync

Verification is NOT yet syncable across networks (channel/role bindings are intricate and the sync would silently break if subscribers' role IDs differed). On the roadmap.

Permissions

  • security.view — see the page + verification log
  • security.edit — tunables, deploy panel

Behaviour

  • Each unverified member has a pending verification attempt until they pass, fail, or it expires.
  • Failed attempts feed into Anti-Raid signals — repeated failure looks like a raid.
  • Pass → user is granted the Verified role (and stripped of the Unverified role if set).
  • Anti-Raid — pair with action = challenge to route raids through verification
  • Firewall — pre-verification filtering (age, avatar, bot account, etc.)
  • Quarantine — for cases where verification fails repeatedly

Phantom is a product of Hydra Labs. The bot is run as a managed service; you do not need to host it yourself.