You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:54:04