如何让Discord机器人删除外部邀请链接但保留自有服务器链接?
解决Discord机器人白名单邀请链接问题
方案1:简单匹配(含白名单链接则保留)
先定义白名单集合,修改消息判断逻辑:仅当消息包含discord.gg但不含任何白名单链接时,执行删除操作。
修改后的代码
# 定义白名单,替换为你需要保留的Discord邀请链接 WHITELISTED_LINKS = {"discord.gg/test", "discord.gg/your-official-server"} @bot.event async def on_message(message): print("The message's content was", message.content) await bot.process_commands(message) msg_lower = message.content.lower() # 检查消息是否存在Discord邀请链接 if "discord.gg" in msg_lower: # 判断消息是否包含白名单内的链接(忽略大小写) has_allowed_link = any(link.lower() in msg_lower for link in WHITELISTED_LINKS) if not has_allowed_link: await message.delete() print('deleted link:', message.content)
方案2:精确匹配(含非白名单链接则删除)
如果需要更严格的规则——只要消息里存在非白名单的Discord邀请链接,就删除消息(哪怕同时包含白名单链接),可以用正则提取所有邀请链接后再判断:
修改后的代码
import re # 定义白名单邀请链接 WHITELISTED_LINKS = {"discord.gg/test", "discord.gg/your-official-server"} @bot.event async def on_message(message): print("The message's content was", message.content) await bot.process_commands(message) # 正则匹配所有discord.gg格式的邀请链接(忽略大小写) invite_regex = re.compile(r'discord\.gg/[\w]+', re.IGNORECASE) found_invites = invite_regex.findall(message.content) if found_invites: # 统一转小写,避免大小写差异导致的匹配失败 found_invites_lower = {invite.lower() for invite in found_invites} whitelisted_lower = {link.lower() for link in WHITELISTED_LINKS} # 筛选出不在白名单里的链接 non_allowed_invites = found_invites_lower - whitelisted_lower if non_allowed_invites: await message.delete() print('deleted message with non-whitelisted links:', non_allowed_invites)
使用说明
- 将
WHITELISTED_LINKS中的示例链接替换为你需要保留的真实Discord邀请链接 - 方案1适合「只要有白名单链接就全部保留」的场景,方案2适合「只要存在违规链接就删除」的严格场景
内容的提问来源于stack exchange,提问作者Robbe__1
相关产品推荐
相关产品推荐

