我有一个有权限的代码。我需要检查一个成员的权限,如果成员没有这样的权限,发送一条消息。
主要代码:
@commands.slash_command(name = "addrole", description="Додати користувачу роль")
@commands.has_permissions(view_audit_log=True)
async def addrole(self, ctx, member: disnake.Member, role: disnake.Role):
#try:
await member.add_roles(role)
emb = disnake.Embed(title=f"Видача ролі", description=f"Користувачу {member.mention} було видано роль {role.mention} на сервері {ctx.guild.name}\n Видав модератор - **{ctx.author.mention}**", colour=disnake.Color.blue(), timestamp=ctx.created_at)
await ctx.send(embed=emb)我想要的是:
@commands.slash_command(name = "addrole", description="Додати користувачу роль")
@commands.has_permissions(view_audit_log=True)
async def addrole(self, ctx, member: disnake.Member, role: disnake.Role):
if ctx.author.guild_permissions.view_audit_log:
await member.add_roles(role)
emb = disnake.Embed(title=f"Видача ролі", description=f"Користувачу {member.mention} було видано роль {role.mention} на сервері {ctx.guild.name}\n Видав модератор - **{ctx.author.mention}**", colour=disnake.Color.blue(), timestamp=ctx.created_at)
await ctx.send(embed=emb)
else:
await ctx.send("You don`t have such permissions!")求你帮帮我。我试过不同的变体,没有人工作。
发布于 2022-11-28 15:36:38
我认为你没有得到你想要的,因为你正在尝试同时整合两者。从您的描述和代码中我可以看到,我可以提供的最简单的解决方案是从代码的“我想要的东西”部分中删除@commands.has_permissions(view_audit_log=True)。但是,如果您不想在每个命令下向用户发送“您没有权限”的if和add语句,我建议创建一个错误处理程序。使用此方法,您将能够使用您在问题中列出的第一个代码块。下面是我使用的一个非常基本的示例,它处理的是没有权限使用某个命令的用户。您可能需要更改它以适应特定的机器人,但这是一个开始:
@client.event
async def on_command_error(ctx, error)
await ctx.send(error) # this sends the error where the user is attempting to use a command. This means if the user is missing the right permissions to use a command, it will send something like "missing permissions" to the user. Which I think is what you are looking for“我想要的”代码不起作用,因为除非用户拥有audit_log权限,否则无法访问它下面的代码。如果它们已经具有这些权限,则if和not语句检查权限并不是很有用。在我看来,有一个错误处理程序是很好的,并且帮助了我处理我的机器人。希望这能有所帮助
https://stackoverflow.com/questions/74589128
复制相似问题