JavaRush /Java блог /Java-марафон (Чатбот-гра) /Конспекти до занять на Java-марафоні
Hanna Moruga
41 рівень
Киев

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

Стаття з групи Java-марафон (Чатбот-гра)
Тут ти знайдеш підказки та “шпаргалки” до матеріалу, який проходиш під час занять. Вони будуть корисними для того, щоб успішно впоратися з домашніми завданнями. Пам’ятай: ти завжди можеш знову переглянути відео, почитати конспекти, або звернутися зі своїм запитанням до спільноти та ментора у спеціальному чаті в Телеграмі. Щасти!

Конспект до заняття #1

На цьому занятті ми познайомилися зі структурою нашого проєкту в IntelliJ IDEA, дізналися, як зареєструвати бота в Телеграм, та як написати в ньому перше повідомлення для користувача.

1. Основні поняття мови Java, які тобі буде корисно знати

ООП — об’єктно-орієнтоване програмування. Java – об’єктно-орієнтована мова. Це означає: все, що створюється в програмі, має бути створено у вигляді об’єкту. Програма — це набір (список) команд. Спочатку виконується перша команда, потім друга, третя тощо. Коли всі команди виконані, програма завершується. Програми на мові Java виконує JVM (Java Virtual Machine — віртуальна машина Java). JVM — це спеціальна програма, яка вміє виконувати програми, написані на мові Java.

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

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

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

2. Тези до першого заняття

  • Запускаємо IntelliJ IDEA та відкриваємо завантажений проєкт.
  • src у лівій колонці — це source папка. src → main → java — шлях до коду, з яким ми працюватимемо.
  • Утилітні методи — це допоміжні методи, зазвичай статичні (static), тобто такі, які належать не об’єкту, а класу.
  • Успадкування (наслідування) класів — форма відносин між класами. Клас-спадкоємець використовує методи класу-предка, але не навпаки.
В нашому випадку використовуємо спадкування (наслідування) від класу TelegramLongPollingBot — він має набір методів, які потрібні нам, щоб з’єднатися і працювати з Телеграм-ботом, який ми з вами створимо. Щоб програма могла працювати з нашим ботом, нам потрібно вказати:
  • getBotUsername (ім’я бота)
  • getBotToken (токен бота)

Отримання імені та токену бота, реєстрація бота

Відкриваємо Телеграм та через пошук знаходимо BotFather. У відкритому з ним діалозі пишемо: /newbot — команда для створення нового бота. Після створення потрібно обрати унікальний username (ім’я) — обов’язково має закінчуватися на _bot.

Утилітні методи, які ми будемо використовувати

Нагадуємо, утилітні методи — готові методи, написані іншими програмістами, які допомагають нам писати код нашої програми. onUpdateReceived — метод, що опрацьовуватиме всі повідомлення, які вводитимуть користувачі нашого боту. Ми будемо їх отримувати і писати логіку відповідно до того, що нам потрібно. createMessage — метод для створення повідомлення. Першим параметром він приймає за значення chatId — ідентифікатор чату, який розпочав користувач. Другим приймає значення повідомлення, яке виведеться користувачеві. В нашому випадку — “Привіт, майбутній програміст!”. sendApiMethodAsync — метод для відправлення повідомлення.

Домашнє завдання #1

  1. Завантажити проєкт в IntelliJ IDEA.
  2. Створити та зареєструвати нашого бота в Телеграм.
  3. Написати перше повідомлення в боті для користувача.

Підказки до виконання завдання #1

Перевірка коректності коду та оновлення змін в проєкті

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

Важливі принципи форматування коду

  • Не забувай ставити крапку з комою ; в кінці команди, яку ти створюєш
  • У кожної дужки чи лапки, що відкриває: (, {, , має бути дужка чи лапка, що закриває: ), },
  • Якщо твій код підсвічується червоним, це означає, що в ньому є помилка — придивися уважніше
  • Використовуй автоматичні підказки та автодоповнення — це допоможе тобі писати код правильно
  • Пам’ятай про те, що твої назви змінних, методів та класів мають бути читабельними, тобто по назві має бути зрозуміло що вони роблять чи для чого призначені

Конспект до заняття #2

На цьому занятті ми вчилися форматувати текст відповіді бота та почали роботу над розширенням функціоналу для опрацювання додаткових повідомлень. Це допоможе нам проаналізувати запит користувача і надавати відповідне цьому запиту повідомлення.

Форматування тексту

  • Щоб виділити текст курсивом, потрібно на початку і в кінці потрібного фрагменту додати нижні підкреслювання: _текст_
  • Щоб виділити текст жирним, потрібно на початку і в кінці потрібного фрагменту додати зірочки: *текст*

Методи й оператори, які будемо використовувати

  • if — умовний оператор у Java
  • update.hasMessage() — метод, за допомогою якого будемо перевіряти, чи взагалі в нас є нове повідомлення
  • equals — метод, що порівнює вміст повідомлення з конкретним текстом. Щоб умова була true, вміст має бути повністю ідентичним (що передано в метод equals — те й, слово в слово, в запиті/повідомленні)
  • contains — метод, що перевіряє, чи повідомлення містить певне слово/фразу. В нашому випадку — “привіт”

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

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

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

Домашнє завдання #2

Дописати діалог. Після повідомлення “привіт, як тебе звуть?” якщо користувач відправить повідомлення: “мене звуть [твоє ім’я]” (тобто повідомлення, яке містить фразу “мене звуть”). У відповіді маємо відправити користувачеві: “Радий знайомству, я – Кіт”, де Кіт виділено жирним.

Підказка до виконання завдання #2

У кожної дужки чи лапки, що відкриває: (, {, , має бути дужка чи лапка, що закриває: ), }, . Прояви пильність і не розгуби ці пари знаків, коли писатимеш код для опрацювання повідомлень у боті: Конспекти до занять на Java-марафоні - 2

Конспект до заняття #3

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

Додавання кнопок до бота

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

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

Усі зміни внось крок за кроком. Редагуєш одну частинку коду — застосуй ці зміни (зелена стрілочка в нижній горизонтальній панелі), та переконайся, що твоя програма працює: перевір, як усе виглядає в Телеграм-боті після твоїх дій у редакторі коду.

Домашнє завдання #3

  1. Дописати діалог з Котом, використовуючи текст для кроків (степів) з класу TelegramBotContent.
  2. Використовуй тексти для кнопок, які містяться у файлі buttons.txt.

Підказка до виконання завдання #3

Зверни увагу: починаючи з другого кроку ми перевіряємо не лише те, чи була натиснута кнопка, а й КІЛЬКІСТЬ СЛАВИ, яка є в Кота на цей момент. Спочатку вона дорівнює 0. Із виконанням кожного кроку Кіт отримує додаткову кількість слави (+20, 30…). Кількість слави — важлива умова, яка допомагає нам створити правильну послідовність дій у чатбот-грі — без повторів кроків. Важливо! На останньому кроці також обов’язково потрібно додати addGlories, інакше ми зможемо натискати на останню кнопку “Вийти на подвір’я” безкінечно, і повідомлення у чатбот-грі буде дублюватися.

Конспект до заняття #4

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

Додавання зображень до повідомлень у боті

Усі потрібні тобі зображення знаходяться в папці images: Конспекти до занять на Java-марафоні - 4createPhotoMessage — потрібний нам метод для додавання зображень. Він приймає 2 значення:
  • chatId (ідентифікатор користувача)
  • name: назва зображення, яке ми хочемо використати
executeAsync – метод для відправлення об’єкту (зображення) користувачеві.

Рефакторинг коду твоєї програми

Рефакторинг (від англ. refactoring) — зміна внутрішньої структури програми, яка не впливає на її зовнішню поведінку. По суті це спрощення та покращення коду, який вже існує, щоб надати йому більш компактного та чибательного вигляду, підвищити продуктивність та уникнути помилок в коді у майбутньому. Твоє завдання — написати універсальний метод sendMessage(), який надсилатиме повідомлення для користувача. Оскільки наші повідомлення мають сталі компоненти, буде зручно мати саме такий шаблон. Кілька важливих визначень із заняття:
  • private — означає приватний метод, який використовується лише в нашому класі
  • void – значення, яке вказує на те, що метод нам нічого не повертає
sendMessage() — власне, назва твого методу, який надсилає повідомлення для користувача. В дужках () тобі потрібно прописати всі ті параметри, які нам потрібні, щоб реалізувати правильну логіку для користувача.

Зберігаємо результат до змінної

Ось невелике пояснення до того, як зберегти результат до змінної, як це робив ментор на занятті: Конспекти до занять на Java-марафоні - 5Ти можеш це зробити двома способами:
  • після набору команди, наприклад, createMessage(chatId, text, buttons), натиснути ctrl+alt+v (Windows)
  • після набору команди, наприклад, createMessage(chatId, text, buttons), набрати ".var" (без лапок) і натиснути Enter
Далі буде запропоновано ввести ім'я змінної, до якої потрібно зберегти результат роботи команди.

Домашнє завдання #4

Зробити рефакторинг коду, використовуючи приватний метод sendMessage для всіх кроків бот-гри:
  • повторити рефакторинг коду з заняття
  • самостійно відрефакторити код для кроків 6-8
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ