簡體   English   中英

為什么我的 if 和 elif 語句不能正常運行?

[英]why are my if and elif statements not running properly?

嗨,我已經更改了過去問題的代碼以嘗試簡化它,但是現在我遇到了另一個問題,

所以我有這段代碼可以檢查某個角色並更改角色,但是當我將命令輸入 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)

另外,對於代碼的設置方式,我真的深表歉意,我真的不知道如何像其他成員的問題一樣正確布局它。

好吧, 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM