-
Кнопка "✏️ Изменить имя" в главном меню
- Позволяет пользователям изменить своё имя в формате "Фамилия Имя"
- Доступна всем зарегистрированным пользователям
-
Обработчик изменения имени (
cb_menu_name)- Переводит пользователя в состояние
NameFSM.waiting_name - Показывает форму для ввода нового имени
- Переводит пользователя в состояние
-
Улучшенная функция регистрации (
capture_full_name)- Теперь автоматически определяет, регистрируется ли новый пользователь или изменяет имя
- Для новых пользователей: показывает приветствие и кнопку меню
- Для существующих: обновляет имя и возвращает в главное меню
-
Первоначальная регистрация (при первом запуске
/start):- Бот просит ввести "Фамилию Имя"
- После ввода показывает приветствие и кнопку "🧰 Меню"
- Пользователь регистрируется в системе
-
Изменение имени (через кнопку "✏️ Изменить имя"):
- Пользователь нажимает кнопку в главном меню
- Бот просит ввести новое имя
- После ввода обновляет данные и возвращает в главное меню
- Показывает подтверждение: "✏️ Имя изменено на: [новое имя]"
- Главное меню теперь содержит 4 кнопки:
- 🚜 Работа
- 📊 Статистика
- 📝 Перепись
- ✏️ Изменить имя
- ⚙️ Админ (только для администраторов)
- Функция
upsert_user()автоматически создаёт или обновляет пользователя - Все существующие пользователи могут изменить своё имя
- Сохраняется история изменений (время последнего обновления)
- Синтаксис проверен:
python -m py_compile bot_polya.py✅ - Все функции корректно импортируются
- Структура базы данных соответствует ожиданиям
Упрощен выбор локации "Склад":
- При выборе "Склад" больше не показывается дополнительное меню
- Сразу устанавливается локация "Склад" и переход к выбору даты
- Для полей по-прежнему показывается список конкретных полей
- Выбор "Поля" → показывает список конкретных полей (Северное, Фазенда, 5 га и т.д.)
- Выбор "Склад" → сразу устанавливает "Склад" и переходит к выбору даты
- Убрано лишнее окно выбора для склада
- Ускорен процесс создания записи для складских работ
- Сохранена детализация для полевых работ
Админ-функции:
- ✅ Функции добавления и удаления локаций работают корректно
- ✅ Функции добавления и удаления работ работают корректно
- ✅ Все админ-команды обрабатываются правильно
- ✅ Исправлена ошибка BUTTON_DATA_INVALID в админ-панели
Выбор дат:
- ✅ Окно дат теперь показывает: "Сегодня", "Вчера", "Позавчера"
- ✅ Добавлены даты: -3, -4 дня назад
- ✅ Убраны будущие даты (+1, +2, +3, +4, +5 дней)
- ✅ Улучшена читаемость (вместо "01.01.25 (сегодня)" теперь "Сегодня")
Админ-панель:
- ➕ Добавить работу → выбор группы (техника/ручная) → ввод названия
- ➕ Добавить локацию → выбор группы (поля/склад) → ввод названия
- ➖ Удалить работу → выбор группы → выбор конкретной работы
- ➖ Удалить локацию → выбор группы → выбор конкретной локации
Выбор дат:
- Сегодня - текущая дата
- Вчера - вчерашняя дата
- Позавчера - позавчерашняя дата
- 01.01.25 - остальные даты в формате ДД.ММ.ГГ
- Всего 5 дат: сегодня + 4 дня назад
Проблема BUTTON_DATA_INVALID:
- В названиях работ/локаций могли быть символы
:и пробелы - Telegram не принимает такие символы в callback_data
- Решение: создание безопасных callback_data с заменой спецсимволов на
_ - Ограничение длины до 20 символов для совместимости
Интеграция с Google Sheets:
- ✅ Автоматический экспорт отчетов в Google Sheets
- ✅ Ручной экспорт через админ меню по кнопке "📤 Экспорт в Google Sheets"
- ✅ Умная проверка дубликатов - каждый отчет экспортируется только один раз
- ✅ Автоматическое создание месячных таблиц за 3 дня до конца текущего месяца
- ✅ Группировка отчетов по месяцам (отдельная таблица для каждого месяца)
Формат таблицы:
- Дата
- Фамилия Имя
- Место работы
- Вид работы
- Количество часов
Автоматизация:
- ✅ Планировщик задач для автоматического экспорта по расписанию (cron)
- ✅ Настройка через переменные окружения (.env)
- ✅ Возможность включить/выключить автоматический экспорт
- ✅ Настройка расписания (например, раз в неделю, раз в месяц)
База данных:
- ✅ Таблица
google_exports- отслеживает экспортированные отчеты - ✅ Таблица
monthly_sheets- хранит информацию о месячных таблицах - ✅ Связи между отчетами и строками в Google Sheets
Ручной экспорт:
- Админ открывает меню → "⚙️ Админ" → "📤 Экспорт в Google Sheets"
- Бот находит все отчеты, которые еще не были экспортированы
- Группирует их по месяцам
- Создает таблицы для новых месяцев (если нужно)
- Добавляет данные в соответствующие таблицы
- Отмечает отчеты как экспортированные в БД
- Показывает результат: "✅ Экспортировано записей: X"
Автоматический экспорт:
- Настраивается через переменную
AUTO_EXPORT_ENABLED=true - Расписание задается в
AUTO_EXPORT_CRON(формат cron) - Примеры расписаний:
0 9 * * 1- каждый понедельник в 9:000 0 * * 0- каждое воскресенье в 00:000 18 * * 5- каждую пятницу в 18:00
Создание месячных таблиц:
- За 3 дня до конца месяца автоматически создается таблица для следующего месяца
- Формат названия:
WorkLog_YYYY_MM(например,WorkLog_2025_10) - Таблицы создаются в указанной папке на Google Drive
- Первая строка содержит заголовки (жирным шрифтом)
Проверка дубликатов:
- Каждый экспортированный отчет записывается в таблицу
google_exports - При следующем экспорте бот пропускает уже экспортированные отчеты
- Это предотвращает дублирование данных в таблицах
Админ-меню теперь содержит:
- ➕ Добавить работу
- ➖ Удалить работу
- ➕ Добавить локацию
- ➖ Удалить локацию
- 📤 Экспорт в Google Sheets ← НОВОЕ
- 🔙 Назад
# Google Sheets настройки
OAUTH_CLIENT_JSON=oauth_client.json
TOKEN_JSON_PATH=token.json
DRIVE_FOLDER_ID=ваш_folder_id
EXPORT_PREFIX=WorkLog
AUTO_EXPORT_ENABLED=true
AUTO_EXPORT_CRON=0 9 * * 1pip install apschedulerИли установите все зависимости:
pip install -r requirements.txtПодробная инструкция по настройке: GOOGLE_SHEETS_SETUP.md
- Используется OAuth 2.0 для доступа к Google API
- При первом запуске откроется браузер для авторизации
- Токен доступа сохраняется в
token.jsonи обновляется автоматически - Требуется файл
oauth_client.jsonс учетными данными OAuth клиента
Все операции экспорта логируются:
INFO: Exported X reports to YYYY-MM- успешный экспортINFO: Created new sheet for YYYY-MM- создание новой таблицыERROR: ...- ошибки при экспорте
- Автоматизация - больше не нужно вручную выгружать данные
- Без дубликатов - каждый отчет экспортируется только один раз
- Организация - отдельные таблицы для каждого месяца
- Гибкость - настраиваемое расписание экспорта
- Удобство - формат Excel, готовый для анализа
- Надежность - отслеживание экспортированных записей в БД