为什么我的if和elif语句不能正常运行?

2024-09-29 23:21:31 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我改变了过去问题中的代码,试图简化它,但现在我遇到了另一个问题

因此,我有一段代码,它检查某个角色并更改角色,但是当我将命令输入discord(即//leave@name-time-reason)时,“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)

此外,我真的为代码的设置方式表示诚挚的歉意,我真的不知道如何像其他成员一样使其正确布局


Tags: 代码nameaddyourgetif语句await
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:31

嗯,member.has_roles是问题所在,成员没有“has\u role”属性

也许可以试试这个-使用findlambda来查找你的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')

相关问题 更多 >

    热门问题