gpt4 book ai didi

python - Discord.py Bot 的权限系统

转载 作者:太空狗 更新时间:2023-10-29 22:24:35 24 4
gpt4 key购买 nike

我正在使用 discord.py 和 asyncio 制作一个 discord 机器人。该机器人具有 kickban 之类的命令,这显然不应该对普通用户可用。

我想制作一个简单的系统,它将使用 ctx.message.author 检测用户角色具有哪些权限,以获取发送命令的用户。

我不希望机器人检测特定的角色名称,因为这些角色名称因服务器而异。我也不希望机器人有多个文件以保持简单。

我看过 discord.py 文档和其他各种资源,但没有包含如何实现他们谈论的各种方法的示例。

例如,这是来 self 的机器人的单个命令:

async def kick(ctx, userName: discord.User):
if True: #ctx.message.author.Permissions.administrator
await BSL.kick(userName)
else:
permission_error = str('Sorry ' + ctx.message.author + ' you do not have permissions to do that!')
await BSL.send_message(ctx.message.channel, permission_error)

if else 语句是我自己尝试做的。 #ctx.message.author.Permissions.administrator 已被注释掉,因为它不起作用并替换为 True 用于测试目的。

感谢您提前提供的任何帮助和建议。

最佳答案

Permissions是类的名称。要获得消息作者权限,您应该访问 guild_permissions作者的属性(property)。

if ctx.message.author.guild_permissions.administrator:
# you could also use guild_permissions.kick_members

更新:

验证调用命令的人的权限的更好方法是使用 check commands 扩展的特性,特别是 has_permissions查看。例如,如果你想只对拥有 manage_roles 权限或 ban_members 权限的人开放你的命令,你可以这样写你的命令:

from discord import Member
from discord.ext.commands import has_permissions, MissingPermissions

@bot.command(name="kick", pass_context=True)
@has_permissions(manage_roles=True, ban_members=True)
async def _kick(ctx, member: Member):
await bot.kick(member)

@_kick.error
async def kick_error(ctx, error):
if isinstance(error, MissingPermissions):
text = "Sorry {}, you do not have permissions to do that!".format(ctx.message.author)
await bot.send_message(ctx.message.channel, text)

关于python - Discord.py Bot 的权限系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48612603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com