/slepaya-bot

Slepaya Bot for Telegram

Primary LanguagePython

Slepaya Bot

Вдохновением для создания данного бота послужил
сериал "Слепая" с телеканал ТВ-3.

Суть бота заключается в получении примет от бабы Нины (главной героини сериала.
Также есть возможность получить сгенерированную примету и подписаться на утреннюю рассылку.


Файлы проекта

  • Procfile - специальный файл для Heroku, который запускает worker
  • .gitignore - файл гитигнора для Heroku и GitHub
  • quotes_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"

requirements.txt

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 генерируется примета
Команды Список команд
Справка Пользовательская справка про "Чудной совет"