fix: Emoji domains cause issues
All checks were successful
Build Docker / Build Image (push) Successful in 39s

This commit is contained in:
2025-10-09 17:07:22 +11:00
parent 226210ee0c
commit eaa9ebdc54
2 changed files with 45 additions and 9 deletions

View File

@@ -6,6 +6,7 @@ import dns.message
import discord
import json
import requests
import re
load_dotenv()
@@ -77,14 +78,37 @@ async def handle_role(member: discord.Member, shouldHaveRole: bool):
async def check_member(member: discord.Member) -> bool:
if member.display_name[-1] != "/":
print("No trailing /",member.display_name,flush=True)
await handle_role(member, False)
return False
if check_name(member.id, member.display_name[0:-1]):
domain = member.display_name[0:-1]
name_idna = domain.strip().rstrip("/").encode("idna")
name_ascii = name_idna.decode("ascii")
parts = name_ascii.split(".")
for part in parts:
if not re.match(r'[A-Za-z0-9-_]+$', part):
try:
print("Name not verified, removing /",member.display_name,flush=True)
await member.edit(nick=member.display_name[0:-1])
except Exception as e:
print(e)
await handle_role(member, False)
return False
try:
name_rendered = name_idna.decode("idna")
except UnicodeError: # don't render invalid punycode
name_rendered = name_ascii
if check_name(member.id, name_ascii):
print("Name verified",member.display_name,flush=True)
await handle_role(member, True)
return True
try:
print("Name not verified, removing /",member.display_name,flush=True)
await member.edit(nick=member.display_name[0:-1])
except Exception as e:
print(e)