Python Discord机器人开发求助:检测违规昵称并自动踢出成员
Discord机器人昵称检测与踢出实现方案
1. 将成员信息存入列表
直接创建列表存储成员对象(方便后续踢人操作)或仅昵称,修改你的members命令:
import discord from discord.ext import commands intents = discord.Intents.default() intents.members = True client = commands.Bot(intents=intents, command_prefix='?') # 全局列表存储成员对象,便于后续操作 server_members = [] @client.command() async def members(ctx): global server_members server_members.clear() # 清空旧数据避免重复 for guild in client.guilds: for member in guild.members: server_members.append(member) print(member.display_name) # 打印昵称 await ctx.send(f"已收集服务器内{len(server_members)}名成员信息") client.run("你的机器人令牌")
2. 实现敏感昵称检测与踢出功能
新增命令遍历列表,检查昵称是否包含指定关键词,符合条件则踢出(需确保机器人有踢人权限):
# 定义需检测的敏感词汇/字符 BANNED_KEYWORDS = ["hello", "ЯΛY"] @client.command() @commands.has_permissions(kick_members=True) # 仅允许有踢人权限的用户执行 async def check_and_kick(ctx): if not server_members: await ctx.send("请先执行`?members`命令收集成员信息") return kicked_total = 0 for member in server_members: # 跳过机器人和服务器所有者 if member.bot or member == ctx.guild.owner: continue # 不区分大小写检查昵称是否包含敏感词 for keyword in BANNED_KEYWORDS: if keyword.lower() in member.display_name.lower(): try: await member.kick(reason=f"昵称含敏感词汇:{keyword}") kicked_total += 1 await ctx.send(f"已踢出:{member.display_name}") except discord.Forbidden: await ctx.send(f"无法踢出{member.display_name},权限不足") break # 匹配到一个关键词即停止检查该成员 await ctx.send(f"检测完成,共踢出{kicked_total}名成员")
关键注意事项
- 在Discord开发者平台开启服务器成员特权意图(Server Members Intent),否则无法获取完整成员列表
- 机器人角色需拥有踢人权限,且角色层级高于被踢成员的角色
- 可根据需求调整匹配规则:比如启用大小写敏感、使用正则表达式匹配复杂字符等
内容的提问来源于stack exchange,提问作者Maro
相关产品推荐
相关产品推荐

