Взаимодействие с Telegram API - Space-Lords-TG/docs GitHub Wiki

Как обрабатываются входящие сообщения

Бот получает сообщения от пользователей через Polling – это метод регулярного опроса серверов Telegram API для получения обновлений.

  1. Пользователь отправляет сообщение боту.
  2. Telegram API принимает сообщение и сохраняет его в своей системе.
  3. Бот с помощью Polling запрашивает у Telegram API новые сообщения (update).
  4. Dispatcher Aiogram анализирует входящее сообщение, сравнивает его с заданными обработчиками (команды, текст и т.д.).
  5. Вызывается нужный обработчик, который выполняет соответствующее действие:
    • Отвечает пользователю.
    • Записывает данные в базу.
    • Отправляет кнопки и меню.

API для взаимодействия пользователя с ботом

Контекстные кнопки и их назначение

Кнопка Назначение Где используется
Назад Возвращает на предыдущий экран Везде
Результат боя Показывает итоги боя Арена, Битвы
Выйти из очереди Отменяет участие в поиске боя Арена
Встать в очередь Добавляет игрока в список ожидающих бой Арена
Ремонт Начинает процесс починки корабля Меню корабля, После боя
Оружие Меню управления оружием на корабле Меню корабля
Корпус Меню управления корпусом корабля Меню корабля
Заменить Подтверждение выбора нового оружия или корпуса Замена оборудования
Улучшить Улучшает выбранное оборудование Оружие, Корпус
В путь! Подтверждает перемещение к планете Карта, Перемещение
Сектора Отображает список доступных секторов Карта, Перемещение
К %ПЛАНЕТЕ% Возвращает игрока к захваченной планете После боя
Построить аванпост Создает базу на свободной планете Планета
Собрать ресурсы Забирает накопленные ресурсы с планеты Планета
Захватить планету (бой) Начинает сражение за планету Планета
Просмотр планеты Показывает детали планеты Главный экран
Альфа 1, Альфа 2 и т. д. Позволяет выбрать конкретную планету для перемещения Карта
Абоба, Амогус, Чебупель и т. д. Позволяет выбрать конкретную систему для перемещения Карта

Команды для взаимодействия с ботом

Команда Описание Соответствующая кнопка
/start Запуск бота, начало игры -
/profile Просмотр информации о пользователе -
/ship Управление кораблем (просмотр, настройка) Оружие, Корпус, Ремонт
/repair Починка корабля Ремонт
/weapon Меню управления оружием Оружие
/hull Меню управления корпусом Корпус
/replace Замена оборудования (оружия, корпуса) Заменить
/upgrade Улучшение оборудования (оружие, корпус) Улучшить
/attack Вступить в бой (арена) Встать в очередь
/leave_queue Выйти из очереди на бой Выйти из очереди
/battle_result Просмотр результата боя Результат боя
/explore Исследование галактики (перемещение) Альфа 1, Альфа 2, Абоба и т. д.
/travel Перемещение к выбранной планете В путь!
/sectors Просмотр доступных секторов Сектора
/capture Захват планеты (начало боя за планету) Захватить планету (бой)
/planet_info Просмотр информации о планете Просмотр планеты
/build_outpost Постройка аванпоста на свободной планете Построить аванпост
/collect_resources Сбор ресурсов с планеты Собрать ресурсы
/return_to_planet Возвращение к захваченной планете К %ПЛАНЕТЕ%
/inventory Просмотр инвентаря и ресурсов -
/leaderboard Таблица лидеров -
/help Список доступных команд -

Методы Telegram Bot API

Методы Telegram Bot API
getUpdates
getChat
getMe
sendMessage
sendPhoto
sendDocument
sendChatAction
sendSticker
editMessageText
editMessageReplyMarkup
deleteMessage
answerCallbackQuery
sendDice
getChatMember
banChatMember

Получение сообщений

  • getUpdates - Получение входящих сообщений
    • использует Polling для обработки сообщений
    • позволяет запрашивать новые сообщения от пользователей и передавать их в диспетчер
  • getChat – Получение информации о пользователе или группе
    • позволяет определить, с кем взаимодействует бот
    • используется для проверки информации о пользователе или группе
  • getMe – Получение информации о боте
    • можно использовать при инициализации бота или отладке

Взаимодействие с игроками (отправка сообщений)

  • sendMessage – Отправка текстовых сообщений
    • основной метод общения с игроком
    • используется для отправки логов боя, информации о корабле, статусе планет и других игровых событий
    • применяется для отправки игровых уведомлений
  • sendPhoto – Отправка изображений
    • используется для отображения карты, кораблей, планет
    • помогает визуализировать игровые элементы
  • sendDocument – Отправка файлов
    • позволяет отправлять игровые логи
    • может использоваться для передачи текстовых данных, например, статистики боя или истории сражений
    • пригодится для выгрузки игровых отчетов (например, список захваченных планет)
  • sendChatAction – Показывает статус "бот печатает..." перед ответом
    • используется при обработке длительных операций
    • помогает избежать ощущения "зависшего" бота при загрузке данных
  • sendSticker – Отправка стикеров (+-)
    • можно использовать для поздравлений

Изменение и управление сообщениями

  • editMessageText – Обновление текста сообщений
    • изменение статуса боя, обновление информации о планете, обновление карты
  • editMessageReplyMarkup – Обновление inline-кнопок в уже отправленном сообщении
    • обновление inline-кнопок в бою (например, после атаки кнопка "Атаковать" меняется на "Ожидание")
    • изменение доступных действий на планете (например, если планета уже захвачена)
    • обновление доступных опций в меню корабля (замена, улучшение, ремонт)
  • deleteMessage – Удаление сообщений
    • удаление устаревших сообщений, чтобы избежать загромождения чата

Работа с inline-кнопками

  • sendMessage + reply_markup – Отправка сообщений с inline-кнопками
    • позволяет прикрепить inline-кнопки к сообщению
    • используется для интерактивного взаимодействия с игроками
  • answerCallbackQuery – Ответ на нажатие inline-кнопки
    • позволяет реагировать на нажатие inline-кнопки без отправки нового сообщения
    • в бою: обработка выбора атаки ("Вы атаковали противника!")
    • в магазине: покупка модулей для корабля ("Вы купили новую пушку!")
    • в перемещении: подтверждение маршрута ("Вы отправились в путь!")

Перемещение по карте

  • editMessageText – Обновление карты при перемещении игрока
    • обновление положения корабля на карте
    • изменение доступных маршрутов при перемещении
  • sendPhoto – Отображение карты в виде изображения
    • отправка изображения карты с отметками планет и систем
    • отображение космических объектов (планеты, астероиды, базы)

Боевая система

  • sendMessage – Отправка логов боя
    • отправка подробных логов сражений в текстовом формате
  • editMessageText – Обновление информации о ходе боя
    • обновление статистики боя в реальном времени
    • обновление состояния HP кораблей
  • sendDice – Использование случайных чисел
    • реализация случайных значений (например, крит. удары, уклонение)
  • answerCallbackQuery – Реакция на кнопки боя
    • обработка выбора игрока во время боя ("Вы нанесли 200 урона!")

Управление планетами

  • sendMessage – Отправка информации о планете
    • показать ресурсы планеты, владельца, уровень
    • "Ресурсы: Металл (500), Кристаллы (200)"
  • editMessageText – Обновление информации о планете
    • изменение владельца планеты после боя ("Планета теперь принадлежит вам!")
    • обновление добычи ресурсов и уровня планеты

Экономика и крафт

  • sendMessage – Сообщение об улучшении корабля
    • уведомление об успешном улучшении корабля ("Защита +20")
  • editMessageText – Обновление инвентаря
    • обновление списка модулей и их характеристик ("Ваш новый корпус установлен!")
  • answerCallbackQuery – Реакция на выбор улучшений
    • подтверждение выбора игрока в крафте ("Вы улучшили двигатель! Скорость +50%")

Лидерборды и статистика

  • sendMessage – Отправка рейтингов игроков
    • отображение списка лучших игроков
  • editMessageText – Обновление списка лидеров
    • динамическое обновление рейтинга без отправки новых сообщений

Администрирование

  • getChatMember – Получение информации о пользователе
    • проверка статуса игрока (админ, пользователь)
  • banChatMember – Блокировка игрока
    • использование в админ-панели для управления пользователями

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

Выбор через кнопки (Inline-клавиатура)

  1. Бот выводит список кораблей с inline-кнопками.
  2. Игрок нажимает на кнопку с названием корабля.
  3. Бот активирует корабль и отправляет подтверждение.