Telegram bot сообщение после команды

Обновлено: 30.06.2024

Это продолжение первой части статьи по программированию ботов для телеграмм на Java
TelegramBot инструкция по созданию базового функционала для бота. (Часть 1)
Кому интересно дальше, милости прошу под кат…

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

Как обычно с главного:
Весь готовый код по этой статье вы можете найти в ветке Part2-Handlers в гит-репозитории.
Код полностью рабочий, достаточно склонироваться, изменить данные для авторизации бота(имя и токен) и запустить метод main в классе App.class.

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

Обработка команд


Задаются они вот в таком формате:


И после этого при начале ввода команды вашему боту — он будет показывать помощь со списком перечисленных команд:


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

Еще добавим один вспомогательный класс ParsedCommand


Основное его назначение — в объектах этого класса мы будет хранить результат парсинга текста. Содержаться в нем будет только сама команда и весь текст, который идет после команды.

И напишем отдельный класс, который будет нам парсить команды. Класс Parser


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

Ну и дальше мы просто вызываем публичный метод

Как работает парсер вы можете увидеть в тестовом классе.

Мухи отдельно, котлеты отдельно

Изменения в этом классе очень незначительные. Мы добавили две очереди:


и немного переписали код функции public void onUpdateReceived(Update update)

Создадим отдельный package: service и в нем у нас будет всего 2 класса:

Их работу мы рассмотрим чуть ниже, а пока пропишем их использование в нашем стартовом классе App

После того, как наш бот приконнектился — мы стартует наши обработчики в отдельных потоках:


Для обоих потоков мы указываем режим Daemon. Это нужно для того, чтобы потоки работали до тех пор, пока работает основной поток и сами завершались, как только он свою работу прекращает.

Разберем по пунктам, что он умеет и что делает:

    Естественно это наследование интерфейса для многопоточности:
    implements Runnable
    и реализация функции run


Тут мы запускам бесконечный цикл, который занят только тем, что он проверяет очередь на отправку и вызывает команду send

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

Цикл работы очень простой:


Проверяем очередь. Если что-то есть — запускаем анализатор:


Если ничего нет — ждем.

Анализатор проверяет тип объекта. Если он умеет с ним работать — запускает следующий анализатор. Если не умеет — ругается :)

Почему так? Опять таки это закладка на будущее и, надеюсь, я её раскрою в следующих частях этого цикла статей. Такая реализация позволит нам потом формировать свои какие-то задания для бота, делать списки рассылок, дневные задания. Для этого ресивер должен уметь обрабатывать не только объекты типа Update а и что-то наше. Но об этом потом :)

Рассмотрим подробнее анализатор для типа Update:

Для этого создадим отдельный package, который и будет хранить все наши хендлеры. Назовем его handler
Создадим абстрактный класс AbstractHandler


У него будет базовый конструктор, в котором мы передаем с каким именно объектом Bot ему нужно будет взаимодествовать. И объявлена абстрактная функция operate реализацию которой мы должны будем прописать в наследниках нашего класса.

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


Как мы его применим и где мы получим результаты его работы — разберем чуть позже.

Следующий на очереди — SystemHandler
Он у нас займется обработкой базовых команд, таких как start, help и мы поручим ему еще и выполнение команды id

Основа его выглядит так:

Передав боту команду вида:
/notify 300

Бот должен вам сообщить, что команду понял и через 300 секунд он пришлет вам какое-то уведомление, что 300 секунд прошли. У этой команды может быть даже практическое применение :)

Например вы поставили пельмешки на огонь и вам их нужно снять через 5 минут. Бот с этим отлично справится и кинет вам в чат уведомление о том, что время вышло.

И чтобы логично завершить всю эту связку с вызовом хендлеров, вернемся в наш класс MessageReciever и посмотрим как мы понимаем какой хендлер нам нужен и как мы их запускаем.
Нужный хендлер нам возвращает команда

Теперь, если вы захотите добавить еще какие-то команды, нужно будет сделать следующее:

  1. В классе Command добавить синтаксис команды.
  2. В ресивере в функции getHandlerForCommand указать, кто будет ответственен за обработку этой команды.
  3. И собственно написать этот хендлер.

О чем мы поговорим в следующих частях?

Не стесняйтесь, задавайте вопросы. Если в статье что-то не указано или какой-то момент не ясен — напишите мне об этом. Я обязательно поправлю, отредактирую или уточню спорные моменты.

Программируйте в удовольствие и да прибудет с вами сила и красивый код :)

Бот, написанный в этой части статьи, работает. Помучать его можно тут: @test_habr_bot
Так же можно помучать моего планировщика: @EventCheckPlanner_Bot
И Дерзкого киномана: @FilmFanAmateurBot.

Общие сведения

Что могут делать боты?

Вот несколько примеров использования ботов:

Как работают боты?

Как уже было сказано ранее, роботы — особые аккаунты, которые не требуют номера телефона при создании. По сути, эти аккаунты играют роль интерфейса к вашему сервису, который работает на удалённом сервере.

Рекомендуем также ознакомиться с подробным описанием Bot API.

The Botfather

Как создать бота?

Для этого есть. Бот. Просто напишите пользователю @BotFather и следуйте его инструкциям. Как только вы создали бота и получили свой ключ (токен) авторизации, переходите в раздел документации Bot API, чтобы начать настраивать вашего бота.

Чем бот отличается от обычного аккаунта?

Суперспособности

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

Инлайн-режим

Введите имя пользователя бота, затем ключевое слово

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

Новый рекорд в чате
Внутриигровой счёт

Под капотом у игр — HTML5, поэтому вы можете создавать игры любой сложности. На данный момент командой Telegram созданы несколько демо-игр:

Клавиатуры

Клавиатура для бота опросов
Клавиатура бота викторин
Клавиатура бота-калькулятора. Просто потому что.

За более подробной информацией обращайтесь к описанию метода sendMessage.

Команды

Команды представляют собой более гибкий способ общения с ботом. Рекомендуется следующий синтаксис:

Если в группе есть несколько ботов, вы можете дописать после команды имя бота, чтобы избежать коллизий в общих командах:

Это происходит автоматически, если вы выбираете команду из списка доступных.

Глобальные команды

Чтобы пользователям было проще работать с ботами, мы просим всех разработчиков реализовывать поддержку нескольких простых команд. В интерфейсе приложений Telegram будут ярлыки (быстрые ссылки) для этих команд.

При попытке начать общение с роботом, пользователь увидит кнопку СТАРТ. На странице профиля бота также будут доступны ссылки Помощь и Настройки.

Пустая история переписки с ботом
Профильная страница бота

Режим приватности

Внешнее связывание

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

Допустимо использование символов A-Z , a-z , 0-9 , _ и - . Мы рекомендуем использовать base64url для кодирования параметров.

В PAYLOAD будет значение параметра start или startgroup , который был передан в ссылке.

Пример реализации внешнего связывания

BotFather

Создание бота

Напишите команду /newbot , чтобы создать нового робота. BotFather спросит у вас имя нового бота и предложит придумать username.

Имя (name) будет отображаться в контактах и чатах.

Создание токена

Если вы потеряли или утратили доступ к токену, отправьте команду /token , чтобы сгенерировать новый.

Настройки

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

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

Как произвести очистку экрана после ввода команды в командную строку?
к примеру : после ввода команды должна сробатывать команда clscr procedure Handler3; Interrupt;.


Как ввод чисел остановить после ввода числа 42?
Задача такова: пользователь вводит однозначные или двузначные числа типа integer, обработка ввода.


Вывод текста после ввода определенной команды
Как вывести введенный текст, но только после ввода, например, end? На данном этапе, используя.

Как повторно запросить ввод данных
Написал простенький код для высчитывания Верхнего и нижнего АД (просто опыта ради), если ввести.

Например:
"Введи название своего города пожалуйста."


Так а сейчас разве не так?


Вывод команды cout после ввода значений, несоответствующих требованиям
Как сделать, что бы команда cout не работала в случае ввода данных, не подходящих по требованию.

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

Это не окончательная версия, я мог что-то упустить. В процессе добавим недостающие.

Каждая функция обернута декоратором, так мы общаемся с Телегармом:

Добавление команд в бота

 Добавление команд в бота

Ответы на команды

Взаимодействие с ботом начинается с команды /start . Нужно поприветствовать и предложить следующий шаг. Эта команда будет возвращать текст с клавиатурой. Точно так же работает и /help .

Читайте также: