Discord.py封禁、解封及踢出命令开发求助:踢出命令无报错但失效
Discord.py 封禁/解封/踢出命令修复方案
你的代码存在几个核心问题,导致命令无法触发:
@client.command缺少括号,正确写法是@client.command(),没有括号的话装饰器不会生效,命令无法被注册- 命令函数的第一个参数错误,应该是
ctx(上下文对象)而非message,Discord.py 命令体系中,装饰器修饰的函数默认第一个参数为上下文,通过它可获取消息、频道等信息 - 需确认机器人的命令前缀是否设置为
!,初始化 Bot 时要写client = commands.Bot(command_prefix='!', intents=discord.Intents.all()),同时要在开发者门户开启服务器成员相关权限
修正后的完整命令代码
踢出(kick)命令
@client.command() @commands.has_permissions(kick_members=True) async def kick(ctx, member: discord.Member, reason=None): await member.kick(reason=reason) await ctx.send(f"{member} 已从服务器踢出。")
封禁(ban)命令
@client.command() @commands.has_permissions(ban_members=True) async def ban(ctx, member: discord.Member, reason=None): await member.ban(reason=reason) await ctx.send(f"{member} 已被封禁。")
解封(unban)命令
@client.command() @commands.has_permissions(ban_members=True) async def unban(ctx, user_id: int): user = await client.fetch_user(user_id) await ctx.guild.unban(user) await ctx.send(f"{user} 已被解封。")
额外注意事项
- 必须在 Discord 开发者门户为机器人开启 服务器成员特权 和 消息内容特权 等必要权限,否则无法获取成员信息
- 机器人自身的权限要高于被操作的成员,否则会执行失败
- 解封命令使用用户ID是因为被封禁的成员不在服务器内,无法@提及
内容的提问来源于stack exchange,提问作者Yunus Emre KÖSE
相关产品推荐
相关产品推荐

