Вдохновением для создания данного бота послужил
сериал "Слепая" с телеканал ТВ-3.
Суть бота заключается в получении примет от бабы Нины (главной героини сериала.
Также есть возможность получить сгенерированную примету и подписаться на утреннюю рассылку.
Procfile
- специальный файл для Heroku, который запускает worker.gitignore
- файл гитигнора для Heroku и GitHubquotes_generator.py
- скрипт генерации примет (на данный момент используется библиотека markofivy)quotes.txt
- текстовый файл с приметами, постпенно пополнятесяrequirements.txt
- используемые в проекте библиотекиslepaya.py
- скрипт бота
Для корректной работы требуется завести переменные окружения с токенами телеграм бота и хранилища AWS S3
export AWS_KEY_ID="$AWS_ACCESS_KEY_ID"
export AWS_SECRET="$AWS_SECRET_ACCESS_KEY"
export TOKEN="$BOT_TOKEN"
pip install -r requirements.txt
Библиотека | Что тут делает |
---|---|
markovify==0.8.3 |
Генерация примет |
boto3==1.16.12 |
Работа с хранилищем AWS S3 (DynamoDB) |
APScheduler==3.6.3 |
Запланированная отправка сообщений по подписке |
LunarCalendar==0.0.9 |
Лунный календарь |
pyTelegramBotAPI==3.7.3 |
Осоновная библиотека для создания ботов |
Рассылка происходит в 09:33 МСК. Для этого обернем функцию отправки
сообщений в декоратор APScheduler. Обязательно начать процесс скедулера ДО процесса бота!
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
@scheduler.scheduled_job("interval",
start_date='2020-11-7 06:33:00',
hours=24,
id='notifications')
def send_notifications():
# code
scheduler.start()
slepaya.polling(none_stop=True)
Для хранения базы подписчиков из-за аморфности файловой системы Heroku используется AWS S3 (DynamoDB).
Доступ к ней мы получаем при помощи библиотеки boto3
import boto3
dynamo_db = boto3.resource('dynamodb',
aws_access_key_id=AWS_KEY_ID,
aws_secret_access_key=AWS_SECRET,
region_name=REGION)
table = dynamo_db(table_name)
Пользователи бота могут как подписаться, так и отписаться от рассылки. При чем,
в случае, если человек не подписан, а хочет отписаться, ему будет предложено подписаться.
Команда | Описание |
---|---|
Подписаться | В БД заносится уникальный chat.id или пользователю сообщается, что он уже подписан |
Отписаться | Из БД удаляется уникальный chat.id или пользователю сообщается, что он не подписан |
Верный совет | Из файла quotes.txt возвращается случайная примета |
Чудной совет | На основе всех доступных примет при помощи библиотеки markovify генерируется примета |
Команды | Список команд |
Справка | Пользовательская справка про "Чудной совет" |