为什么我的 discord bot kick 命令不起作用?

时间:2021-04-24 14:19:54

标签: python discord.py

当我在 Discord 中输入命令“.kick @user”时,我一直试图让我的机器人踢成员,我参考了许多 YouTube 视频,它们都指向相同的代码,但它没有为我工作。那么,我如何踢会员?

client = commands.Bot(command_prefix = ".")

# To kick user
@client.command()
@commands.has_permissions(kick_members = True)
async def kick(ctx, member : discord.Member = None, *, reason = None):
  await member.kick(reason = reason)

2 个答案:

答案 0 :(得分:3)

似乎缺少 Intent,并且您的 on_message 事件停止了命令的工作。

对于意图:

确保在 Discord Developer Portal 中为您的应用程序打开它们。

您可以在此处找到它们: 导航到您的应用程序 -> Bot -> 向下滚动 -> 打勾

要将它们实现到您的代码中,您可以使用以下内容:

intents = discord.Intents.all() # Imports all the Intents
client = commands.Bot(command_prefix="YourPrefix", intents=intents)

或者只是成员意图找到/踢成员:

intents = discord.Intents.default() # Imports the default intents
intents.members = True
client = commands.Bot(command_prefix="YourPrefix", intents=intents) 

您还可以查看docs了解更多信息

对于 on_message 事件:

您覆盖了默认的 on_message 事件。要解决此问题,只需将以下内容添加到您的代码中

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    greeting1 = re.compile(f"hello <@!?{client.user.id}>")
    if greeting1.match(message.content.lower()) is not None:
        await message.channel.send("Hello {}".format(message.author.mention) + "!")
    if greeting1.match(message.content.upper()) is not None:
        await message.channel.send("Hello {}".format(message.author.mention) + "!")

    greeting2 = re.compile(f"hey <@!?{client.user.id}>")
    if greeting2.match(message.content.lower()) is not None:
        await message.channel.send("Hey {}".format(message.author.mention) + "!")
    if greeting2.match(message.content.upper()) is not None:
        await message.channel.send("Hey {}".format(message.author.mention) + "!")

    await client.process_commands(message) # Allows commands to work

确保以正确的方式缩进代码!

答案 1 :(得分:0)

这可能无法正常工作的三个原因,首先是您没有启用意图,您可以通过这种方式启用它们:

intents = discord.Intents.default()
intents.members = True

client = commands.Bot(intents=intents, command_prefix=".")

另一个可能是 bot 没有足够的权限来踢用户,第三个是用户角色只是在 bot 角色之上。该命令做得很好,所以不要担心更改此代码中的内容。

希望对你有帮助。