discord.py机器人新增命令后kick、ban功能无法正常运行问题
问题原因
你自行实现的on_message事件会覆盖discord.py内置的命令处理逻辑,如果你没有手动调用命令处理方法,所有以!开头的注册命令(包括ban、kick)都会被直接拦截,不会触发对应的执行函数。
解决方法
在on_message事件的所有自定义逻辑执行完成后,添加一行命令处理调用即可:
await client.process_commands(message)
修改后的完整on_message代码示例
@client.event #detect self messages async def on_message(message): if message.author == client.user: return #greeting if message.content.startswith('hello'): await message.channel.send('ay whatup ma gamer') #help if message.content.startswith('!therapy'): quote = get_quote() await message.channel.send(quote) #toxicity begone msg_content = message.content.lower() if any(word in msg_content for word in curseWord): await message.delete() # 新增这行即可恢复所有注册命令的正常运行 await client.process_commands(message)
额外注意点
- 确保机器人账号被分配了踢人、Ban人的相关服务器权限,否则即使命令触发也会执行失败
- 如果要针对特定命令做权限校验,可以在对应命令装饰器下添加
@commands.has_permissions(kick_members=True)这类权限校验装饰器,避免普通用户也能调用管理命令
内容的提问来源于stack exchange,提问作者Joe Biden
相关产品推荐
相关产品推荐

