bot_staff — система учёта рабочих смен сотрудников в Telegram

Пара Telegram-ботов на Python: один даёт сотрудникам отмечать начало и окончание смены, второй показывает руководителю сводку и выгружает отчёт в Excel.

bot_staff — система учёта рабочих смен сотрудников в Telegram — фото 1
нажмите для просмотра в полном размере

Слайд 1 из 3

ОПИСАНИЕ

Система учёта рабочих смен из двух связанных Telegram-ботов поверх общих таблиц PostgreSQL (bots.bot_warehouse_staff — смены, bot_warehouse_staff_user — сотрудники): пользовательский бот фиксирует отметки, административный их читает и агрегирует. Оба построены на pyTelegramBotAPI (декларативные хендлеры, ReplyKeyboardMarkup/InlineKeyboardMarkup, цикл bot.polling с обработкой ApiTelegramException, включая ошибку 409 при дублирующем запуске). Доступ к БД — psycopg2 c DictCursor и настроенным TCP keepalive. Пользовательский бот реализует регистрацию как конечный автомат состояний (waiting_for_name, waiting_for_role) в словарях в памяти. Сотрудник опознаётся по telegram_username — при повторном входе профиль подтягивается из БД автоматически. Поддерживается смена имени и роли с каскадным обновлением всех связанных записей в обеих таблицах; при конфликте по telegram_username старая запись переносится на новое имя, а сохранение устойчиво к гонкам за счёт INSERT ... ON CONFLICT ... DO UPDATE. Фиксация смены построена на инвариантах: нельзя начать новую смену при незакрытой старой (проверка записи с check_point_start и без check_point_finish) и нельзя закрыть смену, которая не была начата; закрытие обновляет именно последнюю незавершённую запись, адресуясь к ней по системному ctid через подзапрос ORDER BY check_point_start DESC LIMIT 1. Административный бот предоставляет два действия. «Push Report» формирует текстовую сводку за день: данные группируются по сотрудникам, внутри группы сортируются по времени, для каждой записи определяется тип отметки (начал/закончил), длинные сводки разбиваются на части под лимит Telegram. «Download Report» выгружает полный отчёт за всё время в виде .xlsx, сгенерированного через openpyxl: книга на два листа (сотрудники и смены) с жирными заголовками, выравниванием и автоподбором ширины колонок; файл отправляется документом и удаляется после отправки.

ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ

  • Python
  • Telegram Bot API
  • pyTelegramBotAPI (telebot)
  • PostgreSQL
  • psycopg2
  • openpyxl
  • SQL
  • Git

РЕЗУЛЬТАТ

  • Построена система учёта смен из двух связанных ботов поверх общих таблиц PostgreSQL (пользовательский ввод + административная отчётность).
  • Реализован конечный автомат регистрации сотрудника (ввод имени → выбор роли) с опознаванием по telegram_username и автоподтягиванием профиля.
  • Реализована фиксация начала/окончания смены с инвариантами и адресацией незакрытой записи по системному ctid.
  • Реализованы каскадные обновления имени и роли по всем связанным таблицам и устойчивое сохранение через INSERT ... ON CONFLICT DO UPDATE.
  • Реализована дневная сводка смен с группировкой по сотрудникам и определением типа отметки.
  • Реализована генерация многолистового Excel-отчёта через openpyxl со стилями заголовков и автоподбором ширины колонок.
  • Реализованы редактирование профиля через inline-кнопку, набор клавиатур и обработка ошибки 409 при дублирующем запуске.

AI АССИСТЕНТ

Задать вопрос по этой работе