FamilyTreeBot — это Telegram-бот для поиска информации из вашей базы данных о родственниках и друзьях по имени и фамилии.
Проект реализован на Python с использованием библиотеки aiogram и базы данных PostgreSQL.
Данный бот предназначен только для просмотра информации.
Но прежде всего необходимо запустить бот PersonnelManagerBot для администрирования этих данных.
FamilyTreeBot помогает быстро находить сведения о людях из вашей личной базы — достаточно написать имя и фамилию в чате с ботом, чтобы получить, например, дату рождения. Также бот отправляет ежедневные напоминания о днях рождения ваших близких.
| Компонент | Используемое решение |
|---|---|
| Язык | Python 3.10+ |
| Библиотека | aiogram |
| Планировщик | APScheduler |
| СУБД | PostgreSQL |
| ORM | SQLAlchemy |
- Просмотр информации о родственниках и друзьях
- Быстрый поиск по имени и фамилии
- Ежедневные уведомления о днях рождения
- Поддержка нескольких Telegram-пользователей
- Пользователь отправляет имя и фамилию прямо в чат с ботом.
- Бот ищет совпадения в базе данных и выводит найденные данные.
- Ежедневно всем пользователям отправляются напоминания о днях рождения.
Необходимо внести изменения в файл config.py, удалив всё, оставив только следующее:
TG_TOKEN = 'Ваш токен телеграм-бота'
# Ваше подключение к БД Postgres
DATABASE_URL = "postgresql+asyncpg://login:password@host:port/bdname"
# Схема базы данных Postgres, по умолчанию "public"
SCHEMA = "public"Замените TG_TOKEN на ваш токен телеграм-бота.
В строке DATABASE_URL замените следующие параметры:
login— логин базы данныхpassword— пароль базы данныхhost— хост базы данных (например, 192.168.0.1)port— порт базы данных (обычно 5432 для Postgres)bdname— название базы данных
Пароль необходимо указать в файле handlers.py в строке:
ACCESS_PASSWORD = 'e5ae93bd8095fbd86c25a110bbf194a5a1a209f1e8eb31bb30c8b0ecbe254d58'Это значение представляет собой хэш-пароль, сгенерированный с использованием хэш-функции.
Чтобы получить подобное значение, используйте функцию hash_password:
import hashlib
def hash_password(password: str) -> str:
return hashlib.sha256(password.encode('utf-8')).hexdigest()
print(hash_password('12345678')) # ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64fВы можете использовать любой свой пароль — сгенерированный хэш необходимо присвоить переменной ACCESS_PASSWORD.
Чтобы создать Docker-образ, перейдите в корневой каталог проекта в терминале и выполните команду:
docker build . -t familytreebotДля запуска контейнера Docker выполните:
docker run -d --name fambot familytreebotДля просмотра запущенных контейнеров:
docker psЧтобы остановить и, при необходимости, удалить контейнер:
docker stop fambot
docker rm fambotЕсли вы решили сделать Fork репозитория и настроить CI/CD для автоматического деплоя изменений бота, не вносите изменения в файл config.py.
Файл docker-image.yml содержит конфигурацию CI/CD:
Деплой бота на удалённый сервер Ubuntu происходит по ssh при выполнении push или pull request в основную ветку main, а также при ручном запуске в разделе Actions:
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]На удалённом сервере Ubuntu должен быть установлен Docker, а в домашней директории пользователя создана папка ~/deploy:
target: "~/deploy/"Для настройки CI/CD выполните следующие шаги:
Перейдите в раздел репозитория → Settings → Secrets and variables → Actions → New repository secret и добавьте последовательно следующие параметры:
DATABASE_URL— строка подключения в формате"postgresql+asyncpg://login:password@host:port/bdname".TG_TOKEN— токен телеграм-бота (без кавычек).DEPLOY_SERVER_HOST— адрес хоста удалённого сервера Ubuntu.DEPLOY_SERVER_PASSWORD— пароль пользователя на удалённом сервере Ubuntu (например,root).DEPLOY_SERVER_USER— имя пользователя на удалённом сервере Ubuntu.