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

如何在Discord Python中创建kick命令?@client.command失效怎么解决

问题排查&解决方案

现有代码的问题

  • 未提前定义member变量,直接代入startswith判断会直接抛出NameError,代码根本无法正常运行
  • ban()/kick()都是异步方法,调用时没有加await,执行后不会实际触发对应操作
  • 逻辑里用了ban()方法,但命令名是kick,功能不匹配,封禁和踢出是两个完全不同的操作

修复@client.command不生效的方案

discord.py v2.0之后默认关闭了消息内容意图,这是@client.command不生效的最常见原因,按以下步骤修复即可:

  1. 前往Discord开发者平台的Bot管理页面,找到Privileged Gateway Intents分区,打开Message Content Intent开关
  2. 代码中初始化Bot时显式声明启用消息内容意图,正确写法如下:
import discord
from discord.ext import commands

# 开启必要的意图
intents = discord.Intents.default()
intents.message_content = True
# 指定命令前缀为-
client = commands.Bot(command_prefix='-', intents=intents)

# kick命令实现
@client.command()
async def kick(ctx, member: discord.Member):
    # 可选:添加权限校验,仅允许有踢人权限的用户使用
    if not ctx.author.guild_permissions.kick_members:
        await ctx.send("你没有踢出成员的权限")
        return
    await member.kick()
    await ctx.send(f"User {member} has been kicked")

# 运行Bot
client.run("你的Bot Token")

手动监听消息的实现方案

如果你坚持不用装饰器写法,正确代码如下:

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True
client = commands.Bot(command_prefix='-', intents=intents)

@client.event
async def on_message(message):
    # 过滤机器人自身消息,避免循环触发
    if message.author.bot:
        return
    if message.content.startswith('-kick '):
        args = message.content.split()
        if len(args) < 2:
            await message.channel.send("请指定要踢出的成员")
            return
        # 权限校验
        if not message.author.guild_permissions.kick_members:
            await message.channel.send("你没有踢出成员的权限")
            return
        # 解析成员对象
        try:
            member = await commands.MemberConverter().convert(message, args[1])
        except commands.MemberNotFound:
            await message.channel.send("未找到指定成员")
            return
        await member.kick()
        await message.channel.send(f"User {member} has been kicked")
    # 如果同时要使用@client.command装饰器,必须添加这行,否则命令会失效
    await client.process_commands(message)

client.run("你的Bot Token")

内容的提问来源于stack exchange,提问作者H1387XD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:06