Как стать автором
Поиск
Написать публикацию
Обновить

Разработка Telegram-бота для управления файлами и заметками с помощью Aiogram 3 и асинхронной SQLAlchemy

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров19K
Всего голосов 14: ↑13 и ↓1+18
Комментарии8

Комментарии 8

Статья понравилась. Хороший читаемый чистый код, только я бы провёл небольшой рефакторинг функции send_message_user - заменил бы конструкцию if/elif на match/case (для Python 3.10+)

async def send_message_user(bot, user_id, content_type, content_text=None, file_id=None, kb=None):
    match content_type:
        case 'text': await bot.send_message(chat_id=user_id, text=content_text, reply_markup=kb)
        case 'photo': await bot.send_photo(chat_id=user_id, photo=file_id, caption=content_text, reply_markup=kb)
        case 'document': await bot.send_document(chat_id=user_id, document=file_id, caption=content_text, reply_markup=kb)
        case 'video': await bot.send_video(chat_id=user_id, video=file_id, caption=content_text, reply_markup=kb)
        case 'audio': await bot.send_audio(chat_id=user_id, audio=file_id, caption=content_text, reply_markup=kb)
        case 'voice': await bot.send_voice(chat_id=user_id, voice=file_id, caption=content_text, reply_markup=kb)

Спасибо за обратную связь. Решил более явно указать в коде, но согласен. В боевых проектах лучше использовать такой синтаксис.

upd: Добавил ваш пример кода в статью. Ещё раз спасибо)

А что делать если мне надо прикрепить файл, который весит больше 50мб?

НЛО прилетело и опубликовало эту надпись здесь

TelegramBotApi ставит это ограничение только на физическую загрузку / отправку файлов.

# Функция, которая выполнится когда бот завершит свою работу
async def stop_bot():
    try:
        for admin_id in admins:
            await bot.send_message(admin_id, 'Бот остановлен. За что?😔')
    except:
        pass

С такой логикой:

  1. если первый админ заблокирует бота, то второй админ не получит сообщение;

  2. пока первый админ не получит сообщение, ко второму оно даже не улетит;

  3. если случится ошибка, от неё не останется никаких следов.

Рекомендую пересмотреть этот небольшой кусок кода :)

Да. Тут нужно перенести Try. Except блок на уровень отправки сообщения. Спасибо, что обратили внимание)

Не увдел импорты в upd_note_router.py

Зарегистрируйтесь на Хабре, чтобы оставить комментарий