Back to Blog

How to Set Up Verification on Discord With Carl-bot

PeakBot Team·How we write these·November 10, 2026·8 min read
By the PeakBot Team — powering 10000+ Discord communities
Key Takeaways
  • You need three things in place:
  • New members get the @everyone role and nothing else, so @everyone must not be able to see your normal channels.
  • Edit #verify > Permissions and set:
  • Log in at carl.gg, pick your server, and open the reaction roles section of the dashboard.
  • Discord only lets a bot manage roles that sit below its own highest role.
  • In Server Settings > Roles, open the menu next to a role and pick View Server As Role.

Carl-bot has no dedicated verification module. When people say "Carl-bot verification" they mean a build: you hide every channel from @everyone, leave one #verify channel visible, and Carl-bot hands out a Verified role when someone reacts to a message. It works, but it checks nothing. There is no captcha, no questions, and nothing kicks people who never verify.

Checked on each bot's own site or docs on 3 November 2026. We make PeakBot. Nobody paid to be in this post.

Below is the full build, the fix for "the role isn't being given", the weak points, the Discord settings that cover some of them, and a real verification panel as the alternative.

Before you start

You need three things in place:

  1. Carl-bot in your server with the Manage Roles permission. Invite it from carl.gg.
  2. A Verified role. Go to Server Settings > Roles > Create Role and name it "Verified". It doesn't need any special permissions.
  3. A #verify channel at the top of your channel list.

Step 1: Hide the server from @everyone

New members get the @everyone role and nothing else, so @everyone must not be able to see your normal channels. You have two ways to do this.

Server-wide (fastest): Server Settings > Roles > @everyone, then turn off View Channels. Open the Verified role and turn View Channels on. Now nobody sees anything unless a channel says otherwise or they hold Verified.

Per category or channel: on desktop, right-click the category or channel > Edit Channel > Permissions, then turn on Private Channel (or Private Category). This removes View Channel from @everyone. Then add the Verified role so it can see the channel. On mobile, press and hold the channel > Edit Channel > Channel Permissions and set the same overrides. Channel permissions override server permissions, so a stray "allow" on one channel will leak it. Check each one. Discord explains how overrides stack in its roles and permissions guide.

Step 2: Open the #verify channel

Edit #verify > Permissions and set:

  • @everyone: View Channel on, Read Message History on, Add Reactions on, Send Messages off.
  • Verified: View Channel off.

That last override makes #verify disappear once someone is verified, so your member list doesn't keep a dead channel open. Post your rules or a short explanation above where the reaction message will go.

Step 3: Create the reaction role in Carl-bot

Log in at carl.gg, pick your server, and open the reaction roles section of the dashboard. Create a new reaction role message, post it in #verify, and map one emoji (a checkmark is the usual choice) to the Verified role. Carl-bot's menus change from time to time, so if a button isn't where you expect it, our Carl-bot reaction roles guide walks through the dashboard and the command route step by step.

Pay attention to the mode Carl-bot offers for the message. What happens when someone removes their reaction depends on it, so check Carl-bot's docs and pick one that doesn't strip Verified when someone un-reacts by accident.

Step 4: Fix the role order (the usual "role not given" problem)

Discord only lets a bot manage roles that sit below its own highest role. If Verified is above Carl-bot's role, the reaction registers and nothing happens.

Go to Server Settings > Roles and drag Carl-bot's role above Verified. Also confirm Carl-bot's role has Manage Roles. This fixes most "Carl-bot isn't giving the role" reports.

Step 5: Test it

In Server Settings > Roles, open the menu next to a role and pick View Server As Role. Check @everyone first: you should see only #verify. Then check Verified: you should see the server and not #verify. Finally, join with a second account and click the reaction for real.

Skip the "Unverified" role if you can

Some guides give everyone an Unverified role on join and remove it on verify. That needs an auto role on join plus a second action to take it away, which is more to break. The @everyone setup above does the same job with one role. If you do need an Unverified role, see how to set up auto roles in Carl-bot.

There's one more catch with join roles. If you use Discord's Rules Screening, members who haven't accepted the rules show as "pending", and Discord's developer docs say bots should wait until pending is false before giving roles. A role handed out the instant someone joins can let them skip that step.

The weak points of the Carl-bot build

Be clear about what this setup does and doesn't do:

  • A reaction proves nothing. It isn't a human check. Self-bots and scripted accounts can react as easily as people.
  • No questions. You can't ask why someone joined or have them confirm they read the rules beyond clicking.
  • Nobody gets removed. People who join and never react sit in your member list forever. Nothing kicks them.
  • If Carl-bot is offline, nobody gets in. The reaction lands, the role never arrives, and new members think your server is broken.
  • Permission leaks are silent. One channel with an "allow" override for @everyone and new members see it before verifying.

For a small, low-risk server, that may be fine. If you're dealing with raids or spam accounts, add Discord's own settings, a real verification bot, or both.

Add Discord's built-in layers (free, work with any bot)

These run before any bot gets involved. Menu names below are current as far as we can tell, but check them in your own app.

Verification Level. Server Settings > Safety Setup > DM and Spam Protection, then Edit in the Verification Level box, then Save. The five levels are:

LevelRequirement
NoneNothing
LowVerified email
MediumAccount registered more than 5 minutes ago
HighMember of the server for more than 10 minutes
HighestVerified phone number

A verified phone satisfies all the other levels. Discord suggests raising it to High or Highest during a raid and setting it back afterwards. See Discord's Verification Levels page.

Rules Screening (formerly Membership Screening). Also under DM and Spam Protection. You can list up to 16 rules. Until a member accepts, they can't talk, DM server members or react, so your Carl-bot reaction only works after they accept. If Onboarding is also on, members finish Onboarding first, then Rules Screening. Manually verifying someone in Server Settings > Members skips it. Details are in the Rules Screening FAQ.

Apply to Join. Desktop only, set in your server's Access settings (Invite Only, Apply to Join, Discoverable). You review applications on the Members page. Discord has been rolling it out gradually, so you may or may not have it. Note that anyone with Kick Members can create invite links that skip applications. See Server Member Applications.

The alternative: a real verification panel in PeakBot

If you want a button instead of a reaction, questions, and automatic cleanup, a dedicated verification feature does it in one place. PeakBot's Verification page has a panel with a button, optional questions, an unverified role and a verified role, and an auto-kick for anyone who never verifies. It isn't marked as a paid feature, so it's on the Free plan.

How to set it up:

  1. Go to peakbot.pro, log in with Discord and add PeakBot to your server.
  2. Pick your server and open Verification in the dashboard sidebar.
  3. Choose the channel for the panel, set the unverified and verified roles, and add questions if you want them.
  4. Turn on the auto-kick for members who never verify.
  5. Post the panel. There's no setup command: verification is configured on the dashboard, and it shows you the result before you post.

You still need Step 1's permissions so unverified members can't see your channels, and the same role order rule applies: PeakBot's role must sit above the roles it gives. The welcome, roles and verification wiki page covers each setting.

For raids, PeakBot's Security page adds join-rate and account-age limits, a quarantine role, auto-unlock, a whitelist and a threat log.

Where Carl-bot is the better fit: if you already run Carl-bot for reaction roles and other things, and you only want a one-click gate on a quiet server, the build above means one less bot to manage. PeakBot doesn't advertise a captcha. If a captcha is what you need, read our captcha verification guide.

Frequently Asked Questions

Why isn't Carl-bot giving the verified role?

Almost always role order. Carl-bot's role must be above Verified in Server Settings > Roles, and it needs Manage Roles. If that's correct, check that the reaction role message is still linked to the right role, that Carl-bot is online, and that the member has accepted Rules Screening (pending members can't react).

Does Carl-bot have captcha verification?

Carl-bot has no dedicated verification module, so there's no built-in captcha or quiz step. The standard Carl-bot method is a reaction role. Some guides online claim otherwise. Check carl.gg for anything new.

How do I kick people who never verify with Carl-bot?

The reaction role build has nothing that removes people who never react. You'd prune them by hand or use a verification bot with an auto-kick, like the PeakBot Verification panel described above.

What happens if someone removes their reaction?

It depends on the reaction role mode you chose in Carl-bot. In some setups, removing the reaction removes the Verified role and the member loses access. Test it with a second account before you go live.

Can new members still see all my channels?

Only if a permission is leaking. Use View Server As Role on @everyone. Any channel visible besides #verify has an override allowing @everyone, or sits in a category that does. Turn on Private Channel for it, or remove the allow.

Do I need an Unverified role?

Not with Carl-bot. Locking @everyone out and letting Verified in does the same job with one role. An Unverified role is useful when a bot manages both roles for you, as PeakBot's panel does.

Try PeakBot free on your server

Setup takes 30 seconds.

Free forever · Setup in 30 seconds

Ready to level up your server?

30+ features included free. Moderation, welcome messages, XP & leveling, tickets, reaction roles, and more.

See All Features