首页 > 解决方案 > 为什么我的 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)

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

标签: pythondiscorddiscord.py

解决方案


那么member.has_roles问题来了,成员没有属性“has_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')

推荐阅读