> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cakestudio.fun/llms.txt
> Use this file to discover all available pages before exploring further.

# AucSocial

> Интеграция CakeAuction с Discord и Telegram: управление лотами, перевыставление, история продаж и покупок, статистика и уведомления.

Аддон `AucSocial` обеспечивает полноценную интеграцию CakeAuction с Discord и Telegram. Поддерживает просмотр активных и истёкших лотов, отмену, безопасное перевыставление истёкших лотов, раздельную историю продаж и покупок, подробную статистику заработка и трат, балансы, глобальные вебхуки и защищённую панель администратора.

## Требования

* Paper 1.16.5+ (или совместимые форки Paper)
* CakeAuction 2.0.0+
* Java 17+
* MySQL 5.7+ или MariaDB 10.3+

## Режимы работы

Аддон поддерживает два режима (`mode` в `config.yml`):

* `LOCAL` — боты Discord (JDA 5) и Telegram запускаются внутри процесса сервера Minecraft. Оптимально для одиночных серверов.
* `REMOTE` — боты запускаются в независимом фоновом демоне `AucSocial-Standalone.jar` (на отдельном VPS). Серверы Minecraft связываются с ним по защищённому протоколу WebSocket RPC (WSS/TLS). Оптимально для мультисерверных сетей (BungeeCord / Velocity).

```text theme={null}
Архитектура режима REMOTE:
[Сервер Anarchy 1] ──(WSS/TLS)──┐
[Сервер Anarchy 2] ──(WSS/TLS)──┼──> [AucSocial Standalone] <──> Discord / Telegram
[Сервер Anarchy N] ──(WSS/TLS)──┘           │
      │                                     │
      └──────────── Общая MySQL ────────────┘
```

## Безопасность REMOTE (WSS / TLS)

> \[!IMPORTANT]
> В производственной среде (Production) при передаче данных через публичную сеть Интернет **категорически запрещено** использовать незашифрованный транспорт `ws://`. Передача токена авторизации и RPC-пакетов должна быть защищена протоколом **WSS (TLS 1.2+)**.

### Рекомендуемая схема: Reverse Proxy с TLS-терминацией (Nginx)

На хосте со `Standalone Daemon` настраивается Nginx c сертификатом Let's Encrypt (Certbot):

```nginx theme={null}
server {
    server_name auction-bot.yourdomain.com;
    listen 443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/auction-bot.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auction-bot.yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location /aucsocial {
        proxy_pass http://127.0.0.1:8085;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
    }
}
```

В конфигурации `config.yml` игровых серверов Minecraft указывается защищенный URL:

```yaml theme={null}
remote:
  ws-url: "wss://auction-bot.yourdomain.com/aucsocial"
  auth-token: "ваш_сложный_криптографический_токен"
  heartbeat-interval-seconds: 30
```

## Установка

### Режим LOCAL

1. Поместите `AucSocial-1.0.0.jar` в `plugins/CakeAuction/addons/`.
2. Запустите сервер для генерации `config.yml`.
3. Укажите параметры подключения к MySQL, токен бота Discord и/или Telegram.
4. Перезапустите сервер или перезагрузите аддон.

### Режим REMOTE

1. **Серверы Minecraft:**
   * Установите `AucSocial-1.0.0.jar` на каждый сервер сети в папку аддонов.
   * В `config.yml` установите `mode: "REMOTE"`.
   * Настройте `remote.ws-url` на ваш WSS адрес и укажите `auth-token`.
   * Укажите единую для всей сети базу данных MySQL.

2. **Standalone Daemon:**
   * Загрузите `AucSocial-Standalone-1.0.0.jar` на VPS.
   * Настройте `standalone-config.yml` (порт WebSocket, секретный токен, токены ботов, MySQL).
   * Запустите процесс через systemd или screen/tmux:
     ```bash theme={null}
     java -jar AucSocial-Standalone-1.0.0.jar
     ```

### Правила и инварианты привязки аккаунтов

* 1 Minecraft UUID привязывается максимум к 1 профилю Discord и 1 профилю Telegram.
* 1 профиль соцсети может содержать несколько привязанных Minecraft-аккаунтов (лимит задаётся `max-links-per-platform`).
* Одноразовый код действителен ограниченное время (`code-ttl-seconds`).
* Отвязка на одной платформе независима и не затрагивает другие соцсети.

## Команды плагина

| Команда                                   | Описание                                                                           |
| :---------------------------------------- | :--------------------------------------------------------------------------------- |
| `/social link`                            | Генерирует одноразовый криптографический код привязки с кликабельным копированием. |
| `/social unlink [discord\|telegram\|all]` | Отвязывает аккаунты соцсетей от текущего игрока.                                   |
| `/social status`                          | Показывает текущие привязанные социальные профили.                                 |

## Команды и интерфейс ботов

| Команда / Действие          | Описание                                                                                                                        |
| :-------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| `/link <code>`              | Привязать аккаунт Minecraft по сгенерированному коду.                                                                           |
| `/unlink`                   | Отвязать аккаунты от текущего профиля соцсети.                                                                                  |
| `/account`                  | Просмотреть статус профиля, привязанные ники и количество лотов.                                                                |
| `/lots [страница]`          | Активные лоты игрока с кнопками быстрой отмены.                                                                                 |
| `/expired [страница]`       | Истёкшие лоты с возможностью удалённого перевыставления.                                                                        |
| `/history [страница] [тип]` | Раздельный просмотр истории: продажи (`sales`) и покупки (`purchases`) с удобными кнопками-переключателями.                     |
| `/stats`                    | Подробная статистика: раздельный заработок от продаж и траты на покупки (за сегодня, 7 и 30 дней), количество сделок и балансы. |
| `/admin`                    | Защищённая панель администратора: статус ботов, подключенные серверы, тест уведомлений и постраничный журнал аудита.            |

## Поддерживаемые плейсхолдеры

| Плейсхолдер         | Контекст              | Описание                                   |
| :------------------ | :-------------------- | :----------------------------------------- |
| `{player}`          | Все интерфейсы        | Имя игрока                                 |
| `{player_uuid}`     | Все интерфейсы        | UUID игрока                                |
| `{code}`            | Привязка              | Сгенерированный код верификации            |
| `{expires_in}`      | Привязка              | Время жизни кода (например, `5 мин.`)      |
| `{max_links}`       | Привязка              | Максимальный лимит привязанных аккаунтов   |
| `{item}`            | Лоты, уведомления     | Отображаемое имя предмета                  |
| `{amount}`          | Лоты, уведомления     | Количество предметов в пачке               |
| `{price}`           | Лоты, уведомления     | Цена лота (отформатированное число)        |
| `{currency}`        | Лоты, уведомления     | Идентификатор валюты                       |
| `{server}`          | Лоты, аудит           | Имя исходного сервера                      |
| `{buyer}`           | Уведомления о покупке | Имя покупателя                             |
| `{seller}`          | Уведомления о продаже | Имя продавца                               |
| `{page}`            | Пагинация             | Номер текущей страницы                     |
| `{max_pages}`       | Пагинация             | Общее количество страниц                   |
| `{turnover_today}`  | Статистика            | Заработок на продажах за 24 часа           |
| `{turnover_7d}`     | Статистика            | Заработок на продажах за 7 дней            |
| `{turnover_30d}`    | Статистика            | Заработок на продажах за 30 дней           |
| `{sales_today}`     | Статистика            | Число продаж за 24 часа                    |
| `{sales_7d}`        | Статистика            | Число продаж за 7 дней                     |
| `{sales_30d}`       | Статистика            | Число продаж за 30 дней                    |
| `{spending_today}`  | Статистика            | Траты на покупки за 24 часа                |
| `{spending_7d}`     | Статистика            | Траты на покупки за 7 дней                 |
| `{spending_30d}`    | Статистика            | Траты на покупки за 30 дней                |
| `{purchases_today}` | Статистика            | Число покупок за 24 часа                   |
| `{purchases_7d}`    | Статистика            | Число покупок за 7 дней                    |
| `{purchases_30d}`   | Статистика            | Число покупок за 30 дней                   |
| `{active_lots}`     | Статистика            | Количество активных лотов                  |
| `{expired_lots}`    | Статистика            | Количество истёкших лотов                  |
| `{status}`          | Оповещения            | Текущий статус оповещений (`ВКЛ` / `ВЫКЛ`) |
