Verification

Gate access behind a verification step.

Configure Verification in the dashboard

Overview#

Verification holds new members behind one button. They press Verify, Iris issues them a private one-time link, and the verified role is granted the moment they pass. Everything else in the server stays closed until then.

The web step is what makes it more than a button press. While a member is on the verification page Iris records a browser fingerprint alongside their address and a cookie, then matches it against everyone who verified before. A returning ban evader is flagged as an alt rather than quietly let back in. A fingerprint on its own never triggers a flag, since two people on the same phone model and OS version look alike; it has to line up with the address or the cookie.

The same step checks the address itself. Block VPNs and Proxies refuses anyone verifying from a VPN, proxy or hosting exit, since hiding behind one is the usual way an alt gets past fingerprint matching in the first place.

Every pass, failure and detection is written to the log channel, and the recent ones are listed under Detections and Statistics on the dashboard.

Setup#

  1. Lock the server down first: deny View Channels to @everyone everywhere except the verification channel.
  2. Create the role members get on passing, and drag Iris above it in Server Settings > Roles.
  3. Open the dashboard, go to Community > Verification, and turn the module on.
  4. Set Verification Channel, Verified Role and Log Channel.
  5. Style the panel under Embed Appearance, then save.
  6. Press Deploy to post the panel in the channel.

Settings#

SettingTypeDefaultWhat it does
Enable VerificationToggleOffThe master switch for the gate.
Verification ChannelChannelNoneWhere the panel is deployed, and the one channel unverified members should see.
Verified RoleRoleNoneGranted the moment a member passes.
Log ChannelChannelNoneWhere passes, failures and alt detections are recorded.
Verification ModeChoicePanel / commandPanel and /verify, an automatic DM on join, or disabled to skip the web checks entirely.
Detection ScopeChoiceLocalMatch alts within this server only, or across every server Iris protects.
Unverified RoleRoleNoneGiven on join and removed on passing, for servers that gate with a role instead of channel overrides.
Staff RolesRoleNoneWho may act on a detection from the log message. Pick as many roles as you need.
Detection Ping RolesRoleNonePinged when an alt or a VPN is blocked. Pick as many roles as you need, or leave empty for a silent log.
Link Timeout (minutes)Number30How long an issued verification link stays valid.
Minimum Account Age (days)Number0Accounts younger than this cannot verify. 0 allows any age.
Kick on TimeoutToggleOffRemove members who never finish before the link expires.
Block Alt AccountsToggleOnTurn off to allow alt accounts. The alt match is skipped entirely, so a member sharing a network or browser with another account verifies normally and nothing is logged or banned. VPN blocking, minimum account age and the rest of the flow keep working.
Always Allow Old AccountsToggleOnPass accounts older than the age below even when the alt check matches them.
Allowed Account Age (days)Number90Age that counts as old enough to skip the match. Only used when the toggle above is on.
Block VPNs and ProxiesToggleOnRefuse verification from a VPN, proxy or hosting address and log the attempt. The member keeps their unverified role and is told to turn the VPN off and try again.
Auto-Ban Detected AltsToggleOffBan on a match instead of only logging it.
Log Successful VerificationsToggleOnLog passes as well as problems. Turn off to keep the log to exceptions.
Notify When DMs ClosedToggleOnTell the member in the channel when their link could not be delivered by DM.
Embed TitleTextNonePanel heading. Empty by default.
Embed DescriptionTextClick the green button below to verifyPanel body. Say what happens after they press it.
Embed ColorColour#00ff00Panel accent bar.
Footer TextTextNoneSmall line under the panel.
Thumbnail URLTextNoneSmall image in the top right of the panel.
Image URLTextNoneLarge image below the panel text.
Button TextTextVerifyThe label on the button.

Commands#

CommandWhat it doesRequires
/verifyGet your personal verification link.Anyone
/manverify <member>Verify a member by hand, skipping the web step.Manage Server
/force <member>Send a member a fresh verification link by DM.Manage Server
.verification helpThe prefix fallback for the gate and its role.Manage Server

Permissions#

PermissionWhy Iris needs it
Manage RolesGrants the verified role and removes the unverified one.
View ChannelsSees the verification and log channels.
Send MessagesDeploys the panel and writes the log.
Embed LinksThe panel is an embed.
Kick MembersOnly for Kick on Timeout.
Ban MembersOnly for Auto-Ban Detected Alts.

What it looks like#

I
Iris APP Today at 8:53 PM
Verification

Click the green button below to verify

I
Iris APP Today at 8:53 PM

@Senior Staff

⚠️ Alt-account intrusion attempt blocked: @newaccount (1503204734297968722) - Main account: @banneduser (819240318725128193)

I
Iris APP Today at 8:53 PM

@Senior Staff

⚠️ VPN intrusion attempt blocked: @newaccount (1503204734297968722)

The deployed panel, then an alt detection and a VPN block in the log channel.

Tips and gotchas#

Members say they never got the link.

Their DMs are closed. Leave Notify When DMs Closed on so they are told in the channel, and point them at /verify, which replies privately.

The panel disappeared.

Press Deploy again. It posts a fresh panel, and the old message can be deleted.

VPN blocking is on, but people on a VPN still get through.

The check needs an IP intelligence key. Iris uses proxycheck.io, and until PROXYCHECK_API_KEY is set on the host the check does nothing at all, so nobody is blocked by a lookup that could not run. If you are self-hosting, add the key and restart. Note also that the address has to be trustworthy in the first place: behind a reverse proxy without TRUST_PROXY=1, every visitor looks like the proxy and the check is skipped.

A real member says they cannot verify.

Ask whether they have a VPN running, since plenty of people leave one on permanently. They can turn it off and press the link again, or you can let them through with /manverify <member>.

Should the scope be local or global?

Local for a normal server. Global only if you run several servers that share a ban problem, since it matches against every server Iris protects.

Can I verify someone myself?

Yes. /manverify <member> grants the role directly and records who did it.