Проекты*

Чат-бот «Notify.Manga»

Работа призёра открытой городской научно-практической конференции «Инженеры будущего» по направлению «Инженеры» в секции «Информационные технологии, программирование, прикладная математика, социальный инжиниринг» среди работ учащихся 10–11 классов

Направление работы: Программирование
Авторы работы: ГБОУ Школа № 7
Предметы: Информатика
Классы: 11 класс
Мероприятия: Открытая городская научно-практическая конференция «Инженеры будущего» по направлению «Инженеры» 2022 года

Актуальность

В связи с ростом популярности японских/корейских/китайских комиксов в России многие пользователи теряются в просторах интернет-ресурсов и забывают про ранее читаемые произведение, ведь новые главы выходят в среднем раз в месяц. Было решено создать чат-бот, который соберёт все произведения, нужные пользователю, в одном месте и упростит наблюдение за выходом новинок.

Цель

Создание асинхронного чат-бота в мессенджере «Telegram» для сохранения информации о комиксах, новеллах и т. п. и последующего оповещения пользователей о выходе новых глав.

Задачи

  1. Изучить теорию.
  2. Создать чат-бот.
  3. Создать систему оповещения.

Оснащение и оборудование, использованное при создании работы

  • Компьютер

Описание

Для реализации проекта был выбран язык программирования Python. Необходимым для реализации проекта оказалось изучение API Telegram.

Во время изучения материалов было выяснено, что при большом потоке пользователей в боте он начинает отвечать с задержкой.           

Оказалось, что корнем проблемы стало такое понятие, как синхронность. Во время выполнения синхронного кода компьютер идёт по всем запросам последовательно, ожидая выполнения каждой функции. Из-за этого и возникает проблема с задержкой ответа.

Во избежание этой проблемы было принято решение перейти на асинхронный метод программирования. Благодаря этому методу блокирующая функция убирается из основного потока и выполняется где-то на стороне, а компьютер идёт дальше без препятствий.

Поэтому выбор библиотеки для написания кода бота пал на Aiogram. Эта библиотека позволила выполнять все функции, описанные в Telegram Bot API.

Для выполнения основной задачи проекта нужно было где-то хранить данные пользователей. Выбор пал на СУБД PostgreSQL.  Причиной этому послужило наличие удобной асинхронной библиотеки Asyncpg. Для изучения основ был частично пройден курс на Youtube и на платформе Udemy.

Для проекта была выбрана файловая структура из курса на Udemy из-за её удобства и понятного ориентирования по папкам.

Асинхронная база данных

На приложенной картинке приведён пример реализации соединения с базой данных с помощью библиотеки Asyncpg.

Скриншот 2. База данных

Для сбора информации интернет-ресурсов было решено использовать асинхронный парсер, так как он гораздо быстрее справляется с задачей и не блокирует основной поток чат-бота.

Для написания логики бота были использованы встроенные методы в библиотеки Aiogram, такие как: Handler, FSM.

С помощью обработчика сообщений (те же хендлеры) и заранее прописанного ответа пользователь получал обратную связь от бота. Благодаря клавиатуре, встроенной в сообщения от бота, и машине состояний, пользователь шёл по заранее продуманному пути. Любые другие сообщения игнорировались.

Результаты работы/выводы

Был создан чат-бот, который способен сохранять информацию пользователя и в последующем оповещать его о новых главах.

Перспективы использования результатов работы

  1. Доработка и оптимизация имеющихся систем
  2. Запуск бота на отдельном сервере
  3. Создание связанного продукта Notify.Ranobe
  4. Объединение двух систем под одно имя
  5. Перевод бота с русского на английский и другие языки