Боты — это не только интересно, но и полезно. В ходе работы над ними вы сможете получить простой, но работающий проект для автоматизации каких-либо функций и попутно познакомиться с лямбдами, 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