JavaRush /Java блог /Random /Telegram Ability Bot: бот, умеющий вести диалог
Chundrik
35 уровень
Санкт-Петербург

Telegram Ability Bot: бот, умеющий вести диалог

Статья из группы Random
Боты — это не только интересно, но и полезно. В ходе работы над ними вы сможете получить простой, но работающий проект для автоматизации каких-либо функций и попутно познакомиться с лямбдами, Git и Heroku. Когда я делала бот, то не нашла инструкций о том, как сделать что-то хоть чуточку сложнее, чем простой эхо-бот. Мне же хотелось чего-то более разумного: например, канал, который может вести настоящий диалог, развитие которого менялось бы в зависимости от выбранного ответа. Я расскажу о своем проекте, который занял у меня две недели, и особенное внимание уделю развертыванию на Heroku, поскольку столкнулась именно на финальном этапе с большими трудностями. Telegram Ability Bot: бот, умеющий вести диалог - 1

Регистрация

Для начала бота нужно зарегистрировать, получив название и токен, который потребуется нам дальше. К счастью, это не сложно: достаточно открыть Telegram, найти @BotFather и ввести /start. В ответ вы получите список команд — нам необходим /newbot. Придумываем имя, а затем и юзернейм, который должен заканчиваться на -bot, допустим, Consequences1Bot. Юзернейм должен быть оригинальным, поэтому тут придется проявить фантазию. В ответ BotFather пришлёт токен, который лучше сразу сохранить.

Начало

Telegram Ability Bot: бот, умеющий вести диалог - 2Для старта работы нам потребуется проект Maven, Java 8 и Intelliji Idea Ultimate. В pom.xml вставляем:Telegram Ability Bot: бот, умеющий вести диалог - 3Не забудьте нажать кнопку Load Maven changes, которая появится справа в верхнем углу. Также убедитесь, что вы используете Java 8 или выше, это можно посмотреть в File --> Project settings --> Project. В папке src.main.java создаем подпапку с названием вашего бота, у меня это пакет example.TelegramBot. Сначала создаем класс TelegramBot, который наследует AbilityBot. Если Idea подчеркнет его красным (а она подчеркнет), нажмите Import class. У AbilityBot есть один метод, который необходимо имплементировать — creatorId().

@Override
    public int creatorId() {
        return Constants.CREATOR_ID;
    }
Также нам нужно создать два конструктора: один без аргументов, а с помощью второго вызываем конструктор суперкласса:

public TelegramBot() {
        this(Constants.BOT_TOKEN, Constants.BOT_USERNAME);
    }
    private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
    }
Constans закономерно становится красным — этот интерфейс предстоит создать. В нем будут храниться строки и номер ID. Конечно, можно не заморачиваться и оставить все в основном документе, но так будет гораздо нагляднее. Итак, создадим интерфейс Constans. Первыми переменными будут String BOT_TOKEN (токен, который прислал BotFather), String BOT_USERNAME и int CREATOR_ID. ID создателя нужно для обеспечения дополнительной безопасности — вы можете узнать его чуть позже.

Запуск

Создайте класс Application, в котором будет метод main() с кодом, необходимым для инициализации бота.Telegram Ability Bot: бот, умеющий вести диалог - 4

public class Application {

    public static void main(String[] args) {
        // Initializes dependencies necessary for the base bot
        ApiContextInitializer.init();

        // Create the TelegramBotsApi object to register your bots
        TelegramBotsApi botsApi = new TelegramBotsApi();

        try {
            // Register your newly created AbilityBot
            FitnessBot bot = new FitnessBot();
            botsApi.registerBot(bot);

        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
}
Теперь вы можете запустить бота из главного метода, однако никаких действий он проводить не будет. Лишь молчание будет вам ответом. В следующей части я опишу, как это изменить. ЧАСТЬ 2
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Chundrik Уровень 35
25 августа 2020
Хз как редактировать статью, поэтому ВТОРАЯ ЧАСТЬ
ElenaSt Уровень 23
11 августа 2020
Очень интересно. Тоже хочу попробовать написать первого бота для телеграм.
Денис Уровень 26
10 августа 2020
Можно ли обойтись обычной IDE, без ultimate?
Alex Nerby Уровень 4
6 августа 2020
Спасибо)