Привет в этом кейсе я продемонстрирую тебе, как я сделал своего бота опросника.
Приведу исходный код python. Объясню структуру, и предназначение каждого файла
и обработчика.Ну и конечно сможешь по взаимодействовать с моим, уже готовым ботом.
Увы, когда я его делал, я незадумывал его мультиязычным. А когда спохватился, всё переделывать не решился. Да и
суть данного бота не в мультиязычности. Но к следующему разу, я точно сделаю мультиязычного бота. Так что всем не русскоговорящим будет легче.
Пример создания телеграм бота-опроса.
Структура бота-опроса
Мой бот имеет линейную/последовательную структуру. С некоторыми 'плавающими' обработчиками.
Что я под этим подразумеваю ?
Так как у меня бот-опросник. И он должен задавать вопросы последовательно, один за другим.
То и обработчики, которые обрабатывают ответы пользователя, должны вызываться последовательно, друг за другом.
Под 'плавающими' обработчиками, я имел в виду, те функции, которые могут быть вызваны в любой момент общения с ботом.
Их 5:
/start ➩ Стартует бота. Приветственное сообщение.
/help ➩ Показывает доступные команды
/menu ➩ Показывает доступные команды
/settings ➩ Настройка вывода результата
/result ➩ Выводит результат опросов людей
Структура проекта бота-опросника.
.env ➩ Файл содержащий токен бота. При скачивании с репозитория, его не будет. Нужно сделать его самостоятельно.
data.json ➩ Хранит данные обо всех пользователя. База данных. Да, пока без MySQL и прочих SQL. Создаётся автоматически.
result_template.md ➩ Шаблон, который используется для вывода информации.
requirements.txt ➩ Необходимые пакеты, для работы в виртуальном окружении
main.py ➩ Точка входа. Содержит все обработчики запросов
config.py ➩ Конфигурационный файл. Содержит глобальные переменные.
formaters.py ➩ Функции, суть которых в том, чтобы была возможность изменять вывод результатов в сообщении.
placers.py ➩ Функции взаимодействуюшие с шаблоном. Вставляют данные в него.
utils.py ➩ Различные утилиты.
Команда /start
Приветствует новоприбывших. Создаёт кнопки в сообщении, где предлагает пройти опрос.
Возраст опрашиваемого
Спрашивает возраст и создаёт кнопки клавиатуры.
Страна опрашиваемого
Создаёт словарь user_values, и сразу же присваивает ей возраст и id пользователя.
Создаёт кнопки на клавиатуре, с эмоджи стран на них. И само-сабой спрашивает страну опрашиваемого.
Пол опрашиваемого
Ловит текст выбранной страны и добавляет в user_values.
Спрашивает пол, и создаёт кнопки на клавиатуре со значками ♂ и ♀
Работа опрашиваемого
Обрабатывает текст от предыдущего обработчика, your_sex_handler, добавляет пол пользователю.
Спрашивает про работу, создаёт кнопки в сообщении.
Машина опрашиваемого
Сохраняет значение работы пользователя в user_values
Спрашивает, есть ли машина ?
Создаёт кнопки на клавиатуре
Конец опроса
Добавляет информацию о машине, пользователю.
После чего, сохраняет пользователя в базу данных data.json. Если конечно, пользователь
полностью прошёл опрос, а не случайно вызвал обработчик в середине.
Возможно, стоило бы добавить проверку на повторяющихся пользователей. Но я этого делать не стал,
ибо хотел дать пользователям возможность поучаствовать несколько раз.
Выводит стандартное сообщение и кнопку в сообщении с возможностью показать результат.
Главное меню
Данный обработчик можно вызвать через команды */help* или */menu*.
Ничего особенного он не делает. Создаём кнопки в сообщении. Выводим стандартное сообщение.
Настройки
Данный обработчик разбит на 4 функции. Одна, *setting_update_format_numbers*,
реализует непосредственно функционал изменения формата отображаемой информации.
Другая, *setting*, показывает возможные настройки, создаёт соответствующие
кнопки.
И две другие реализованы через *callback_query* и *message*. И обе они вызывают
*setting*. Сделано это было для того, чтобы была возможность работать с этой функцией,
и как с командой и как кнопкой.
Результат
Есть два обработчика. Один для обработки команды "/result", другой для вызова
через кнопки. Обе, они имеют один и тот же функционал *result*.
Сам же обработчик *result*, занимается тем что форматирует result_template.md.
Вставляет данные при помощи функций из *placers.py*. А формат меняет при помощи *formaters.py*
Скачать готового телеграм бота, или скопировать код
Ты можешь скачать бота с моего репозитория.
TimQuizzer-bot
Или ты можешь просмотреть исходный код, ниже. Скопировав интересующие тебя части
main.py
config.py
formaters.py
placers.py
utils.py
result_template.md
Заключение
Вот так вот я написал своего квиз бота. Возможно вам покажется он простеньким, и вы вцелом будете правы.
Но нужно же публиковать статьи, верно? В любом случае, надеюсь данный кейс сможет помочь тебе в написании
собственного бота опросника.
Это гайд про то как запустить телеграм бота, написанного на python/aiogram, на сервере. Как его установить, запустить и обновлять при необходимости. А также подготовка виртуального окружения вместе с автоматизацией обновления …
В этой статье ты узнаешь в чём разница между обычным тг ботом и инлайн. Как активировать режим инлайн для бота и как его сделать самому. Весь код примера доступен и …
Использованные термины
Телеграм бот ⟶ Это программа, которая используя **API** телеграма может выполнять различные действия в чатах без человека.
aiogram ⟶ Это фреймворк, который построен на модуля питона *asyncio* и *aiohttp*, для создания телеграм ботов. Полностью *ассинхронный*.
VPS (Виртуальный частный сервер) ⟶ Это услуга суть которой заключается в том что предоставляется доступ к выделеному серверу на определённой машине. Таких выделенных серверов на одной машине может быть тысячи. Обычно управление таким сервером не отличается от управления обычным, физическим.
Сериализатор ⟶ Сериализаторы позволяют преобразовывать сложные данные, такие как наборы запросов и экземпляры моделей, в собственные типы данных Python, которые затем могут быть легко преобразованы в JSON, XML или другие типы содержимого.
Отрисовка на стороне сервера(ОСС) ⟶ Это метод, используемый в веб-разработке, который включает использование сценариев на веб-сервере, который создает ответ, настроенный для каждого запроса пользователя к веб-сайту. Сценарии могут быть написаны на любом из доступных серверных языков сценариев.
Релевантные вопросы
Для чего нужен телеграм бот
Телеграм боты могут использоваться по разным причинам. Они являются универсальными помощниками в бизнесе, могут предоставлять удобный формат взаимодействия с клиентами или быть отличной платформой для размещения сайта или инструмента.
Подходит ли Python для создания ботов
Python является одним из самых популярных языков программирования для разработки ботов. Он очень простой и интуитивно понятный. Это отличным выбором для новичков. Так же python имеет в своей коллекции огромное количество библиотек, которые упростят вам жизнь и работу.
Что не умеют делать чат-боты
Несмотря на то, что chatgpt захватывает всё больше и больше пользователей в своё влияние, чат-боты до сих пор плохо решают индивидуальные запросы и жалобы пользователей. Они не смогут вам найти новых клиентов, и сэкономить денег они тоже не помогут.