python - 为什么我的 if 和 elif 语句运行不正常?
问题描述
嗨所以我已经从过去的问题中更改了代码以尝试简化它,但是现在我遇到了另一个问题,
所以我有这段代码可以检查某个角色并更改角色,但是当我将命令输入到不和谐中时,这是 //leave @name 时间原因,'if' 或 'elif' 语句都不会运行。
我没有收到任何反馈,没有错误,只是机器人没有任何反应。
这是代码,如果有人能告诉我发生了什么导致语句无法正常运行,我将不胜感激。
(我尝试将 'elif' 语句与 'if' 语句互换,但无济于事。)
@client.command()
@commands.has_role(876994087214018571)
async def leave(ctx, member: discord.Member = None, time: str = '', *, reason: str = ''):
if not member:
member = ctx.author
loa = ctx.guild.get_role(848032714715561985)
mod = ctx.guild.get_role(848032880709074944)
smod = ctx.guild.get_role(851617257138028645)
amod = ctx.guild.get_role(848057125283954688)
if member.has_role(848032880709074944):
await member.add_roles(loa)
await member.remove_roles(mod)
await ctx.send("I have filed your Leave, take care, we look forward to your return!")
elif member.has_role(851617257138028645):
await member.add_roles(loa)
await member.remove_roles(smod)
await ctx.send("I have filed your Leave, take care, we look forward to your return!")
elif member.has_role(848057125283954688):
await member.add_roles(loa)
await member.remove_roles(amod)
await ctx.send("I have filed your Leave, take care, we look forward to your return!")
modLogEmbed = discord.Embed(title='Leave Logs',
description="A member of Staff is going on leave! " + '<@' + str(member.id) + '>', color=0x000000)
modLogEmbed.add_field(name="Time",
value=(time), inline=False)
modLogEmbed.add_field(name="Reason for Leave:",
value=(reason), inline=False)
modLogEmbed.set_footer(text="LeaveManager Bot")
modLogEmbed.set_author(name='Leave Manager')
botLogChannel = client.get_channel(874959002172268685)
await botLogChannel.send(embed=modLogEmbed)
此外,我真的对代码的设置方式表示诚挚的歉意,我真的不知道如何让它像其他成员的问题一样正确布局。
解决方案
那么member.has_roles
问题来了,成员没有属性“has_role”
也许试试这个 - 使用find
并lambda
找出你是否id
在任何元素中roles
我已经使用其他角色对其进行了测试,它工作正常。
@commands.command()
@commands.has_role(876994087214018571)
async def leave(ctx, member: discord.Member = None, time: str = '', *, reason: str = ''):
if not member:
member = ctx.author
loa = ctx.guild.get_role(848032714715561985)
mod = ctx.guild.get_role(848032880709074944)
smod = ctx.guild.get_role(851617257138028645)
amod = ctx.guild.get_role(848057125283954688)
result = find(lambda x: x.id == 848032880709074944, member.roles)
if result:
await member.add_roles(loa)
await member.remove_roles(mod)
await ctx.send("I have filed your Leave, take care, we look forward to your return!")
await ctx.send('done')
推荐阅读
- lotus-notes - 生成来自另一个表单(Web)的文档链接
- javascript - 我们需要初始化一个数组吗?
- c# - MVC 中下拉列表的动态填充
- ajax - 仅当通过 AJAX 响应更改某些内容时才更改选项
- reactjs - 有没有办法在本机反应中在文本输入中使用永久占位符?
- bash - 将 CSV 中的 URL 下载到第一个字段中给出的子目录中
- python - 带有预训练的 Sklearn GridSearch
- javascript - SHA1 生成的哈希不匹配(JS 和 C#)
- list - Flutter: generic list handles different key, value pairs
- javascript - 如何访问 JSON 中的特定对象