python - Discord.py - 检查用户是否有特定规则(如果函数)
问题描述
我浏览了其他帖子,但似乎找不到解决问题的方法。我为我的 kick 命令做了一个小的 if 函数检查,看看你试图踢的玩家是否不是工作人员的一部分。
员工角色是“团队”。
@client.command()
@has_permissions(kick_members=True)
async def k(ctx, member: discord.Member, *, reason=None):
if discord.utils.get(ctx.server.roles, name="Team") in member.roles:
await ctx.send('You cannot kick a staff member')
else:
await member.kick(reason=reason)
await ctx.send(f'Kicked {member}. Reason: {reason}')
解决方案
您可以使用列表推导来完全测试名称:
if "Team" in [r.name for r in member.roles]:
# code
或者您可以通过 ID 进行操作,建议您这样做,因为这意味着您可以更改服务器中角色的名称,而无需更新您的代码。
if 112233445566778899 in [r.id for r in member.roles]:
# code
要获取角色 ID:
- 确保您已启用开发者模式(设置 > 外观 > 向下滚动 > 启用开发者模式)
- 将自己引导到服务器的角色列表
- 右键点击员工的角色 >
Copy ID
您的代码不起作用的原因是您编写ctx.server
的不是ctx.guild
.
请参阅此处了解更多信息。
参考:
推荐阅读
- amazon-web-services - sam deploy 上的证书问题
- python - 基于 Pandas/regex 的方法来匹配字符串列表中的第一个字符串
- powershell - 尝试使用 powershell 根据扩展名和文件夹名称将文件放入文件夹中
- c# - 如何注释 C# 结构字段以编组为指针或嵌套在 PInvoke 中?
- c - 外部函数无法访问 Malloc 内存。使用 malloc 创建的数组在函数外无法访问
- node.js - 类型错误!!!TypeError:无法读取未定义的属性“cityName”。我哪里错了?
- javascript - Vue.js,v-bind 上多个类的选项
- javascript - 您能否编写一个能够识别表单提交并显示站点导航按钮的 Google Apps 脚本?
- opencv - OpenCV 的相机模型参考
- reactjs - Material UI Popper over TextField如何在选择popper选项时保持popper打开