You want to restrict a Discord channel so only users from a specific country can see or type in it. Discord does not have a built-in geolocation filter for channels. The solution is to combine a self-assignable role with a bot that checks a user’s IP address. This article explains how to set up a role-based permission system that limits channel access by country using the MEE6 bot for role assignment and a simple verification step.
Key Takeaways: Country-Restricted Channel Setup
- MEE6 bot > Dashboard > Autorole > Country Role: Automatically assigns a role when a user joins the server based on a custom command.
- Server Settings > Roles > Permissions: Disable View Channel and Read Message History for @everyone to hide the channel from all users.
- Third-party IP geolocation service (ipinfo.io): A free API endpoint that returns the user’s country code when a verification link is clicked.
How Country-Restricted Channels Work in Discord
Discord permissions are role-based, not location-based. To restrict a channel to users from one country, you must create a dedicated role and assign it only to users who prove they are in that country. The most reliable method uses a bot like MEE6 to issue a role after a user completes a country verification step. The verification step involves the user clicking a link that sends their IP address to a geolocation service. If the country matches, the bot assigns the role. The bot then adds that role to the user, and the channel permissions are set to allow only that role to view the channel.
Prerequisites
Before starting, you need a Discord server with Manage Server permissions. You must also have the MEE6 bot installed on your server. If MEE6 is not present, invite it from the MEE6 website. You will also need a free API token from ipinfo.io to perform the country lookup. Create an account at ipinfo.io and copy your token from the dashboard. No coding experience is required — all steps use the MEE6 dashboard and a simple URL.
Steps to Create a Country-Restricted Channel
Step 1: Create the Country Role
- Open Server Settings
In your Discord server, click the server name at the top left. Select Server Settings from the dropdown menu. - Go to Roles
In the left sidebar, click Roles. Click the Create Role button. - Name the Role
Enter a name like “United States” or “Germany”. Set the role color if desired. Do not assign any permissions yet. Click Save Changes.
Step 2: Create the Restricted Channel
- Create a New Channel
Right-click the Text Channels category and select Create Channel. Choose Text Channel and name it something like “us-only-chat”. - Open Channel Permissions
Click the gear icon next to the channel name. Go to the Permissions tab. - Disable @everyone Access
Under the @everyone role, set View Channel to the red X and Read Message History to the red X. This hides the channel from all users by default. - Add the Country Role
Click the + button next to Roles/Members. Select the country role you created. Set View Channel to the green checkmark and Read Message History to the green checkmark. Optionally, enable Send Messages if you want users to talk in the channel. Click Save Changes.
Step 3: Set Up Country Verification with MEE6
- Open MEE6 Dashboard
Go to the MEE6 website and log in with your Discord account. Select your server from the dashboard. - Enable Custom Commands
In the left menu, click Custom Commands. Toggle the Enable Custom Commands switch to ON. - Create a Verification Command
Click Create a Custom Command. Set the command name to verify. In the Response field, paste this message (replace TOKEN with your ipinfo.io token and ROLE_ID with the exact ID of the country role):“Click this link to verify your country: https://ipinfo.io/json?token=TOKEN”
Note: This link shows the user their own IP information. It does not automatically assign a role. You will need a separate bot or a manual process to complete the role assignment. For a fully automated setup, use a bot like Dyno or Carl-bot that supports role assignment via webhooks. See the next step for the manual method.
- Save the Command
Click Save. Users can now type !verify in any channel to receive the link.
Step 4: Manually Assign the Role After Verification
- User Clicks the Link
When a user runs !verify, they click the link. The page displays their IP address and country. The user sends a screenshot or types the country name in a public channel. - Server Admin Assigns the Role
Right-click the user’s name in the member list. Select Roles and check the country role. The user now has access to the restricted channel.
If the Channel Still Shows for Everyone
Channel Permissions Not Saved
After setting the @everyone permissions to red X, click Save Changes at the bottom of the permissions page. If you leave the page without saving, the permissions revert. Double-check that the country role has green checkmarks for View Channel and Read Message History.
Role Hierarchy Blocks Access
In Server Settings > Roles, make sure the country role is positioned above the @everyone role. Drag the country role higher in the list. If another role that the user has also has View Channel disabled, the most restrictive permission wins. Ensure no other role the user holds explicitly denies the channel.
Bot Not Responding to Command
If the MEE6 bot does not respond to !verify, check that the Custom Commands module is enabled. Also verify that the bot has permission to read messages and send messages in the channel where the command is typed. Go to Server Settings > Integrations > MEE6 and ensure the bot has the required permissions.
Manual vs Automated Verification: Key Differences
| Item | Manual Verification | Automated Verification |
|---|---|---|
| Setup complexity | Low — no extra bot needed | Medium — requires webhook or custom bot |
| Time per user | 30-60 seconds per user | Instant after link click |
| Error risk | Human error possible (wrong role assigned) | Low if API returns correct country |
| Tools required | MEE6 bot and ipinfo.io | Dyno or Carl-bot with webhook support |
You now have a Discord channel that only users from a specific country can access. Start by creating the country role and setting channel permissions to hide it from @everyone. Use the MEE6 !verify command to let users check their country. For large servers, consider automating role assignment with a bot that supports webhook-based role granting. This method keeps your server organized while respecting regional content restrictions.