---
title: "How to make a verification system in Discord"
description: "Discord checks accounts with Verification Level and Rules Screening. Bond adds a Verify button that gives new members a role and opens the server."
canonical_url: "https://www.bondbot.gg/use-cases/verification-system"
last_updated: "2026-10-05"
---

# How to make a verification system in Discord

Discord's own tools are the server's Verification Level and Rules Screening, which check the account and make new members accept your rules before they can talk. Keeping new members out of every channel until they press Verify takes a Verified role and channel permissions, and Bond sets up the button, the role and the channel permissions in one message, and asks before it changes who can see what.

Verified 2026-09-28 on a test server, build b52c075.

## In Discord, without a bot

Start with what Discord checks for you, then build the gate with a role and permissions.

1. Open **Server Settings**, **Safety Setup**, **DM and Spam Protection**, and raise the **Verification Level**. Low needs a verified email, Medium an account older than five minutes, High ten minutes in the server, and Highest a verified phone number.
2. On a Community server, switch on **Members must accept rules before they can talk or DM** in the same place, and write your rules. This is Rules Screening.
3. Create a Verified role in **Server Settings**, **Roles**. It needs no permissions of its own.
4. On every category except the one holding #verify and #rules, open **Edit Category**, **Permissions**: deny @everyone **View Channel** and allow Verified **View Channel**. Sync the channels inside to the category.
5. Leave #verify and #rules visible to @everyone, and deny @everyone **Send Messages** in #verify.
6. Give the Verified role to everyone already in the server before step 4, or they lose the server too.

Discord has no button that hands out the Verified role. Without a bot, someone with **Manage Roles** gives it to each new member by hand. [Bond, an AI Discord bot that runs your server](https://www.bondbot.gg/), adds a Verify button that hands the role out for you.

## With Bond, in two messages

A real run, recorded on a test server: what was asked, what Bond asked back, what it did, and what members saw afterwards.

In #admin-chat:

> **You:** @Bond Add a verification gate: new members only see #verify and #rules until they press Verify, then they get the Verified role and the rest of the server.

> **Question**
> for @You
> **Verification gate**
> Create the Verify flow and access gate; keep #rules and all existing channels, and create #verify. Current-member handling is pending your choice.
> **No category** · 🔒 Everyone sees #verify and #rules; verified members see the other channels.
> verify (Verify button)
> **Text Channels** · 🔒 Verified members only · unchanged
> general (Existing general chat)
> **Voice Channels** · 🔒 Verified members only · unchanged
> 🔊 General (Existing voice channel)
> **No category** · 🔒 Everyone sees #rules; verified members also see #admin-chat.
> admin-chat (Existing admin channel), rules (Rules; visible before verification)
> **Roles:** Verified
> **Access:** @everyone: retain visibility to #verify and #rules only; hide all other current channels.
> **Access:** Verified: grant visibility to the rest of the server.
> **Note:** This server has no existing flows or verification plugin installed.
> **Keeps:** Existing channels and categories; no existing content deleted or renamed.
> The gate's @everyone lockdown applies to existing members too unless they already have the Verified role. I found no Verified role, so this choice determines whether I assign it to current human members before locking down the server.
> **Should current human members also receive Verified so they keep access, or should everyone need to press Verify?**
> Expires in 10 minutes
>
> Buttons: Keep current members verified, Require everyone to verify, Other. Pressed: Require everyone to verify.

> **Verification gate**
> plan for @You
> Create one #verify channel and one Verified role; lock all other existing channels to verified members. Everyone currently in the server must verify too.
> No category · Everyone may see the verification entry point. (default)
>     verify *Verify button*
> ▼ TEXT CHANNELS · 🔒 Verified members only. · unchanged
>     #general *Existing chat*
> ▼ VOICE CHANNELS · 🔒 Verified members only. · unchanged
>     #General *Existing voice channel*
> No category · 🔒 #rules remains public; #admin-chat is Verified-only.
>     #admin-chat *Existing admin channel*
>     #rules *Public rules*
> **Roles** · Verified
> @everyone can see #verify and #rules only.
> Verified members can see all existing channels.
> Members receive Verified by pressing the Verify button in #verify.
> Keeps All current channel names and content; no current members get Verified automatically.
> `#` blue exists · `#` grey planned · Expires in 10 minutes
>
> Buttons: Build it, Change something, Cancel. Pressed: Build it.

> **Install a plugin**
> for @You
> Part of the plan you approved · Always allow stops asking about installing plugins · Expires in 10 minutes
>
> Buttons: Allow, Always allow, Deny. Pressed: Allow.

> **Apply an access policy for @Verified**
> for @You
> Allows **View Channel** for @Verified on every channel you can see.
> Part of the plan you approved · Always allow stops asking about channel access changes · Expires in 20 minutes
>
> Buttons: Allow, Always allow, Deny. Pressed: Allow.

> **Apply an access policy for @everyone**
> for @You
> Denies **View Channel** and **Read Message History** for @everyone on **Text Channels** (category), **Voice Channels** (category) and #admin-chat. Allows them on every other channel you can see.
> > ⚠️ This change would take away Bond's own access to 5 channels: **Text Channels** (category), **Voice Channels** (category), **#admin-chat**, **#general**, **General** (voice).
> > Bond's role **@Bond** keeps **View Channel, Read Message History** in each of them, so Bond can still see and manage all 5. No other role or member gains anything from this.
> Part of the plan you approved · Keeping Bond's own access always asks · Expires in 20 minutes
>
> Buttons: Confirm, Cancel. Pressed: Confirm.

> **You:** @Bond Check it: someone without the Verified role should see only #verify and #rules, and someone with it should see the rest of the server.

What Bond did:

- List plugins
- List flows
- List channels
- List roles
- Ask questions
- Install plugin
- Apply channel access policy
- Check channel access

> **Bond:** Verification gate is installed and access-checked. Unverified members can see **#verify** and **#rules**; they cannot see **#general**, the **General** voice channel, **#admin-chat**, or the two categories. Verified members can see all seven existing and new channels.
>
> Members press **Verify** in **#verify** to receive the **Verified** role. Existing members will need to verify too; no one was automatically given the role. The access check passed with no violations or unchecked channels.

> **Bond:** **Verified:** the check covered all 7 channels and passed with no violations or unchecked channels.
>
> - **Without Verified (@everyone):** can see only **#verify** and **#rules**. The **General** voice channel is also hidden; the other hidden areas are **#general**, **#admin-chat**, and the **Text Channels** and **Voice Channels** categories.
> - **With Verified:** can see all 7 channels, including **#general**, **#admin-chat**, **#verify**, **#rules**, and the General voice channel.

In #verify, afterwards:

> Press Verify to get access to the rest of the server.
>
> Buttons: Verify.

Bond's reply to pressing Verify, which only the member sees:

> You are verified. Welcome in!

What Verify gives, and who sees what:

- Pressing Verify: Gives the Verified role
- New member: Sees only #rules and #verify
- With the Verified role: Sees everything members saw before the gate
- New channel: #verify

Light tier · 2 messages · 73 seconds · 148K tokens

Recorded on a Bond test server on the Light tier, the tier every free plan runs on. Server, channel and member IDs are placeholders, the test bot is shown as Bond, and the steps where Bond loads its own tools or pages through a long result are left out. The test server has no plan limits, so the plan limits a step reports are left out. The Always allow line on each approval card is reworded in plain words.

The test server already had #rules, and Bond made #verify and the Verified role. Bond first asked one question: keep the members already in the server verified, or make everyone verify. The recording chose to make everyone verify. Bond then showed its plan and three approval cards. The recording pressed Build it, Allow to install the plugin, Allow on the change that let Verified see the server and Confirm on the one that hid it from @everyone. It never pressed Always allow. Hiding the server from @everyone would have hidden it from Bond too, so the @everyone card also named the five places where Bond would lose access (both categories, #admin-chat, #general and the General voice channel) and let Bond's own role keep View Channel and Read Message History there. Bond checked the result with its access tool before it replied. The second message only asked it to check again, and Bond changed nothing. After the run the test account pressed Verify and got the Verified role, with a reply only it could see: You are verified. Welcome in! The recording talked to Bond in #admin-chat, which every member could see before, so verified members can see it now too. On your server, name any staff channel that verified members should not see.

## The permissions it takes

Bond checks every step against your own Discord permissions and role position before it acts, and what it reads back is only what you can already see.

### What you need

- List plugins: Nothing extra
- List flows: Manage Server
- List channels: Nothing extra
- List roles: Nothing extra
- Ask questions: Nothing extra
- Install plugin: Administrator
- Apply channel access policy: Manage Roles
- Check channel access: Manage Roles

Installing takes Administrator, the same bar as any automation, because an automation goes on acting as Bond long after you asked for it. Bond itself never needs Administrator.

### What Bond needs

- **Manage Roles**, with Bond's highest role above Verified, to give the role.
- **View Channel** and **Send Messages** in #verify for the Verify panel.
- To hide the rest of the server, Bond changes channel permissions, which needs **Manage Roles** in each channel and a channel Bond can see. Bond cannot change a private channel that already hides it, such as a staff area; allow its role there first.
- Bond usually sees a channel through @everyone, so hiding a channel from @everyone hides it from Bond too. Before it makes that change, Bond asks you once. The card names every channel where Bond would lose access, and there Bond's own role keeps exactly the access it had and nothing more. Nobody else gains anything. Cancel changes nothing, and Always allow never answers this question for you. To confirm, you need **Manage Roles** and each permission Bond keeps, in that channel, as you would to give them by hand.

## What to watch for

- The Verification plugin never changes permissions itself. Hiding the rest of the server is a separate step, and Bond asks you to confirm it first.
- Bond refuses a gate channel that @everyone cannot see, since new members could never reach the button.
- Bond never opens a channel to @everyone or any other role to make its own setup work. The only access it keeps is its own role's, and only after you confirm it.
- The gate hides channels, but it does not stop unverified members from posting in #verify and #rules. In this run they still could. If you want both read-only, deny @everyone **Send Messages** there, or ask Bond to.
- In question mode the answer is compared without regard to capital letters or extra spaces, and three wrong answers make a member wait ten minutes.
- Another bot that gives roles on join can let members skip the gate, if one of those roles can see the rest of the server.
- Members who were already in the server need the Verified role too.

## Questions people ask

### Should members press a button or answer a question?

A button is one click. Question mode asks something, such as typing I agree, and compares the answer without regard to capital letters or extra spaces. Three wrong answers make the member wait ten minutes.

### Does a verification gate stop raids?

It slows down accounts that join in bulk, but a button can be pressed by an automated account. Pair it with a higher Verification Level in Server Settings, Safety Setup.

### What happens to members who were already here?

They need the Verified role too, or the gate hides the server from them. Ask Bond to give the role to everyone already in the server before the channels are locked.

### Can it log who verified?

Yes. Pick a log channel and Bond posts a line there for each member who verifies.

### How do I undo it?

Uninstalling the plugin removes the button and its automation, after Bond shows you what it removes. The verify channel and the Verified role stay until you ask Bond to delete them. Bond also keeps a record of the channel permissions it changed, including the access it kept for its own role, and can put them back exactly as they were.

## Read next

- [Post server rules and gate access behind them](https://www.bondbot.gg/use-cases/server-rules): Rules posted and pinned in their own channel, with the rest of the server unlocked only once someone agrees to them.
- [How to make a welcome message in Discord](https://www.bondbot.gg/use-cases/welcome-messages): Greet new members by name in the channel you choose, with a welcome card and the wording you want. You describe it once, in plain English.
- [How to make a private channel in Discord](https://www.bondbot.gg/use-cases/private-channels): Create a channel only certain roles can see, without opening the permissions tab and toggling twenty overwrites by hand.
- [Discord permissions: role hierarchy and overwrites](https://www.bondbot.gg/blog/discord-permissions-explained-role-hierarchy-and-overwrites): Why your bot can't assign that role, how channel overwrites beat server permissions, and how to debug it in five minutes.
