### Технічне завдання (ТЗ) для розробки Telegram-бота з адмінкою та інтеграцією з Google Таблицями
#### 1. **Опис завдання**
Розробити Telegram-бота з панеллю адміністратора (адмінкою), через яку можна буде прив'язувати Google-таблиці для моніторингу та обробки даних, введених користувачами в клітинки. Основна мета бота — відстеження та управління статусом введених у таблиці Telegram юзернеймів (починаються на `@ username`), і їх постійне автоматичне оновлення в базі даних.
#### 2. **Функціональні вимоги**
##### 2.1. **Прив'язка Google-таблиць**
- Адміністратор через панель управління може прив'язувати потрібні Google-таблиці до бота.
- Кожна прив'язана таблиця повинна бути доступна для моніторингу змін в реальному часі.
- Можливість моніторингу кількох таблиць одночасно.
##### 2.2. **Моніторинг даних**
- Постійний моніторинг вводу даних у клітинки таблиць, відстеження появи нових даних (юзернеймів).
- Моніторинг усіх сторінок і вкладок таблиць (всі дані таблиці повинні бути охоплені).
##### 2.3. **Обробка юзернеймів**
- **Додавання юзернеймів**:
- Якщо введений юзернейм новий (відсутній у базі даних), він додається в базу.
- Клітинка з цим юзернеймом у таблиці фарбується в зелений колір на **7 днів** (індикатор зарезервованого юзернейма).
- У базі даних записується інформація про те, що цей юзернейм заброньований на тиждень.
- Якщо введений юзернейм вже зарезервований - клітинка стає червоного кольору
- **Статус зайнятості**:
- Якщо інший користувач вводить той же юзернейм у свою таблицю, його клітинка стає червоною (вказуючи, що юзернейм тимчасово зайнятий іншим користувачем).
- **Закінчення терміну резервування**:
- Коли термін резервування (7 днів) для юзернейма закінчується, у базі даних юзернейм стає "вільним".
- У таблиці:
- Клітинка користувача, який спочатку додав юзернейм, фарбується в жовтий колір. Це сигнал, що потрібно видалити старий юзернейм і знову ввести його, щоб оновити дані.
- У таблицях інших користувачів клітинка з цим юзернеймом знову фарбується в зелений колір (вказуючи, що юзернейм тепер вільний).
##### 2.4. **Робота з базою даних**
- **Основна таблиця (база даних)**:
- Зберігає всі юзернейми, введені за весь час використання системи.
- Друга колонка бази даних — це юзернейми, відповідні юзернеймам, введеним користувачами.
- Третя колонка — час до закінчення активності юзернейма (рахується залишковий час до кінця 7-денної періоду).
- **Зв'язок з Google-таблицями**:
- Таблиця, прив'язана до конкретної Google-таблиці, динамічно оновлюється, щоб відображати статус кожного юзернейма:
- Червоний колір — юзернейм зайнятий.
- Зелений колір — юзернейм вільний.
- Жовтий колір — час активності закінчився, потрібен повторний ввід.
##### 2.5. **Колірні індикатори**
- Зелений колір клітинки — юзернейм новий, зарезервований на 7 днів.
- Червоний колір — юзернейм зайнятий іншим користувачем.
- Жовтий колір — закінчився термін резервування, потрібне оновлення (видалення та повторний ввід юзернейма).
#### 3. **Адмінка (панель адміністратора)**
- Можливість додавання/видалення Google-таблиць.
- Перегляд прив'язаних таблиць.
- Контроль поточного стану бази даних (перегляд усіх активних і звільнених юзернеймів).
- Можливість редагування та скидання бази даних.
- Налаштування інтервалу моніторингу даних (наприклад, раз на хвилину).
- Перегляд статистики кожної таблиці та користувача (працівника, який веде розділ цієї таблиці, яка має своє назву)
- Налаштування та зміни терміну резервування кожної таблиці
- Зручний і простий інтерфейс з інлайн-кнопками та командами, а також виведенням інформації
#### 5. **Алгоритм роботи**
1. **Прив'язка таблиці**: Адміністратор через адмінку прив'язує таблицю, бот починає її моніторинг.
2. **Введення даних**: Користувач вводить юзернейм у Google-таблицю.
3. **Перевірка бази даних**:
- Якщо юзернейм новий — додається в базу даних, клітинка фарбується в зелений колір.
- Якщо юзернейм вже існує і зарезервований — клітинка фарбується в червоний колір.
4. **Моніторинг статусів**:
- Через 7 днів юзернейм звільняється, і колір клітинки змінюється.
5. **Оновлення таблиць**: Усі зміни синхронізуються між базою даних і Google-таблицями.