Как сделать, чтобы только в кноце итерации списка , если в списке не найден нужный объект, исполнялось условие else
#moderator start command
async def moderator_mode(message : types.Message):
#junior admin check
list_admins = await sqlite_db.sql_read_admins()
for admin in list_admins:
if(admin[1]==message.from_user.id or ID==message.from_user.id):
break
await message.reply("<b>Режим администрации младшего порядка успешно активирован ✅\nЧто будем делать?</b>",parse_mode="html",reply_markup=admin_kb.kb_junior_admin)
else:
await bot.send_message(message.from_user.id,"<b>В доступе администрации младшего порядка отказано\nВы не являетесь администратором или ваша карточка-пропуск ещё не готова</b>",parse_mode="html")
#Суть: из базы данных распаковывается список кортежей и записывается в переменную list_admins. В каждом кортеже по индексу [1] хранится id админа. Цикл for проходится по id в каждом кортеже и , если id пользователя находится в кортеже , то сообщается об активации режима модератора. Проблема: При каждом прохождении цикла , пока id не совпало , выводится сообщение об отказе доступа к админке. Как сделать , чтобы сообщение об отказе выводилось только если цикл полностью прошёлся по всем кортежам , но не нашёл совпадений. В данный момент , даже если id админа в списке, то ему может несколько раз подряд вывестись сообщение об отказе, но в конечном итоге, когда цикл доходит до него,ему сообщают об успешной активации.
Ответы (2 шт):
А если использовать такую проверку вместо for?
if message.from_user.id not in list_admins:
await bot.send_message(message.from_user.id,"<b>В доступе администрации младшего порядка отказано\nВы не являетесь администратором или ваша карточка-пропуск ещё не готова</b>",parse_mode="html")
else:
await message.reply("<b>Режим администрации младшего порядка успешно активирован ✅\nЧто будем делать?</b>",parse_mode="html",reply_markup=admin_kb.kb_junior_admin)