Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🕰️ ClockBot for Telegram

Java 21 Spring Boot Nyagram

Интерактивный Telegram-бот, написанный на Java 21 с использованием фреймворка Nyagram и Spring Boot. Бот позволяет пользователям выбрать свой часовой пояс и генерирует красивую картинку аналоговых часов с актуальным временем «на лету».

✨ Возможности

  • Динамическая генерация изображений: Отрисовка циферблата, стрелок и текста происходит прямо в оперативной памяти (Java 2D API).
  • Интерактивный интерфейс: Удобная пагинация (Paginator) для выбора часового пояса прямо в чате.
  • Редактирование медиа: При нажатии кнопки «Обновить» бот не присылает новое сообщение, а элегантно заменяет саму картинку в уже отправленном сообщении.
  • База данных: Выбранный пользователем часовой пояс сохраняется в In-Memory БД (H2) с помощью Spring Data JPA.

🛠️ Технологический стек

  • Java 21
  • Spring Boot 3.2.x (Data JPA)
  • H2 Database (встроенная БД)
  • Nyagram 1.1.5 (современный реактивный фреймворк для Telegram Bot API)

📦 Установка и запуск

Требования

  • Установленная Java 21 (JDK)
  • Для Linux-серверов без графической оболочки необходимо наличие шрифтов (например, sudo apt-get install fontconfig fonts-dejavu), иначе генерация изображений выдаст java.awt.HeadlessException.

1. Клонирование и настройка

Склонируйте репозиторий и откройте файл src/main/resources/application.yml. Вставьте ваш токен бота и юзернейм, полученные у @BotFather:

nyagram:
  bot-token: "ВАШ_ТОКЕН_ЗДЕСЬ"
  bot-username: "ВашБот"
  mode: POLLING

2. Запуск

Проект использует Gradle Wrapper, поэтому вам не нужно устанавливать Gradle глобально. Откройте терминал в корне проекта и выполните:

Linux / macOS:

./gradlew clean bootRun

Windows:

gradlew.bat clean bootRun

3. Сборка JAR-файла (для продакшена)

Чтобы собрать готовый к деплою архив:

./gradlew clean build
java -jar build/libs/clock-1.0.0.jar

🎮 Команды бота

  • /start — Приветственное сообщение и краткая справка.
  • /time — Показывает текущее время (если пояс установлен, генерирует картинку, иначе открывает меню выбора).
  • /time set — Принудительно открывает меню выбора часового пояса с пагинацией.

📁 Структура проекта

src/main/java/pro/kaleert/challenge/clockbot/
├── ClockBotApplication.java            # Главный класс приложения
├── controller/
│   ├── ClockController.java            # Обработка /time, генерации и инлайн-кнопок
│   └── GeneralController.java          # Обработка /start
├── domain/
│   └── UserTimezone.java               # JPA Сущность для БД
├── repository/
│   └── UserTimezoneRepository.java     # Spring Data репозиторий
└── service/
    └── ClockImageGenerator.java        # Логика рисования часов (Java 2D)

📝 Примечания по разработке

В ClockController реализован кастомный обходной путь для метода editMessageMedia через прямой HTTP-запрос (RestTemplate), чтобы обойти особенность работы с Multipart-файлами в текущей версии фреймворка Nyagram.


Сделано в рамках челенджа по фреймворку Nyagram.

About

Этот бот сделан в рамках челленджа для тикток, где пользователи предлагают свои идеи для телеграм ботов, а я стараюсь их сделать.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages