Почему бот отправляет сообщение, хотя по условия не должен этого происходить Discord.py?

@tasks.loop(hours = 18.0 )
async def sob():
    c = today.weekday() # Проверяет день недели(изменить weekday) и написать такие же функции
    if c == 5 or 6 :
            channel = await bot.fetch_channel(926201516963029014)
            await channel.send('Сегодня будет собрание')
    else :
        pass

В теории бот должен сначала поверить день недели и только потом скидывать сообщение, но он скидывает его сразу же, хотя по дате не подходит(сегодня понедельник следовательно с = 0)


Ответы (1 шт):

Автор решения: 4500zenja

У Вас неверно реализована проверка дня недели: для проверки нескольких условий через ИЛИ нужно оформлять код следующим образом: if cond1 or cond2, где condN — условие. Я предполагаю, что Вы хотели проверить равенство переменной c с 5 или 6, однако Ваша формула будет трактована так:

if (c == 5) or (6)

т.е. если c == 5 или 6. При передаче любого численного ненулевого литерала подразумевается True, так что имеем в итоге

if c == 5 or True

а это всегда равно True, невзирая на c.

Стоит переписать данное условие таким образом:

@tasks.loop(hours = 18.0 )
async def sob():
    c = today.weekday() # Проверяет день недели(изменить weekday) и написать такие же функции
    if c == 5 or c == 6: # 6 меняем на c == 6
            channel = await bot.fetch_channel(926201516963029014)
            await channel.send('Сегодня будет собрание')
    else :
        pass

Теперь код действительно проверяет равенство переменной с 5 или 6 (скорее всего, субботой и воскресеньем?), и код будет работать только в эти дни, а не всегда.

P.S. Если хочется побаловаться, то можно использовать условие типа if c in [5, 6] :)

→ Ссылка