Гадание по книге через телеграм бот Bibliomancer!
Этот телеграм бот позволяет получить предсказание по книге. Прямо как в реальной жизни. Выберите одну из доступных книг (/book), напишите страницу и желаемую строчку. Вы получите цитату и её сгенерированное изображение — это и будет вашим предсказанием.
В этом репозитории также содержится код админ-бота, с помощью которого можно загружать новые книги, смотреть количество пользователей, добавлять новых админов и банить пользователей в случае необходимости. Книги загружаются как файлы в формате .txt
и автоматически делятся на страницы и предложения.
Для взаимодействия с Telegram API используется фреймворк Python-Telegram-Bot, для генерации изображений — Pillow. С помощью NLTK страницы делятся на предложения. В качестве СУБД я использую MySQL.
В файле database.sql
содержатся SQL-запросы создания базы данных:
- Таблица
book
хранит метаданные о книгах: название, авторы и т.д. - Страницы книг хранятся в
page
. - Таблица
chat
содрежит id всех чатов, которые взаимодействуют с ботом, а также id книги изbook
, которую выбрал пользователь.
С помощью таблиц: role
, chat_role
и представления chat_role_view
реализована система ролей.
На данный момент используются роли user, admin и banned, которые отвечают за обычного пользователя, администратора и забанненого пользователя соответсвенно. Роль admin дает возможность пользоваться админ-ботом. Один и тот же пользователь может иметь несколько ролей (например user и admin).
Каждая выданная роль может иметь временные рамки в теченнии которых она действует (grant_date
и expire_date
).
Событие role_expiration
ежедневно в 3 часа ночи проверяет срок дейтсвия роли, и, в случае истечения, забирает её у пользователя.
Класс QuoteImage
из файла imgen.py
отвечает за генерацию изображения цитаты.
Чтобы избежать задержек в работе бота, для генерации изображений используется временная память io.BytesIO
, а не диск.
Пример сгенерированной цитаты:
-
Клонируйте репозиторий на ваш компьютер:
git clone git@github.com:ggeorg0/divination-tg-bot.git
-
Перейдите в папку репозитория:
cd divitaion-tg-bot
-
Чтобы случайно не перезаписать ваши библиотеки Python другими версиями, используйте виртуальные окружения
os command linux python3 -m venv ./.venv && source ./.venv/bin/activate
windows python -m venv ./.venv && ./.venv/Scripts/activate
-
Установите зависимости из файла
requirements.txt
os command linux pip3 install -r ./requirements.txt
windows pip install -r ./requirements.txt
-
Скорее всего меня нет прав на распространение чужих шрифтов, поэтому вам придется самостоятельно найти шрифты Ubuntu Bold и Georgia Italic, а затем поместить их файлы (
Ubuntu-Bold.ttf
,georgiai.ttf
) в директориюfonts/
. -
Теперь вам нужно установить систему управления базами данных MySQL (версия >= 8.0) на вашем компьютере. Если вы знакомы с Docker, вы можете использовать его.
-
Получите токены доступа к ботам от BotFather — один для обычного бота и один для админ-бота
-
Обновите файл
config.py
с вашими учетными данными для MySQL и токенами ботов, которые вы получили от BotFather. Если вы не хотите хранить учетные данные в файле, используйте переменные окружения. -
Запустите скрипт
db_setup.py
который инициирует базу данных. Вам будет предложено ввести id начального администратора (остальных админов можно будет добавлять через сам админ-бот).python ./db_setup.py
-
Запустите скрипт
nltk_setup.py
который установит токенайзер для модуля NLTK.python ./nltk_setup.py
-
Теперь можно запустить обычного бота
python -u ./runbot.py > bot.logs &
-
И админ-бота
python -u ./adminbot.py > adminbot.logs &