Telegram bot api команды

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

В этот раз немного улучшим его: улучшим форматирование, добавим inline-режим и реализуем пару команд.

Улучшаем форматирование

Скажу сразу, что Telegram умеет в HTML и Markdown. Но, к сожалению, очень ограничено: если посмотреть документацию, то поддерживается только полужирное начертание, курсив, моноширинный шрифт и ссылки:

*полужирный* _курсив_ [ссылка](http://www.example.com/) `строчный моноширинный` «`text блочный моноширинный (можно писать код) «`
полужирный, полужирный курсив ссылка строчный моноширинный блочный моноширинный (можно писать код)

Лично мне больше по душе Markdown.

К счастью, библиотека, которую я использую для разработки бота так же умеет в HTML и Markdown.

Немного улучшим наши сообщения:

  1. Название заклинания будем отображать полужирным
  2. Курсивом добавим информацию про уровень заклинания, школу, класс, время действия и прочее
  3. Описание заклинания оставим обычным текстом

То есть сообщение будет выглядеть (в исходном виде) примерно так:

#Telegram BOT (2022) — Set /commands with BotFather — Fast tutorial


*Alter Self* *Level* _2_ *School* _T_ *Time* _1 action_ *Range* _Self_ *Components* _V, S_ *Duration* _Concentration, up to 1 hour_ *Classes* _Sorcerer, Wizard_ *Roll* _1d6+1_ You assume a different form. When you cast the spell, choose one of the following options, the effects of which last for the duration of the spell. While the spell lasts, you can end one option as an action to gain the benefits of a different one. Aquatic Adaptation: You adapt your body to an aquatic environment, sprouting gills, and growing webbing between your fingers. You can breathe underwater and gain a swimming speed equal to your walking speed. Change Appearance: You transform your appearance. You decide what you look like, including your height, weight, facial features, sound of your voice, hair length, coloration, and distinguishing characteristics, if any. You can make yourself appear as a member of another race, though none of your statistics change. You also don’t appear as a creature of a different size than you, and your basic shape stays the same, if you’re bipedal, you can’t use this spell to become quadrupedal, for instance. At any time for the duration of the spell, you can use your action to change your appearance in this way again. Natural Weapons: You grow claws, fangs, spines, horns, or a different natural weapon of your choice. Your unarmed strikes deal 1d6 bludgeoning, piercing, or slashing damage, as appropriate to the natural weapon you chose, and you are proficient with you unarmed strikes. Finally, the natural weapon is magic and you have a +1 bonus to the attack and damage rolls you make using it.

В общем — ничего сложного, правда?

Для того, чтобы отправить сообщение в Markdown-формате необходимо сказать об этом telegram-у при помощи свойства ParseMode структуры MessageConfig :

text := fmt.Sprintf( «*%s*n» + «*Level* _%v_n» + «*School* _%s_n» + «*Time* _%s_n» + «*Range* _%s_n» + «*Components* _%s_n» + «*Duration* _%s_n» + «*Classes* _%s_n» + «*Roll* _%s_n» + «%s», spell.Name, spell.Level, spell.School, spell.Time, spell.Range, spell.Components, spell.Duration, spell.Classes, strings.Join(spell.Rolls, «, «), strings.Join(spell.Texts, «n»)) msg := tgbotapi.NewMessage(update.Message.Chat.ID, text) msg.ParseMode = «markdown» bot.Send(msg)

Можно немного упороться и сделать дополнительную предобработку: вместо школы или компонент выводить текстовое название школы и компоненты, но оставим это на самостоятельное изучение — сейчас можно обойтись без этого.

Как мне кажется, выглядит довольно пристойно:

2016-10-08_23-57-20.png

inline боты

Я не буду рассказывать что это такое — можете посмотреть в документации. Вкратце — это штука позволяет обращаться к боту из любого чата telegram и отправить ответ бота в этот чат (или в приватный чат — если это реализовано в боте).

Для реализации этой функциональности в telegram-bot-api уже есть нужная функция: NewInlineQueryResultArticleMarkdown принимающая три параметра:

  1. id — идентификатор сообщения (толком не понял, для чего используется)
  2. title — текст, который будет отображаться в выпадающем списке
  3. messageText — ответ бота, если пользователь нажмёт на этот элемент списка.

Сделаем так: если в inline режиме что-то пишут боту — считаем это имя заклинания и находим всё подходящие и их описания. Далее отправляем весь список подходящих заклинаний и ждём действий пользователя.

Но для начала необходимо изменить код, который обрабатывает получение новых обновлений от telegram: при получении inline сообщения свойство update.Message не будет означено, вместо него будет получено update.InlineQuery и это необходим корректно обрабатывать:

if update.Message == nil update.InlineQuery != nil < // код для inline режима >else < // код для «обычного» режима >

ОК, добавим обработку inline сообщений:

query := update.InlineQuery.Query filteredSpells := Filter(spells.Spells, func(spell Spell) bool < return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 >) var articles []interface<> if len(filteredSpells) == 0 < msg := tgbotapi.NewInlineQueryResultArticleMarkdown(update.InlineQuery.ID, «No one spells matches», «No one spells matches») articles = append(articles, msg) >else < var i = 0 // добавим счётчик заклинаний, чтобы не показывать больше 10 for _, spell := range(filteredSpells) < text := fmt.Sprintf( «*%s*n» + «*Level* _%v_n» + «*School* _%s_n» + «*Time* _%s_n» + «*Range* _%s_n» + «*Components* _%s_n» + «*Duration* _%s_n» + «*Classes* _%s_n» + «*Roll* _%s_n» + «%s», spell.Name, spell.Level, spell.School, spell.Time, spell.Range, spell.Components, spell.Duration, spell.Classes, strings.Join(spell.Rolls, «, «), strings.Join(spell.Texts, «n»)) msg := tgbotapi.NewInlineQueryResultArticleMarkdown(spell.Name, spell.Name, text) articles = append(articles, msg) if i >= 10 < break >> > inlineConfig := tgbotapi.InlineConfig < InlineQueryID: update.InlineQuery.ID, IsPersonal: true, CacheTime: 0, Results: articles, >_, err := bot.AnswerInlineQuery(inlineConfig) if err != nil

  1. Вводим команду /setinline
  2. Выбираем DndSpellsBot
  3. Пишем сообщение, которое будет отображаться в качестве подсказки
Еще по теме:  Как в Телеграме переслать голосовое в другой сесенджер

2016-10-09_00-33-01.png

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

2016-10-09_01-17-00.png

Похоже, всё работает как надо.

Осталось добавить команды

Команды

Команда — особо сформированное сообщение боту. Всегда начинаются с / и длиной не более 32 символов. Имеют следующий вид:

/command [optional] [argument]

Добавим боту возможность фильтрации заклинаний только для определённого класса. Для этого будем использовать команду /setclass .

Имя класса будем выбирать на inline-клавиатуре.

2016-10-10_23-25-06.png

Во-вторых, необходимо в логике бота отличать команду от обычного сообщения. telegram-bot-api так же позволяет делать это довольно просто при помощи метода Command() входящего сообщения:

// Если сообщение — не команда, то Command() будет пустой строкой, // иначе — текст команды command := update.Message.Command() if command == «» < // Здесь логика для «обычных» сообщений >else < // Здесь — для команд >

Можно сделать просто — параметром к команде передавать имя класса. А можно воспользоваться возможностями мессенджера и показать пользователю список доступных классов в виде кнопок:

2016-10-14_08-21-36.png

Сделать это несложно (когда знаешь как делать):

switch command < case «setclass»: msg := tgbotapi.NewMessage(update.Message.Chat.ID, «Select your class») keyboard := tgbotapi.InlineKeyboardMarkup<>for _, class := range classes < var row []tgbotapi.InlineKeyboardButton btn := tgbotapi.NewInlineKeyboardButtonData(class, class) row = append(row, btn) keyboard.InlineKeyboard = append(keyboard.InlineKeyboard, row) >msg.ReplyMarkup = keyboard bot.Send(msg) >

В-третьих — запомним, по идентификатору пользователя, что он хочет получать заклинания для выбранного класса (для простоты — создадим map[int]string):

// Перед функцие main добави наш словарь var classesMap map[int]string

В цикле обработки обновлений чата добавим обработку когда update.Message не означен, но есть update.CallbackQuery — ответ от inline-клавиатуры:

if update.CallbackQuery != nil

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

filteredSpells := Filter(spells.Spells, func(spell Spell) bool < class, ok := classesMap[update.Message.From.ID] classCond := true if ok < classCond = strings.Index(strings.ToLower(spell.Classes), strings.ToLower(class)) >= 0 > return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 classCond >)

Команду для очистки класса оставим на самостоятельную реализацию

Полный исходный код можно найти на bitbucket.

Источник: ashirobokov.wordpress.com

Создание Telegram бота на PHP #3: примеры отправки сообщений с кнопками в Telegram

В новом уроке мы с вами рассмотрим отправку базовых запросов в Telegram. Я покажу вам как отправлять простые текстовые сообщения в Telegram, как отправлять кнопки и дополнительные клавиатуры.

Всю информацию по параметрам запросов мы будем брать из официальной документации Telegram
https://core.telegram.org/bots/api/

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

  • С помощью параметра text вы можете передать текст кнопки
  • параметр url указывает ссылку, если вам нужно сделать кнопку для перехода на внешний ресурс
  • параметр callback_data указывает строку которая будет возвращена после нажатия на кнопку. Данную строку используют как команду.

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

Таким образом, для создания 2 кнопок в одном ряду, мы будем использовать следующий код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ) ), )), .

Для создания 2 рядов по 2 кнопки используйте код

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 1’, ‘callback_data’ => ‘test_2’, ), array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

И для создания одной кнопки в первом ряду и 2 — во втором, используйте следующий код.

. ‘reply_markup’ => json_encode(array( ‘inline_keyboard’ => array( array( array( ‘text’ => ‘Button 2’, ‘callback_data’ => ‘test_2’, ), ), array( array( ‘text’ => ‘Button 3’, ‘callback_data’ => ‘test_3’, ), array( ‘text’ => ‘Button 4’, ‘callback_data’ => ‘test_4’, ), ) ), )), .

Надеюсь, я смог объяснить данную тему доступно, если у вас будут вопросы, пишите их в нашем Telegram канале.

Отправка клавиатуры в чат

Аналогичные параметры имеет и массив для отправки клавиатуры в чат. Для создания клавиатуры пропишем следующий код.

. ‘reply_markup’ => json_encode(array( ‘keyboard’ => array( array( array( ‘text’ => ‘Тестовая кнопка 1’, ‘url’ => ‘YOUR BUTTON URL’, ), array( ‘text’ => ‘Тестовая кнопка 2’, ‘url’ => ‘YOUR BUTTON URL’, ), )), ‘one_time_keyboard’ => TRUE, ‘resize_keyboard’ => TRUE, )), .

Структура массивом для кнопок та же, но только есть отличие в названиях и количестве параметров.

Ключ inline_keyboard заменяется на keyboard.

А так же для клавиатуры добавляются 2 дополнительных параметра:

  • one_time_keyboard — скрыть клавиатуру, как только она была использована. Клавиатура по-прежнему будет доступна, но клиенты будут автоматически отображать обычную, буквенную клавиатуру в чате — пользователь может нажать специальную кнопку в поле ввода, чтобы снова увидеть пользовательскую клавиатуру. Значение по умолчанию равно false.
  • resize_keyboard — изменяет размер клавиатуры по вертикали для оптимальной подгонки (например, уменьшить клавиатуру, если есть только два ряда кнопок). По умолчанию установлено значение false, и в этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.
  • В новом уроке мы с вами разобрали самый популярный метод для работы с Телеграм ботами — sendMessage. Данный метод позволяет отправлять текстовые сообщения с привязанными кнопками и клавиатурами.
  • Научились удалять сообщения
  • Разобрали какие бывают типы кнопок и научились создавать массивы для гибкой структуры вывода дополнительных клавиатур и кнопок.
Еще по теме:  Как понять заблокировал ли тебя собеседник в Телеграмме

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

Дополнения к записи от 04.11.2022

Дополнение от доброго комментатора с сайта Habr, с ником FanatPHP — https://habr.com/ru/users/FanatPHP/

Пользователь предложил добавить вспомогательную функцию для работы с Curl.

function curl($url, $data = [], $method = ‘GET’, $options = []) < $default_options = [ CURLOPT_RETURNTRANSFER =>true, CURLOPT_HEADER => false, CURLOPT_SSL_VERIFYPEER => false, ]; if ($method === ‘GET’) < $url .= (strpos($url, ‘?’) === false) ? ‘?’ : ‘ $url .= http_build_query($data); >if ($method === ‘POST’) < $options[CURLOPT_POSTFIELDS] = http_build_query($data); >if ($method === ‘JSON’) < $options[CURLOPT_POSTFIELDS] = json_encode($data); $options[CURLOPT_HTTPHEADER][] = ‘Content-Type:application/json’; >$ch = curl_init($url); curl_setopt_array($ch, array_replace($default_options, $options)); $result = curl_exec($ch); if ($result === false) < throw new ErrorException(«Curl error: «.curl_error($ch), curl_errno($ch)); >curl_close($ch); return $result; >
$token = «5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU»; $url = «https://api.telegram.org/bot$token/sendMessage»; $getQuery = array( «chat_id» => 1424625511, «text» => «Новое сообщение из формы», «parse_mode» => «html» ); echo curl($url, $getQuery);

На этом всё!
Больше интересных статей в нашей группе — https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime

Наши планы

  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Источник: prog-time.ru

Создание Telegram-бота на Java: от идеи до деплоя

Java-университет

Создание Telegram-бота на Java: от идеи до деплоя - 1

Что же такое вообще боты? Подробно почитать об этом можно здесь. Для начала вам необходимо ознакомиться с официальной документацией к библиотеке для разработки ботов на Telegram(далее API). Лежит она здесь. Там все очень доступно и понятно. Казалось бы, пиши да радуйся! Но не все так просто. Проведя много времени в поисковиках я находил отрывки знаний по разработке ботов, например, как сделать клавиатуру, обработать CallbackQuery и тому подобное. Полного и исчерпывающего руководства для разработки ботов на Java я так и не нашел. Это и натолкнуло меня на написание этой статьи. В Интернете много сайтов, где можно создать своего бота с уже готовым деплоем. Но дело в том. что в своем большинстве создаются боты, которые могут предоставить справочную информацию и прочее. Наш бот — полноценное веб-приложение, к которому можно привязать базу данных, выполнять запросы на различные API, парсить сайты, выполнять сложные вычисления и прочее. Дело ограничено только вашей фантазией. Я надеюсь что в этих строках я немного разъяснил вам о чем собираюсь писать. Бота в Telegram зарегистрировать очень просто, этот процесс подробно описан в документации по ссылке выше. Для нашего приложение необходимо знать только имя бота и токен, который вы получите при регистрации. По сути бот — просто консольное веб-приложение. Никакого фронтенда, чистая обработка команд. Если вы желаете хорошо освоить Hibernate или научиться парсить JSON, то такой проект для вас. Начнем с того чтобы подключить зависимость в pom.xml (подразумеваем что вы используете Maven). Сделать это можно так:

org.telegram telegrambots 3.5

Затем создаем класс Bot , унаследуем его от класса TelegramLongPollingBot , переопределив его методы:

Ну и содержимое метода main :
public static void main(String[] args) < ApiContextInitializer.init(); TelegramBotsApi telegramBotsApi = new TelegramBotsApi(); try < telegramBotsApi.registerBot(Bot.getBot()); >catch (TelegramApiRequestException e) < e.printStackTrace(); >>

Вписав в методы getBotUsername() и getBotToken() мы запускаем бота. Пока он только перенаправляет нам любые сообщения, которые мы отправим ему, этакое «зеркало». Работает это все следующим образом: когда вы запускаете приложение, оно начинает раз в n количество секунд отправлять на сервер Telegram GET запрос по следующему URL: https://api.telegram.org/BotToken/getMe, где BotToken – токен вашего бота, получая в ответ JSON, в котором находятся все сообщения. Каждое такое сообщение обрабатывается библиотекой и приходит в метод OnUpdateReceived(Update update) объектом Update . С ним то мы и работаем. В этом вся прелесть Telegram-ботов, они могут работать на любом компьютере, для тестирования нужно просто запустить приложение, не нужно деплоить его на хостинг после каждого изменения. Это очень удобно. Само собой бота можно настроить на работу по вебхуку, руководство можно найти на просторах Интернета, мы будем для простоты работать по LongPolling. То как обрабатывать сообщения и что отправлять в ответ ограничено только лишь средствами языка и библиотекой, все остальное на ваше усмотрение. Вы можете сделать бота, который будет искать для вас видео на YouTube, можете сделать бота, который каждый день будет присылать вам то, что вы отправите себе, к примеру, за год, эдакую капсулу времени. А можете научиться интегрироваться к CRM-системам и делать ботов для малого бизнеса, все ограничено вашей фантазией. Идем дальше. Те, кто пользовался ботами знают, что с ними удобно взаимодействовать командами, начинающимися со знака «/» , например /start . Но есть способ удобнее — кнопки. Есть два вида кнопок: те, что появляются под полем ввода, ReplyKeyboardMarkup и кнопки, которые находятся непосредственно под сообщением, к которому привязаны, InlineKeyboardMarkup . В документации вы можете поверхностно ознакомиться с их описанием. ReplyKeyboardMarkup. По сути это — массив массивов кнопок, List> . Вот пример кода, который создает клавиатуру

public synchronized void setButtons(SendMessage sendMessage) < // Создаем клавиуатуру ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); sendMessage.setReplyMarkup(replyKeyboardMarkup); replyKeyboardMarkup.setSelective(true); replyKeyboardMarkup.setResizeKeyboard(true); replyKeyboardMarkup.setOneTimeKeyboard(false); // Создаем список строк клавиатуры Listkeyboard = new ArrayList<>(); // Первая строчка клавиатуры KeyboardRow keyboardFirstRow = new KeyboardRow(); // Добавляем кнопки в первую строчку клавиатуры keyboardFirstRow.add(new KeyboardButton(“Привет”)); // Вторая строчка клавиатуры KeyboardRow keyboardSecondRow = new KeyboardRow(); // Добавляем кнопки во вторую строчку клавиатуры keyboardSecondRow.add(new KeyboardButton(“Помощь”); // Добавляем все строчки клавиатуры в список keyboard.add(keyboardFirstRow); keyboard.add(keyboardSecondRow); // и устанваливаем этот список нашей клавиатуре replyKeyboardMarkup.setKeyboard(keyboard); >

Еще по теме:  Можно ли пробить по Телеграмму

В методе sendMsg() мы вызываем этот метод, передавая ему сообщение, таким образом устанавливая для такого сообщения клавиатуру. Когда мы отправим это сообщение пользователю, то он увидит текст сообщения, который мы установили, а также 2 кнопки, на которых будет написано Привет и Помощь, друг под дружкой. По нажатию на эти кнопки боту будет отправлено сообщение, текст которого представляет собой то, что написано на кнопке. То есть если клиент нажмет «Помощь», то боту придет сообщение с текстом “Помощь“. Для него это как будто бы клиент сам написал текст “Помощь“ и отправил бы ему. Ну а затем вы обрабатываете такие сообщения.

InlineKeyboardMarkup Это тоже массив массивов, он похож на предыдущий Markup, но логика работы здесь немного другая. Такая клавиатура привязывается к определенному сообщению и существует только для него. Вот метод для установки Inline-клавиатуры

private void setInline() < List> buttons = new ArrayList<>(); List buttons1 = new ArrayList<>(); buttons1.add(new InlineKeyboardButton().setText(“Кнопка“).setCallbackData(17)); buttons.add(buttons1); InlineKeyboardMarkup markupKeyboard = new InlineKeyboardMarkup(); markupKeyboard.setKeyboard(buttons); >

Создаем List в List , добавляем в первую строку Inline-кнопку. Такая кнопка может содержать URL, ссылку на канал или же CallbackQuery , о которой я напишу чуть позже. Здесь мы устанавливаем текст для нашей кнопки, который будет видеть пользователь, а затем устанавливаем данные, которые будут отправлены боту. В нашем примере пользователь видит «Привет», а боту при нажатии отправится число 17, это и есть наш CallbackQuery . Пару слов о CallbackQuery . Для получения таких данных из объекта Update нужно выполнить update.getCallbackQuery() , этот метод возвращает CallbackQuery , из которого уже можно получить данные, переданные боту. Не нужно пытаться получить эти данные через метод update.getMessage().getText() , получите NullPointerException .

Если есть сообщение, отправляем на обработку в новый поток сообщение, если есть CallbackQuery , отправляем его на обработку в соответствующий поток. На CallbackQuery можно отправлять ответ. У каждого объекта в Telegram есть свой id. Для отправки ответа на определенный CallbackQuery нужно знать лишь его id, который мы получим из соответствующего объекта. Для отправки ответа вызовем такой метод:

public synchronized void answerCallbackQuery(String callbackId, String message) < AnswerCallbackQuery answer = new AnswerCallbackQuery(); answer.setCallbackQueryId(callbackId); answer.setText(message); answer.setShowAlert(true); try < answerCallbackQuery(answer); >catch (TelegramApiException e) < e.printStackTrace(); >>

ВАЖНО: Текст в ответе на CallbackQuery должен быть не длиннее 200 символов! При отправке такого ответа клиент получит всплывающее окно, в котором будет написано сообщение. Такое окно может исчезнуть через несколько секунд само после появления, а может висеть до тех пор, пока пользователь не нажмет ок. Для переключения этих режимов мы вызываем метод answer.setShowAlert(true) . При true окошко висит до нажатия ок, при false исчезает через 5 секунд. В принципе это все базовые фишки библиотеки Telegram bot. Такие вещи как отправка мультимедиа, геолокации и тд вы при желании сможете освоить из документации. Давайте перейдем к деплою нашего бота на хостинге. Для своего проекта я выбрал Heroku, тк по моему мнению это достаточно удобный хостинг, который имеет свой CLI. Он бесплатен, но на таком тарифе ваш бот при отсутствии запросов будет уходить в спячку через 30 минут. Когда же к нему будет отправлен запрос, он просыпается. Это происходит довольно быстро, вы даже не заметите(если конечно коннект к БД не поднимается заново). Ограничение на бесплатный тариф — 5MБ база данных, 100МБ дисковое пространство, 2ТБ траффика в месяц, 1 дино. Дино — это ваше запущенное приложение. Скажу сразу, именно стадия деплоя вызвала у меня трудности, так как я до этого никогда не разворачивал свои приложения. Heroku при деплое требует наличия файла с именем Procfile(без расширения). Создаем его в корне проекта, пишем туда worker: sh target/bin/workerBot workerBot – имя, которое мы указываем в pom.xml Будет запускаться sh скрипт, генерируемый с помощью Maven плагина appassembler-maven-plugin. В скрипте описан запуск скомпилированного jar. Имя запускаемого класса указывается между , имя скрипта между pom.xml:

. . org.codehaus.mojo appassembler-maven-plugin 1.1.1 target com.home.server.TelegramBot workerBot package assemble

Перед началом этого процесса вам следует зарегистрироваться на Heroku, установить Git и Heroku CLI. Если вашему приложению необходима БД, то при оформлении нового приложения не забудьте добавить нужную вам БД. Далее вам необходимо узнать host, username, password и port вашей БД, а после указать в своем приложении. Далее перед деплоем выполните сборку вашего проекта с помощью Maven.

mvn clean install

Для начала мы переходим в каталог нашего проекта, инициализируем репозиторий командой git init Затем добавляем в этот репозиторий свой проект

git add .
После коммитим изменения
git commit -m “First commit in project”
Далее вам нужно залогиниться на heroku, пишем в командной строке
heroku login

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

git remote add heroku [url]
Для вашего репозитория добавится удаленный репозиторий heroku. Далее пишем
git push heroku master
Ждем… При успешном деплое приложения выполняем команду
heroku ps:scale worker=1

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

Источник: javarush.com

Рейтинг
( Пока оценок нет )
Загрузка ...