Дек
5

Е-шкин Бот — мой первый бот для Telegram

eshkibotРешил я тут поразмяться и изучить API Телеграма, написав свой первый бот «Е-шкин Бот».

Бот выдаёт информацию о пищевых E-добавках.

С тех пор, как я ещё писал на PHP, прошло несколько лет. Многое изменилось. Пришлось вспоминать синтаксис, изучить ООП под PHP и познакомиться с другими инструментами.

В общем, как всегда, ниже будут технические подробности:

  • IDE: Eclipse
  • SDK для API Telegram: irazasyed/telegram-bot-sdk
  • Фреймворк: composer
  • PHP: 5.6
  • База данных: SQLite
  • Локальный сервер для отладки: xampp
  • Хостинг (реально классный и недорогой): brunomedia.ru

Будучи не в теме последних трендов в PHP области, познакомился с composer. Это этакий менеджер библиотек, который автоматически их скачивает, обновляет и подключает к проекту. Т.к. всяческих классов в разных библиотеках полно, то вручную их все подключать устанешь. А composer это делает за тебя.

Режим работы с Telegram выбрал webhook. Для этого понадобилось сгенерировать самоподписанный ssl сертификат.

Базу данных по добавкам я напарсил с других сайтов. Но когда посмотрел, что кто пишет, глаза на лоб полезли. Информация противоречивая, друг с друга перепечатанная. И пришлось сесть и вручную каждую из 524 добавок редактировать (работа до сих пор не закончена). Для работы с базой данных использую SQLiteStudio.

Для работы с пользователями бота завёл ещё одну базу данных. Она хранит ID пользователя, имя, дату последнего обращения, а также поле, которое запоминает, находится ли бот в данный момент в ожидании ввода сообщения для отправки по обратной связи.

Когда мне приходит сообщение из обратной связи на почту, в нём я указываю ID пользователя. В боте есть спец. команда, которая отсылает мой ответ по указанному ID. Т.е. я реализовал небольшую админку для «управления» ботом, через которую могу узнавать, сколько человек начало работу с ботом, их имена и дату последнего обращения.

Сложности в процессе разработки

1. SQLite по умолчанию не поддерживает регистронезависимый поиск на других языках, кроме английского. База данных у меня на русском (UTF-8). Запросы к базе вида LIKE «%слово%» не срабатывали. Решение нашлось:

1
2
3
4
5
6
public static function lexa_ci_utf8_like($mask, $value)
{
$mask = str_replace(array("%", "_"), array(".*?", "."), preg_quote($mask, "/"));
$mask = "/$mask/ui"; // было "/^$mask$/ui" - для англ. слов поиск не работал. Убрал ^ и $
return preg_match($mask, $value);
}

Подключить нужно после открытия базы данных вот так:

1
$db->createFunction("like", 'lexa_ci_utf8_like', 2);

2. Когда ставил библиотеку irazasyed/telegram-bot-sdk через Composer, он скачивал версию 2. Хотя на гитхабе была новая версия 3. Чтобы установилась версия 3, нужно в файле composer.json изменить версию так:

1
2
3
"require": {
"irazasyed/telegram-bot-sdk": "dev-master"
}

После того, как бот был работоспособен, добавил я его в два каталога:

Один человек написал мне в обратной связи, что я его опередил с реализацией идеи бота по пищевым добавкам 🙂

Монетизации бота пока никакой нет. Зато пользы — море 🙂




Прокомментировать



ЗАДАЙ СВОЙ ВОПРОС