我的"Kick"命令有一个问题,它将返回一个错误.也许问题不在于代码,而在于角色设置的discord. 简而言之,使用此命令,用户可以踢自己,也可以踢具有相同角色的成员(例如,版主).我希望它在试图踢我自己或一个同样角色的人时抛出一个错误.以下是我的代码:
from __future__ import annotations
from typing import Optional
from .. import Plugin
from core import Bot
from discord import app_commands, Interaction, Member
def can_moderate():
async def predicate(interaction: Interaction):
target: Member = interaction.namespace.member or interaction.namespace.target
if not target: return True
assert interaction.guild is not None and isinstance(interaction.user, Member)
if (
target.top_role.position > interaction.user.top_role.position
or target.guild_permissions.kick_members
or target.guild_permissions.ban_members
or target.guild_permissions.administrator
or target.guild_permissions.manage_guild
):
raise app_commands.CheckFailure(f"You can't kick **{target}**")
return True
return app_commands.check(predicate)
class Moderation(Plugin):
def __init__(self, bot: Bot) -> None:
self.bot = bot
@app_commands.command(name = "kick", description = "Kick a member")
@app_commands.default_permissions(kick_members = True)
@app_commands.describe(member = "Select a member", reason = "Specify a reason for the kick")
async def kick_command(self, interaction: Interaction, member: Member, reason: Optional[str]):
if not reason: reason = "not specified"
try:
await member.kick(reason = reason)
except:
await self.bot.error(f"I'm sorry, but I can't kick **{member}**", interaction)
else:
await self.bot.success(f"**{member}** has been kicked ? from the server.", interaction)
async def setup(bot: Bot):
await bot.add_cog(Moderation(bot))
预先感谢您的帮助,❤️!
试图改变条件,大概是这样的:
if (
target.top_role.position >= interaction.user.top_role.position
or target.guild_permissions.kick_members
or target.guild_permissions.ban_members
or target.guild_permissions.administrator
or target.guild_permissions.manage_guild
or target.id == interaction.user.id
):
raise app_commands.CheckFailure(f"You can't kick **{target}**")
return True