Как написать чат бота для telegram на java
Для работы понадобятся
- Редактор кода, чтобы писать код. Если не знаете, какой выбрать — мы уже рассказывали. Если не умеете писать код, то вот инструкция, как его написать и запустить.
- Node.js любой версии, выше 0.12. Нужно, чтобы библиотека для ботов заработала. Как установить Node.js.
- Консоль. Или встроенный в систему вариант, или какой-нибудь другой.
- VPN. Возможно но не факт, потому что Телеграм работает не везде.
Шаг 1. Регистрируем бота
Находим в поиске Телеграма бота @botFather — это главный инструмент для создания ботов. Набираем в нём /newbot .
Придумываем название и имя боту. Название — то, как он будет подписан в списке контактов. Имя — строка, по которой его можно будет найти. Обратите внимание, что имя должно оканчиваться на bot . В ответ мы получим токен — длинную последовательность символов, которая пригодится нам в будущем. Мы назвали бота echoKeksBot , но вам придётся придумать другое название, потому что это уже занято. Извините.
Шаг 2. Создаём проект
Создаем папку в любом месте и открываем её в консоли. Там пишем npm init -y — эта команда создаст файл package.json , который выглядит примерно так:
Теперь установим node-telegram-bot-api — это библиотека для создания телеграм-ботов на Node.js. Введём команду:
Шаг 3. Запускаем бота
Тут всё просто, в консоли пишем node index.js , заходим к нашему боту в телеграм и начинаем с ним общаться. Не закрывайте консоль — бот работает только на вашем компьютере, и без консоли он не станет отвечать.
Как видим, бот успешно отвечает. Но бот-повторяха — не интересно, усложним задачу. Пусть бот присылает нам картинку.
Шаг 4. Отсылаем картинку
Добавим картинку с Кексом в папку с проектом. Для отправки изображения используем метод .sendPhoto() — передадим в него id чата и путь до картинки. Получится такой код:
Запускаем бота, проверяем, работает:
Шаг 5. Добавим клавиатуру. И пёсика
Добавим фотографию милого пёсика в корень проекта. Теперь там две картинки.
Создадим конфигурацию для клавиатуры в боте, пусть у нас будет 3 кнопки: «Хочу кота», «Хочу пёсика» и «Пойти учиться».
Чтобы отличить первые 2 кнопки, воспользуемся полем callback_data , где будем передавать тип кнопки. Для обработки нажатий добавим слушателя на событие callback_query , и в зависимости от значения query.data отправим нужную картинку к пользователю.
Не забудем про возможные ошибки и предложим пользователю попробовать снова, если он ввёл что-то не то. Перезапустим бота и проверим — всё работает. Главное — не закрывать консоль, иначе бот перестанет отвечать.
Полный файл с кодом: index.js.
В следующей части как раз разберёмся, как загрузить и запустить бота на сервере, чтобы он работал, даже если ваш компьютер выключен.
Познакомьтесь с JavaScript бесплатно
На интерактивных тренажёрах. А вместе с JavaScript — бесплатное знакомство с HTML и CSS.
import org . telegram . telegrambots . exceptions . TelegramApiException ; import org . telegram . telegrambots . ApiContextInitializer ; import org . telegram . telegrambots . TelegramBotsApi ; import org . telegram . telegrambots . api . methods . send . SendMessage ; import org . telegram . telegrambots . api . objects . Message ; import org . telegram . telegrambots . api . objects . Update ; import org . telegram . telegrambots . bots . TelegramLongPollingBot ; public class SimpleBot extends TelegramLongPollingBot < TelegramBotsApi telegramBotsApi = new TelegramBotsApi ( ) ; private void sendMsg ( Message message , String text ) < sendMessage . setChatId ( message . getChatId ( ) . toString ( ) ) ; sendMessage . setReplyToMessageId ( message . getMessageId ( ) ) ;Может быть полезно:
inaword 02.02.2016 08.12.2020
Базовые тесты для разработчика DApp
Стандарт ERC223 и его отличия от ERC20
1 Комментарий
Огромное спасибо! Кратко и по делу:)
А если Eclipse закрыть, бот не будет работать? Как сделать, чтобы он всегда работал?
Бот будет работать все время пока ваша программу будет запущена. Естественно после закрытия Eclipse программа остановится.
Я запускаю программу бота на отдельном сервере, который у меня постоянно работает.
а как добавить виртуальную клавиатуру?
ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup ( ) ;После добавления вирт клавиатуры, все появилось и все вроде работает, но
сыпет эксепшены:
Скорее всего вы запустили две копии робота.
Надо/setprivacy» на «Disable» и бота надо исключить из группы и заново добавить. Была такая же проблема.
как это реализовать?
// сравниваем с тем что он ответил , в данном случае "/help"Спасибо! Очень информативно! Вы не думали создать серию видео уроков написания на java? Думаю многим было бы полезно.
1) No implementation for org.telegram.telegrambots.generics.BotSession was bound.
while locating org.telegram.telegrambots.generics.BotSession
1 error
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1045)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054)
at org.telegram.telegrambots.ApiContext.getInstance(ApiContext.java:25)
at org.telegram.telegrambots.TelegramBotsApi.registerBot(TelegramBotsApi.java:83)
at com.nastin.bot.SimpleBot.main(SimpleBot.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Да действительно. Библиотеку разработчики изменили. Статью обновил.
В main добавьте самую первую строчку:
Спасибо еще раз! Благодаря Вашему вступительному уроку по созданию бота на джаве, мне удалось двинуться дальше. Хотел у Вас спросить такое: сдеть заложенна схема общения с ботом вопрос-ответ. Как можно сделать так, что бы бот через определленый промежуток времени присылал уведомления?
AnswerCallbackQuery answer = new AnswerCallbackQuery ( ) ; sendMsg ( query . getMessage ( ) , "Example query executed" , false ) ; private void sendMsg ( Message message , String text , boolean isReplay ) < sendMessage . setChatId ( message . getChatId ( ) . toString ( ) ) ; sendMessage . setReplyToMessageId ( message . getMessageId ( ) ) ; InlineKeyboardMarkup markup = new InlineKeyboardMarkup ( ) ; List < List <InlineKeyboardButton> > keyboard = new ArrayList < > ( ) ; InlineKeyboardButton button = new InlineKeyboardButton ( ) ; if ( message . getText ( ) ! = null && message.getText().equals("/start")) < private synchronized void sendMsg ( Message message , String text ) < sendMessage . setChatId ( message . getChatId ( ) . toString ( ) ) ; sendMessage . setReplyToMessageId ( message . getMessageId ( ) ) ;А как сделать локализацию? Может подскажете?
Язык интерфейса меняется следующим образом:
Будьте добры напишите пожалуйте пример :
response: current weather click Send /current, or weather for three days sends /weatherthree
respone:enter your location
Заранее огромное спасибо
Не работает( выдает ошибку в этой и еще некоторых строках
import org.telegram.telegrambots.TelegramApiException;
У меня следующая задача: клиенты пишут боту вопросы, эти вопросы бот перефутболивает операторам (point-to-point), операторы отвечают боту, бот возвращает ответы к соответствующим клиентам.
Да,ссылка битая.Подскажите,а где вы тогда скачали библиотеку?
Добрый день, уважаемый автор.
Большое вам спасибо за небольшой, но крайне информативный урок.
Можете ещё подсказать куда копать в решении задачи написания собственного маленького клиента к телеграмму под android?
Интернет даёт ссылку на официальную библиотеку tdlib (Telegram Database Library) но я никак не могу найти ни одного достаточно простого примера её использования.
import java.util.List;
import java.util.ArrayList;
Добрый день, запускаю и получаю ошибку. Интернет через прокси, может в этом дело?
код
package test;
import org.telegram.telegrambots.exceptions.TelegramApiException;
import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.TelegramBotsApi;
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
public class SimpleBot extends TelegramLongPollingBot
public static void main(String[] args) ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try telegramBotsApi.registerBot(new SimpleBot());
> catch (TelegramApiException e) e.printStackTrace();
>
>
private void sendMsg(Message message, String text) SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true);
sendMessage.setChatId(message.getChatId().toString());
sendMessage.setReplyToMessageId(message.getMessageId());
sendMessage.setText(text);
try sendMessage(sendMessage);
> catch (TelegramApiException e) e.printStackTrace();
>
>
Точно скачали библиотеку по ссылке и добавили в проект?
Привет,
у меня есть бот который отвечает на запросы и есть кнопки внизу экрана(благодаря inaword). Мне требуется сделать что бы когда пользователь нажимал на кнопки, бот задавал вопросы, человек отвечает на несколько вопросов, и так что бы я потом получил все данные которые ввел пользователь.
Спасибо.
Статья агонь!
Здравствуйте как получить данные от пользователя в телеграмме
И как использовать хранилище
Я использую Ability и прокси. У меня нет теперь onReceiveUpdate. У меня есть такая штука где я подставляю инлайн клавиатуру и есть обработчик
Consumer action = upd -> responseHandler.replyToButtons(getChatId(upd), upd.getCallbackQuery().getData());
Сегодня мы будем писать простейшего бота Telegram, который будет отвечать на команды. Такая статья была, но писали бота на Питоне.
Java в плане ботов, серверов, плагинов да и вообще программ будет удобнее для меня.1. Виртуальная машина хоть и долгая, но если обрабатывать события в несколько потоков, то будет работать быстро.(Вообще для многих серверов/мультиплеерных игр в одном потоке не всегда получится обрабатывать события, в Jav'e сделать это гораздо проще)
2. Наличие хорошей документации и Javadoc'ов, которые можно сделать для всех библиотек(не только для системных)
0. А что такое «бот»?
Бот — это профиль в соцсети/мессенджере(в данном случае Telegram) который отвечает на команды.( В любом случае все действия буду происходить после выполнения команды)
Тип чата с ботом — это переписка 1 на 1.
1.С чего же начинать?
Здесь качать библиотеку Telegram(обязательно with-dependiciens)
IDE можно выбрать любую, я бы порекомендовал eclipse.
Импотрируем библиотеку Телеграма и приступаем.
2.Наследование бота
Для того чтобы отвечать на команды, класс должен наследовать TelegramLongPillingBot
Получить токен и username можно вбив в поиск @BotFather и написать ему /newbot
3.Как же нам добавить в него что-нибудь?
А в UpdateReceived дописываем это:
4.Ура, всё получилось, как запустить?
Можно в Runnable JAR File так как у нас есть метод main, но лучше запускать прямо из IDE:
Когда мы запустили бота, зарегистрировали и получили токен у BotFather, то мы можем написать ему /start и увидеть что всё работает. Но бот будет работать только когда он запущен.(Много ему не нужно, за 50-100 рублей/месяц на хостинге можно держать). Также с помощью Telegram API можно отправлять картинки, создавать inline-ботов с кнопками и многое другое, но о этом уже в продолжении…
В статье пойдет разговор о том, что такое боты, для чего они используются, как работают и чем отличаются от обычных аккаунтов. Также рассмотрим порядок создания телеграм-бота на «Джава».
Возможности ботов
Приведем несколько классических примеров применения ботов в Телеграмм:
- Утилиты и инструменты. Телеграм-бот может переводить тексты, отображать актуальную погоду, предупреждать о каких-либо предстоящих событиях, использоваться для проведения опросов.
- Интеграция с сервисами. Бота можно использовать для отправки комментариев либо уведомлений, управления «умным домом».
- Игры (как одно-, так и многопользовательские). Бот без проблем поиграет с вами в шахматы/шашки, проведет викторину и т. п.
- Социальные сервисы. При необходимости специальный бот найдет вам собеседника, взяв за основу для поиска ваши интересы и увлечения.
- Все остальное. Это «все остальное» ограничивается лишь вашей фантазией. На деле вы можете запрограммировать бота практически для чего угодно. Однако стоит понимать, что он все равно останется ботом, а значит, не сможет помыть посуду вместо вас.
Если резюмировать вышеперечисленное одним предложением, то бот в Телеграм умеет оставлять комментарии к записям и постам, переводить тексты, искать информацию и аудио/видеоданные, спрашивать и отвечать на вопросы, подключаться к сети, обходить блокировки роутеров и сервисов, создавать чаты для общения, транслировать презентации и т. д. — всего не перечислишь.
Как функционируют боты?
В реальности вы можете создать бота в Телеграмм с помощью… бота. Для этого потребуется написать пользователю @BotFather , а потом следовать его инструкциям. После создания вы получите специальный ключ авторизации (токен). Выполнить необходимые настройки можно будет в разделе документации Bot API.
Особенности создания бота с помощью Java
Если вы не ищете легких путей, хотите прокачаться в Java и привыкли все творить своими руками, вы можете написать бота, используя язык программирования Java («Джава», «Ява»). Ниже рассмотрим один из возможных алгоритмов действий.
Пишем бот на Java
На деле написать бота для Телеграмм, используя Java, не так уже сложно. Рассмотрим пример создания бота посредством Webhook.
Общая последовательность действий будет следующей:
- Открываем «Эклипс», создаем новый Java-проект.
- Находим и загружаем базу, необходимую для создания Telegram-ботов.
- Импортируем загруженную библиотеку в проект.
- Создаем класс test.SimpleBot со следующим содержимым:
— нажатие кнопки «Send message»;
— выбор BotFather в Телеграме;
— ввод имени бота на Webhook.
Все, Telegram-bot Webhook, написанный на «Джава», готов. На данном этапе на любое обращение робот должен отвечать что-то в стиле «Я не знаю, что ответить на это», однако эту фразу можно поменять путем дополнения базы.
Каковы плюсы Telegram-бота на Java
Можно перечислить ряд преимуществ такой реализации:
- Простота.
- Минимум выполняемых операций.
- Минимум требуемых знаний и умений.
В сети вы можете найти целый спектр уже готовых решений в виде программного кода, поэтому написать бота на Java будет не сложно. Вот, к примеру, полезное обучающее видео, где подробно рассказывается о том, как создать погодного бота на «Джава». Преимущество именно этого решения — легкость, доступность, простота создания. Дерзайте!
Читайте также: