当我在 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)
答案 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 角色之上。该命令做得很好,所以不要担心更改此代码中的内容。
希望对你有帮助。