Discord.py中如何在on_event事件中实现封禁用户的操作?
Discord.py 事件中执行用户封禁操作教程
前置要求
- 机器人账号已在Discord开发者后台开启 Server Members Intent 权限
- 机器人在目标服务器拥有
Ban Members权限,且角色排位高于要封禁的用户 - 代码初始化时已声明对应的权限意图
核心实现逻辑
封禁操作的核心是调用用户/成员对象的协程方法 ban(),必须搭配 await 关键字执行,方法支持两个常用参数:
reason:封禁理由,会记录在服务器的审计日志中,可留空delete_message_days:删除该用户最近N天在服务器内发送的消息,取值范围0~7
代码示例
基础初始化配置
import discord from discord.ext import commands # 声明需要的意图 intents = discord.Intents.default() intents.members = True # 必须开启,否则无法正常获取服务器成员对象 intents.message_content = True # 若需要监听消息内容则开启 bot = commands.Bot(command_prefix="!", intents=intents)
示例1:在on_message事件中触发封禁
检测到用户发送违规关键词时自动执行封禁:
@bot.event async def on_message(message): # 过滤机器人自身发送的消息 if message.author == bot.user: return # 触发条件自定义,此处以检测违规关键词为例 if "违规内容" in message.content: try: await message.author.ban( reason="发送违规内容", delete_message_days=1 ) await message.channel.send(f"已封禁违规用户 {message.author.mention}") except discord.Forbidden: await message.channel.send("封禁失败:机器人权限不足") except Exception as e: await message.channel.send(f"封禁失败:{str(e)}") # 若使用commands框架需保留此行,否则命令会失效 await bot.process_commands(message)
示例2:在on_member_join事件中触发封禁
新用户加入时如果属于预设黑名单直接封禁:
@bot.event async def on_member_join(member): # 自定义黑名单用户ID列表 BLACKLIST_USER_IDS = [123456789012345678, 987654321098765432] if member.id in BLACKLIST_USER_IDS: try: await member.ban(reason="黑名单用户", delete_message_days=0) except: # 权限不足等异常可根据需求自行处理 pass
常见问题
- 如果仅知道用户ID没有成员对象,可以先通过
await guild.fetch_member(用户ID)方法获取对应成员对象后再执行封禁 - 不要遗漏
await关键字,否则封禁操作不会生效
内容的提问来源于stack exchange,提问作者Lork Hune
相关产品推荐
相关产品推荐

