Создание Telegram‑бота для расклада Таро на человека

В последние годы популярность онлайн‑гаданий растёт, а Telegram‑боты становятся удобным способом получить быстрый и точный расклад Таро, не выходя из мессенджера. В этой статье мы подробно разберём, как создать собственного бота, который будет выполнять расклад на человека (т. н. «person‑spread») и предоставлять интерпретацию карт.


Содержание

  1. Что такое расклад на человека?
  2. Почему именно Telegram‑бот?
  3. Ключевые функции готового проекта taro-telegram-bot
  4. Технический стек и архитектура
  5. Пошаговая настройка и запуск
  6. Работа с изображениями и толкованиями карт
  7. Примеры раскладов на человека
  8. Кодовые фрагменты: обработка запросов и генерация ответа
  9. Развёртывание в продакшн
  10. Идеи для дальнейшего развития

Что такое расклад на человека?

Расклад «на человека» – это набор из 3‑5 карт, каждая из которых отвечает за определённый аспект личности или отношений с конкретным человеком:

  • Карта 1 – Суть/Характеристика: как выглядит человек в целом.
  • Карта 2 – Внутренний мир: желания, страхи, скрытые мотивы.
  • Карта 3 – Внешнее влияние: как человек взаимодействует с окружающими.
  • Карта 4 – Перспектива развития (по желанию): куда движется человек.

Такой расклад позволяет быстро получить представление о человеке, с которым пользователь хочет разобраться.


Почему именно Telegram‑бот?

Telegram предоставляет удобный API, позволяющий реализовать интерактивный диалог без необходимости разрабатывать отдельный веб‑интерфейс. Преимущества:

  • Мгновенный доступ через мобильные и десктоп‑клиенты.
  • Поддержка инлайн‑кнопок и клавиатур – пользователь выбирает тип расклада одним нажатием.
  • Встроенная поддержка отправки изображений (карты Таро) и форматированного текста.
  • Низкая стоимость хостинга (можно разместить на Heroku, Railway, Render, VPS).

Ключевые функции готового проекта taro-telegram-bot

Согласно репозиторию taro-telegram-bot (2025‑2026 годы) уже реализовано:

  • Базовый набор карт Таро (78 шт.) с изображениями в resources/images.
  • Текстовые толкования (по карте, позиции расклада) в виде JSON‑файла.
  • Обработчик команд /start, /help, /person (расклад на человека).
  • Поддержка Spring Boot – быстрый запуск и удобное управление зависимостями.
  • Локальная база данных (H2) для хранения истории запросов.

Эти функции станут отличной отправной точкой для собственного проекта.


Технический стек и архитектура

Компонент Технология Назначение
Язык программирования Java 17 Основная логика бота
Фреймворк Spring Boot 3.x Упрощённый запуск, DI, REST‑контроллеры
Telegram Bot API org.telegram:telegrambots-spring-boot-starter Обёртка над Bot API
Хранение данных H2 (встроенная) / PostgreSQL (по желанию) История раскладов, пользовательские настройки
Конфигурация application.yml Токен бота, параметры логирования
Контейнеризация Docker Упрощённый деплой

Архитектура построена по принципу слоистой структуры:

  • Controller – получает сообщения от Telegram и передаёт их в сервисный слой.
  • Service – бизнес‑логика: выбор карт, формирование текста, запись в БД.
  • Repository – работа с базой данных.
  • Util – вспомогательные классы (shuffle, random, markdown‑formatter).

Пошаговая настройка и запуск

Регистрация бота в Telegram

  1. Откройте чат с BotFather.
  2. Отправьте команду /newbot и следуйте инструкциям.
  3. Сохраните полученный токен – он понадобится в application.yml.

Клонирование репозитория

git clone https://github.com/devmarkru/devmark-ru-bot.git
cd devmark-ru-bot

Добавление конфигурации

Создайте файл src/main/resources/application.yml со следующим содержимым:

telegram:
 bot:
 token: "YOUR_TELEGRAM_BOT_TOKEN"
 username: "YourBotUserName"

spring:
 datasource:
 url: jdbc:h2:file:./data/tarodb
 driver-class-name: org.h2.Driver
 username: sa
 password:
 jpa:
 hibernate:
 ddl-auto: update
 show-sql: true

Сборка проекта

./mvnw clean package

Запуск локально

java -jar target/taro-telegram-bot-0.0.1-SNAPSHOT.jar

Бот будет слушать сообщения и отвечать на команду /person.


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

Изображения

В репозитории находятся файлы src/main/resources/images/{card_name}.png. Для каждой из 78 карт создайте PNG‑файл размером 300×500 px (оптимально для мобильных устройств).

Текстовые толкования

Файл cards.json имеет структуру:

{
 "The Fool": {
 "upright": "Новые начинания, свобода, спонтанность.",
 "reversed": "Необдуманные действия, риск."
 },
 "The Magician": {
 "upright": "Воля, мастерство, действие.",
 "reversed": "Обман, отсутствие ресурсов."
 }
 // … остальные карты
}

Для каждой позиции расклада (Суть, Внутренний мир, Внешнее влияние, Перспектива) хранится отдельный шаблон:

{
 "positions": {
 "SITUATION": "Карта описывает общую характеристику человека.",
 "INNER": "Карта раскрывает внутренние желания и страхи.",
 "EXTERNAL": "Карта показывает, как человек взаимодействует с миром.",
 "FUTURE": "Карта предсказывает развитие отношений."
 }
}

Подключение в коде

Класс CardRepository читает JSON‑файлы в момент старта и кэширует их в Map. При запросе карты бот получает CardInfo и формирует ответ.


Примеры раскладов на человека

3‑карточный базовый расклад

Позиция Значение
1️⃣ Суть (Карта 1) Общее описание характера.
2️⃣ Внутренний мир (Карта 2) Эмоциональная и ментальная составляющая.
3️⃣ Внешнее влияние (Карта 3) Как человек проявляется в обществе.

5‑карточный «Глубокий» расклад

  1. Суть – что человек представляет собой в основе.
  2. Мотивация – что движет им сейчас.
  3. Препятствия – какие внутренние барьеры мешают.
  4. Внешнее влияние – как окружающие влияют на него.
  5. Перспектива – куда ведёт текущий путь.

Как бот выводит результат

Пример сообщения от бота:

🔮 Расклад на человека

1️⃣ Суть – Влюблённые (прямое положение)
 Любовь, выбор, гармония в отношениях.

2️⃣ Внутренний мир – Отшельник (перевернутое)
 Страх одиночества, скрытая тревога.

3️⃣ Внешнее влияние – Колесо Фортуны (прямое)
 Удача, перемены, открытость к новому.

🗓 Дата: 04:14

Кодовые фрагменты: обработка запросов и генерация ответа

Контроллер

package com.example.tarobot.controller;

import com.example.tarobot.service.TarotService;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.springframework.stereotype.Component;

@Component
public class BotController extends TelegramLongPollingBot {

 private final TarotService tarotService;

 public BotController(TarotService tarotService) {
 this.tarotService = tarotService;
 }

 @Override
 public void onUpdateReceived(Update update) {
 if (update.hasMessage && update.getMessage.hasText) {
 String text = update.getMessage.getText;
 long chatId = update.getMessage.getChatId;

 if (text.startsWith("/person")) {

 String reply = tarotService.performPersonSpread;
 executeMessage(chatId, reply);
 } else if (text.equals("/start")) {
 executeMessage(chatId, "Привет! Я бот‑Таро. Напиши /person, чтобы получить расклад на человека.");
 }
 }
 }

 private void executeMessage(long chatId, String text) {
 SendMessage message = SendMessage.builder
 .chatId(String.valueOf(chatId))
 .text(text) .disableWebPagePreview(true)
 .build;
 try {
 execute(message);
 } catch (Exception e) {
 // логируем ошибку
 }
 }

 @Override
 public String getBotUsername { return "${telegram.bot.username}"; }

 @Override
 public String getBotToken { return "${telegram.bot.token}"; }
}

Сервисный слой

package com.example.tarobot.service;

import com.example.tarobot.model.Card;
import com.example.tarobot.repository.CardRepository;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Random;

@Service
public class TarotService {

 private final CardRepository cardRepo;
 private final Random random = new Random;

 public TarotService(CardRepository cardRepo) {
 this.cardRepo = cardRepo;
 }
 public String performPersonSpread {
 List<Card> deck = cardRepo.getAllCards;
 // простая тасовка
 for (int i = deck.size ⎼ 1; i > 0; i--) {
 int j = random.nextInt(i + 1);
 Card tmp = deck.get(i);
 deck.set(i, deck.get(j));
 deck.set(j, tmp);
 }

 Card c1 = deck.get(0);
 Card c2 = deck.get(1);
 Card c3 = deck.get(2);

 StringBuilder sb = new StringBuilder;
 sb.append("🔮 Расклад на человека

");
 sb.append("1️⃣ Суть – ").append(c1.getName)
 .append(c1.isReversed ? " (перевернутое)" : " (прямое)").append("
")
 .append(c1.getInterpretation).append("

");
 sb.append("2️⃣ Внутренний мир – ").append(c2.getName)
 .append(c2.isReversed ? " (перевернутое)" : " (прямое)").append("
")
 .append(c2.getInterpretation).append("

"); sb.append("3️⃣ Внешнее влияние – ").append(c3.getName)
 .append(c3.isReversed ? " (перевернутое)" : " (прямое)").append("
")
 .append(c3.getInterpretation).append("
");
 sb.append("🗓 Дата: ")
 .append(LocalDateTime.now.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")))
 .append("");
 return sb.toString;
 }
}

Модель карты

package com.example.tarobot.model;

public class Card {
 private String name;
 private boolean reversed;
 private String uprightInterpretation;
 private String reversedInterpretation;
 // getters & setters

 public String getInterpretation {
 return reversed ? reversedInterpretation : uprightInterpretation;
 }
}

Развёртывание в продакшн

Docker‑образ

# Dockerfile
FROM eclipse-temurin:17-jre-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Соберите образ и запустите:

docker build -t tarot-bot:latest .
docker run -d --name tarot-bot -e TZ=Europe/Moscow -p 8080:8080 tarot-bot:latest

Облачные платформы

  • Heroku – бесплатный план, поддержка Docker.
  • Render – автоматический деплой из GitHub.
  • Railway – простая интеграция с PostgreSQL.

Не забудьте задать переменные окружения TELEGRAM_BOT_TOKEN и TELEGRAM_BOT_USERNAME в настройках сервиса.


Идеи для дальнейшего развития

  • Поддержка нескольких раскладов – Кельтский крест, Три карты «Любовь», «Работа», «Здоровье».
  • Персональные профили – хранение любимых карт, истории запросов.
  • Инлайн‑режим – пользователь может вызвать бота прямо в чате, не открывая отдельный диалог.
  • Голосовые подсказки – интеграция с Text‑to‑Speech для аудио‑ответов.
  • Мульти‑язычность – поддержка английского, испанского и других языков.

Создание Telegram‑бота для расклада Таро «на человека» – отличная возможность объединить древнюю мистику и современные технологии. С помощью готового проекта taro-telegram-bot, Spring Boot и простого JSON‑файла с толкованиями вы получаете полностью рабочее решение за несколько часов.

Следуя описанным в статье шагам, вы сможете:

  • Запустить собственного бота в локальном режиме.
  • Развернуть его в облаке и предоставить доступ тысячам пользователей.
  • Расширять функционал, добавляя новые расклады и интерактивные элементы.

Удачной разработки и ярких, вдохновляющих раскладов! ✨