JavaRush /Java блог / Java-марафон 2.0 (Чатбот-игра) /Конспект к занятиям на Java-марафоне

Конспект к занятиям на Java-марафоне

Статья из группы Java-марафон 2.0 (Чатбот-игра)
Здесь ты найдешь подсказки и "шпаргалки" к материалу, который изучаешь на занятиях. Они будут полезны для успешного выполнения домашних заданий. Помни: ты всегда можешь пересмотреть видео, почитать конспекты или обратиться со своими вопросами к сообществу и куратору в специальном чате в Телеграме. Удачи!

Конспект к занятию №1

На этом занятии мы познакомились со структурой нашего проекта в IntelliJ IDEA, узнали, как зарегистрировать бота в Telegram, и как написать в нем первое сообщение для пользователя.

Основные понятия языка Java, которые тебе будет полезно знать

ООП — объектно-ориентированное программирование. Java – объектно-ориентированный язык. Это означает: все, что создается в программе, должно быть создано в виде объекта. Программа — это набор (список) команд. Сначала выполняется первая команда, затем вторая, третья и так далее. Когда все команды выполнены, программа завершается. Программы на языке Java выполняет JVM (Java Virtual Machine — виртуальная машина Java). JVM — это специальная программа, которая умеет выполнять программы, написанные на языке Java.

Основные принципы написания команд

Принцип первый: в языке Java каждую команду принято писать с новой строки. В конце команды ставится точка с запятой:

System.out.println("Привет, будущий программист");
Принцип второй: программа не может просто состоять из команд. Команды языка Java должны находиться внутри методов, а методы — внутри классов. Общую иерархию можно описать так: Java-программы состоят из классов, классы содержат методы, а методы — команды.

Тезисы к первому занятию

  • Запускаем IntelliJ IDEA и открываем загруженный проект. Папку TelegramBot (для windows нужно разархивировать).

    Конспект к занятиям на Java-марафоне - 1

  • src в левой колонке — это source папка. src → main → java — путь к коду, с которым мы будем работать.
  • Утилитные методы — это вспомогательные методы, обычно статические (static). То есть, такие, которые принадлежат не объекту, а классу.
  • Наследование классов — форма отношений между классами. Класс-потомок использует методы класса-родителя, но не наоборот.
В нашем случае мы используем наследование от класса TelegramLongPollingBot — в нем есть набор методов, которые нужны нам для соединения и работы с Telegram-ботом, который мы с тобой создадим. Чтобы программа могла работать с нашим ботом, нам нужно указать:
  • getBotUsername (имя бота)
  • getBotToken (токен бота)

Получение имени и токена бота, регистрация бота

Открываем Telegram и через поиск находим BotFather. В открытом с ним диалоге пишем: /newbot — команду для создания нового бота. После создания нужно выбрать уникальное имя (username) — обязательно должно заканчиваться на _bot.

Утилитные методы, которые мы будем использовать

Напомним, утилитные методы — готовые методы, написанные другими программистами, которые помогают нам писать код нашей программы. onUpdateEventReceived — метод, который будет обрабатывать все сообщения, вводимые пользователями нашего бота. Мы будем их получать и писать логику соответственно тому, что нам нужно. sendTextMessageAsync — метод для создания сообщения. Первым параметром он принимает значение chatId — идентификатор чата, который начал пользователь. Вторым принимает значение сообщения, которое выведется пользователю. В нашем случае — "Привет, будущий программист!". sendApiMethodAsync — метод для отправки сообщения.

Домашнее задание №1

  • Загрузить проект в IntelliJ IDEA.
  • Создать и зарегистрировать нашего бота в Телеграм.
  • Написать первое сообщение в боте для пользователя.

Подсказки к выполнению задания №1

Проверка корректности кода и обновление изменений в проекте

Чтобы увидеть изменения, которые ты вносишь непосредственно в работе Телеграм-бота, не забудь после написания своего кода применить все изменения (перезапустить проект) в IntelliJ IDEA. Для этого нужно в нижней горизонтальной панели нажать на зеленую круглую стрелку: Конспект к занятиям на Java-марафоне - 1

Важные принципы форматирования кода

  • Не забывай ставить точку с запятой ; в конце команды, которую ты создаешь
  • У каждой открывающей скобки или кавычки: (, {, ", должна быть закрывающая скобка или кавычка: ), }, "
  • Если твой код подсвечивается красным, значит в нем есть ошибка — присмотрись внимательнее
  • Используй автоматические подсказки и автодополнение — это поможет тебе писать код правильно
Помни о том, что твои названия переменных, методов и классов должны быть читабельными: по названию должно быть понятно, что они делают или для чего предназначены.

Форматирование текста

  • Чтобы выделить текст курсивом, нужно в начале и в конце необходимого фрагмента добавить нижние подчеркивания: _текст_
  • Чтобы выделить текст жирным, нужно в начале и в конце необходимого фрагмента добавить звездочки: *текст*
Не обязательно к установке Когда много скобок и других подобных знаков можно легко запутаться. И кто-то уже придумал плагин Rainbow Brackets. Он выделяет разным цветом скобки и другие знаки, облегчая читабельность кода. Конспект к занятиям на Java-марафоне - 3 1. Зайдите в раздел "Настройки", Windows/Linux File - Settings, MacOS Intellij IDEA - Preferences 2. В появившемся окне в боковом меню выберите раздел Plugins и откройте вкладку Marketplace. И в строке поиска напечайте Rainbow Brackets Конспект к занятиям на Java-марафоне - 4 3. После установки нажать Restar IDE

Конспект к занятию №2

Методы и операторы, которые будем использовать

  • if — условный оператор в Java
  • getMessageText() — метод, с помощью которого будем проверять, есть ли у нас новое сообщение
  • equals — метод, который сравнивает содержание сообщения с конкретным текстом. Чтобы условие было true, содержание должно быть полностью идентичным (то, что передано в метод equals — слово в слово — в запросе/сообщении)
  • contains — метод, который проверяет, содержит ли сообщение определенное слово/фразу. В нашем случае — "привет"

Конструкция условного оператора if

Оператор if является основным оператором выбора в Java, который позволяет выборочно изменять ход выполнения программы. Он начинается с ключевого слова if. Ключевое слово if сопровождается булевым (логическим) выражением в скобках. Самая простая форма выглядит так:

if (условие) оператор; // если условие истинно, выполняется оператор
Оператор if продолжается фрагментом, который берется в фигурные скобки {}{блок операторов}. Важно: в нашем случае мы используем два условных оператора: не забывай про оператор && — И, наше дополнительное условие с подсчетом очков славы.

Домашнее задание №2

  • Продолжаем диалог. Вывести сообщение "Asta la vista, baby!" если пользователь ввел команду "/bye'";
  • Отобразить сообщение: "Ваше любимое животное?" с двумя кнопками: "Кот" и "Собака";
  • При нажатии пользователем кнопки "Кот", вывести на экран картинку step_4_pic;
  • При нажатии пользователем кнопки "Собака", вывести на экран картинку step_6_pic;

Подсказка к выполнению задания №2

У каждой открывающей скобки или кавычки: (, {, ", должна быть закрывающая скобка или кавычка: ), }, ". Будь внимателен и не перепутай эти пары знаков, когда будешь писать код для обработки сообщений в боте. Конспект к занятиям на Java-марафоне - 2

Конспект к занятию №3

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

Добавление кнопок к боту

Текст с подсказками, который нужно написать на кнопках в твоей чатбот-игре, уже подготовлен. Найти его ты можешь в папке с проектом — в файле buttons.txt: Конспект к занятиям на Java-марафоне - 3
  • getCallbackQueryButtonKey — метод, который мы используем для проверки, была ли нажата какая-либо из кнопок.
  • Map.of() — карта со значениями кнопок, которые выводятся для пользователя вместе с определенным сообщением.
  • k (key) — значение кнопки.
  • v (value) — идентификатор кнопки (для удобства (читаемости) используем номер шага, на котором мы находимся в чатбот-игре).

Тестируем все изменения в программе

Все изменения вноси шаг за шагом. Редактируешь одну часть кода — примени эти изменения (зеленая стрелочка в нижней горизонтальной панели), и убедись, что твоя программа работает: проверь, как все выглядит в Телеграм-боте после твоих действий в редакторе кода.

Домашнее задание №3

  • Дописать диалог с Котом, используя текст для шагов (степов) из класса TelegramBotContent.
  • Используй тексты для кнопок, которые содержатся в файле buttons.txt.

Подсказка к выполнению задания №3

Обрати внимание: начиная со второго шага мы проверяем не только то, была ли нажата кнопка, но и КОЛИЧЕСТВО СЛАВЫ, которая есть у Кота на данный момент. Сначала она равна 0. С выполнением каждого шага Кот получает дополнительное количество славы (+20, 30...). Количество славы — важное условие, которое помогает нам создать правильную последовательность действий в чатбот-игре — без повторения шагов. Важно! На последнем шаге также обязательно нужно добавить addGlories, иначе мы сможем нажимать на последнюю кнопку "Выйти во двор" бесконечно, и сообщение в чатбот-игре будет дублироваться.

Конспект к занятию №4

На завершающем этапе будем добавлять изображения к ответам для нашего пользователя и таким образом сделаем его более интересным. А еще — займемся рефакторингом кода!

Добавление изображений к сообщениям в боте

Все необходимые тебе изображения находятся в папке resources/images: Конспект к занятиям на Java-марафоне - 4 PhotoMessage — нужный нам метод для добавления изображений. Он принимает 2 значения:
  • chatId (идентификатор пользователя)
  • name: название изображения, которое мы хотим использовать
executeAsync – метод для отправки объекта (изображения) пользователю.

Домашнее задание №4

  • Отобразить количество очков славы, если пользователь ввел команду /glory. Используйте метод getUserGlory()
  • Поменяйте финальную картинку игры. Используйте метод sendPhotoMessageAsync.

Рефакторинг кода твоей программы

Рефакторинг (от англ. refactoring) — изменение внутренней структуры программы, которое не влияет на ее внешнее поведение. По сути это упрощение и улучшение кода, который уже существует, чтобы придать ему более компактный и читабельный вид, повысить производительность и избежать ошибок в коде в будущем. Твое задание — написать универсальный метод sendMessage(), который будет отправлять сообщение для пользователя. Поскольку наши сообщения имеют постоянные компоненты, будет удобно иметь именно такой шаблон.

Несколько важных определений с занятия:

  • private — означает приватный метод, который используется только в нашем классе.
  • void – значение, которое указывает на то, что метод ничего не возвращает.
  • sendMessage() — собственно, название твоего метода, который отправляет сообщение для пользователя. В скобках () тебе нужно прописать все те параметры, которые нам нужны, чтобы реализовать правильную логику для пользователя.

Сохраняем результат в переменную

Вот небольшое объяснение того, как сохранить результат в переменную, как это делал ментор на занятии: Конспект к занятиям на Java-марафоне - 5Ты можешь это сделать двумя способами:
  • после набора команды, например, createMessage(chatId, text, buttons), нажать ctrl+alt+v (Windows)
  • после набора команды, например, createMessage(chatId, text, buttons), набрать ".var" (без кавычек) и нажать Enter
Далее будет предложено ввести имя переменной, в которую нужно сохранить результат работы команды.
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Filyaig Уровень 7
17 апреля 2024
Кайфовый марафон, интересно, не муторно, справляюсь с заданиями за 30-120 минут.
S(Anonymous #3313184) Уровень 15
16 апреля 2024
Я выполняю все задания )