AutoControlBot — телеграм-бот для автоматизации выдачи доступа в рабочие чаты на основе данных из Google Sheets.
- Синхронизация списка пользователей и чатов из Google Sheets.
- Автоматическое обновление кэша и мгновенные уведомления о новых доступах.
- Проверка наличия пользователя в таблице перед выдачей доступа.
- Удобный выбор чатов через инлайн-кнопки.
- Гибкая конфигурация через переменные окружения.
src/
├── main.py # Точка входа, запуск фоновых задач
├── bot.py # Инициализация aiogram Bot и Dispatcher
├── handlers/ # Обработчики команд и кнопок
├── services/ # Работа с Google Sheets, уведомления, права доступа
├── storage/ # Локальный кэш пользователей
└── utils/ # Журналирование и вспомогательные утилиты
- Google Sheets интеграция (
services/gsheets.py): чтение таблицы, отслеживание изменений и валидация данных. - Фоновое автообновление (
services/updater.py): регулярная проверка таблицы, обновление кэша и рассылка уведомлений. - Управление жизненным циклом бота (
services/bot_runner.py): корректное завершение с обработкой сигналов. - Обработчики команд (
handlers/start.py): приветствие пользователя и выдача доступных чатов.
Добавьте при необходимости дополнительные пояснительные схемы и вставьте их в раздел выше.
- Python 3.13+
- Установленные зависимости из
requirements.txt - Токен телеграм-бота (
BOT_TOKEN) - Ссылка на таблицу Google Sheets (
GOOGLE_SHEETS_URL) - JSON с сервисным аккаунтом Google (
service_account.json)
- Скопируйте шаблон переменных окружения:
cp .env.example .env
Создайте файл
.env, если шаблона нет. Минимально требуется указатьBOT_TOKENиGOOGLE_SHEETS_URL. - Поместите файл
service_account.json(например,autocontrolbot-fc7ddbebdf3b.json) в корень проекта или измените путь черезGOOGLE_CREDS_PATH. - Установите зависимости:
pip install -r requirements.txt
- Создайте сервисный аккаунт в Google Cloud Console, выдайте ему роль Editor (или более строгую по необходимости) и сохраните JSON-ключ. Именно этот файл (
autocontrolbot-fc7ddbebdf3b.json) нужно передать боту через переменнуюGOOGLE_CREDS_PATH. - Включите API Google Sheets и Google Drive для проекта, чтобы сервисный аккаунт мог читать таблицу.
- Откройте вашу таблицу Google Sheets и добавьте email сервисного аккаунта в список тех, кому предоставлен доступ «Editor».
- Пропишите в
.env:Если ключ лежит в другом месте, укажите полный путь. Без доступа сервисного аккаунта бот не сможет читать таблицу и выдавать доступы.GOOGLE_CREDS_PATH=autocontrolbot-fc7ddbebdf3b.json GOOGLE_SHEETS_URL=https://docs.google.com/spreadsheets/d/...
python src/main.py- Скопируйте
service_account.jsonрядом сDockerfile. - Заполните переменные окружения в
.env(или экспортируйте их в shell). - Соберите и запустите контейнер:
docker compose up --build
- Каждые несколько секунд бот проверяет таблицу на изменения (
services/updater.py). - Изменения кэша записываются в
storage/cache.json. - Пользователи получают уведомления о новых чатах и ролях через сервис уведомлений (
services/notifier.py).
Бот ожидает две вкладки с фиксированными названиями:
Таблица1— пользователи и отметки чатов.Таблица2— соответствие названий чатов их Telegram ID.
| Колонка | Описание |
|---|---|
tg_id |
Telegram ID пользователя (обязательное числовое поле). |
username |
Ник c @. |
fio |
ФИО или отображаемое имя. |
Админ ... |
Отдельные столбцы для каждого чата (Админ, Маркировка ЧЗ, Декларанты и т.д ) |
| Колонка | Описание |
|---|---|
chat_name |
Название чата, совпадает с заголовком в Таблица1 используется формула =ДВССЫЛ("Доступы!" & АДРЕС(1; 4 + СТРОКА(A1)-1; 1)). |
chat_id |
Telegram ID чата (отрицательное число для супергрупп). |
Бот сопоставляет непустые отметки из Таблица1 с ID из Таблица2, игнорирует пустые ячейки и некорректные строки.

