В последние годы популярность онлайн‑гаданий растёт, а Telegram‑боты становятся удобным способом получить быстрый и точный расклад Таро, не выходя из мессенджера. В этой статье мы подробно разберём, как создать собственного бота, который будет выполнять расклад на человека (т. н. «person‑spread») и предоставлять интерпретацию карт.
Содержание
- Что такое расклад на человека?
- Почему именно Telegram‑бот?
- Ключевые функции готового проекта
taro-telegram-bot - Технический стек и архитектура
- Пошаговая настройка и запуск
- Работа с изображениями и толкованиями карт
- Примеры раскладов на человека
- Кодовые фрагменты: обработка запросов и генерация ответа
- Развёртывание в продакшн
- Идеи для дальнейшего развития
Что такое расклад на человека?
Расклад «на человека» – это набор из 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
- Откройте чат с BotFather.
- Отправьте команду
/newbotи следуйте инструкциям. - Сохраните полученный токен – он понадобится в
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️⃣ Внешнее влияние – Колесо Фортуны (прямое)
Удача, перемены, открытость к новому.
🗓 Дата: 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‑файла с толкованиями вы получаете полностью рабочее решение за несколько часов.
Следуя описанным в статье шагам, вы сможете:
- Запустить собственного бота в локальном режиме.
- Развернуть его в облаке и предоставить доступ тысячам пользователей.
- Расширять функционал, добавляя новые расклады и интерактивные элементы.
Удачной разработки и ярких, вдохновляющих раскладов! ✨