discord.py Почему операторы if и else выполняются одновременно? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть бот-дискорд, написанный на python, и я пытаюсь создать команду, чтобы сделать команду say с сообщениями из черного списка (раздражающие вещи). Он должен выдать сообщение об ошибке и по какой-то причине оба оператора if и else выполняются. Почему это произошло? Что я делаю не так?

Я попытался добавить break pass, но он по-прежнему выполнял оператор else

Вот мой текущий код для команды:

@client.command()
async def say(ctx, *, message):
    if message == '@everyone':
        await ctx.message.delete()
        await ctx.send('Do not abuse this command')
    if message == '@here':
        await ctx.message.delete()
        await ctx.send('Do not abuse this command')
    for role in ctx.guild.roles:
        if message == f'<@&{role.id}>':
            await ctx.message.delete()
            await ctx.send('Nice try but do not abuse this command')
    else:
        await ctx.send(message)
        await ctx.message.delete()
        print(f'{ctx.message.author} ({ctx.author.id}) in {ctx.guild.name} ({ctx.guild.id}) made me say: {message}')

1 Ответ

0 голосов
/ 13 июля 2020

В вашем коде есть несколько проблем. Во-первых, после вашего if s код не покидает функцию, поэтому он будет запускать код.

Кроме того, ключевое слово else связано с for l oop, поэтому поведение описано здесь: https://book.pythontips.com/en/latest/for_-_else.html. Но в основном else не имеет отношения к if s выше.

Вероятно, вы хотели бы получить что-то вроде этого:

@client.command()
async def say(ctx, *, message):
    if message == '@everyone':
        await ctx.message.delete()
        await ctx.send('Do not abuse this command')
    elif message == '@here':
        await ctx.message.delete()
        await ctx.send('Do not abuse this command')
    elif:
        for role in ctx.guild.roles:
            if message == f'<@&{role.id}>':
                await ctx.message.delete()
                await ctx.send('Nice try but do not abuse this command')
    else:
        await ctx.send(message)
        await ctx.message.delete()
        print(f'{ctx.message.author} ({ctx.author.id}) in {ctx.guild.name} ({ctx.guild.id}) made me say: {message}')
...