- Для версий
- 1.7.10
- 1.8.✘
- 1.9.✘
- 1.10.✘
- 1.11.✘
- 1.12.✘
- 1.13.✘
- 1.14.✘
- 1.15.✘
- 1.16.✘
- 1.17.✘
- 1.18.✘
- 1.19.✘
- 1.20.✘
- 1.21.✘
- 26.✘
Discord AI Tickets Bot - Описание и документация
📹 Видео демонстрация
Что есть в боте:
- Базовая функциональность (Discord.js + TypeScript)- Интеграция с Discord API
- Система тикетов и модальных окон
- Управление каналами и ролями
- ИИ-интеграция (OpenRouter)
- Интеграция с OpenRouter API
- Промпт-инжиниринг для модерации
- Последовательная система вопросов
- База данных (Sequelize)
- Модели данных
- Миграции и синхронизация
- Хранение заявок и вердиктов
- RCON интеграция
- Подключение к Minecraft серверу
- Автоматическое добавление в вайтлист
- Дополнительные функции
- Система лимитов и кулдаунов
- Статистика и логирование
- Кнопки управления в логах
- Отправка ЛС с embed
- Тестирование и отладка
- Проверка всех сценариев
- Обработка ошибок
- Оптимизация производительности
---
🚀 Функционал бота
1. Система заявок- Модальное окно с настраиваемыми полями (до 5 полей)
- Автоматическое создание приватных тикет-каналов
- Сохранение всех данных в базе данных
2. ИИ-модерация через OpenRouter
- Автоматическая проверка заявок
- Последовательные дополнительные вопросы
- Автоматический вердикт (одобрение/отклонение)
- Индикатор печати при обработке
3. Управление вердиктами
- Автоматическое выполнение действий при вердикте:
- Выдача роли при одобрении
- Добавление в вайтлист через RCON
- Отправка ЛС пользователю с embed
- Возможность изменения вердикта модераторами
- Кнопки управления в тикете и логах
4. Система ограничений
- Максимальное количество заявок от одного пользователя
- Кулдаун между заявками
- Настраиваемые лимиты
5. RCON интеграция
- Автоматическое добавление в вайтлист Minecraft сервера
- Ручное добавление через команду
/whitelist- Настраиваемая команда вайтлиста
6. Статистика и логирование
- Команда
/stats для просмотра статистики- Логирование всех заявок в отдельный канал
- Кнопки изменения вердикта прямо в логах
7. Удобство для пользователей
- Автоматическая смена никнейма на ник из Minecraft
- Кнопки после вердикта (есть вопросы / закрыть тикет)
- Красивые embed-сообщения
---
⚙️ Конфигурация
JSON:
{
"applicationChannelId": "1394666278123208724",
"ticketCategoryId": "1371353890112667711",
"staffRoleIds": ["1394660120830672997", "1394660195476705402"],
"acceptedRoleId": "1394660239550451885",
"logChannelId": "1371353890112667712",
"nicknameFieldId": "minecraftNick",
"maxApplications": 3,
"cooldownSeconds": 3600,
"rcon": {
"enabled": true,
"host": "localhost",
"port": 25575,
"password": "your_secure_password",
"whitelistCommand": "whitelist add"
},
"formFields": [
{
"id": "minecraftNick",
"label": "Твой ник в Minecraft",
"placeholder": "Например: Steve228",
"style": "short",
"required": true,
"maxLength": 32
},
{
"id": "age",
"label": "Сколько тебе лет?",
"placeholder": "Например: 16",
"style": "short",
"required": true,
"maxLength": 10
},
{
"id": "experience",
"label": "Твой опыт игры в Minecraft",
"placeholder": "Как давно играешь, какие режимы любишь?",
"style": "paragraph",
"required": true,
"maxLength": 500
},
{
"id": "playstyle",
"label": "Как ты планируешь играть на сервере?",
"placeholder": "Фарм, строительство, РП и т.д.",
"style": "paragraph",
"required": true,
"maxLength": 500
},
{
"id": "rules",
"label": "Подтверждение правил",
"placeholder": "Напиши, что прочитал(а) и согласен(на) с правилами сервера",
"style": "paragraph",
"required": true,
"maxLength": 300
}
],
"extraQuestions": [
"Согласен ли ты на проверку ресурс-паков/модов при подозрении?",
"Как часто планируешь заходить на сервер?",
"Есть ли опыт игры на ванильных/приватных серверах?"
],
"rules": [
"Игрок должен быть адекватным и не токсичным.",
"Запрещён читерство, использование багов и дюпов.",
"Уважительное отношение к другим игрокам и администрации.",
"Готовность соблюдать правила сервера и слушать модераторов.",
"Желательно иметь микрофон и возможность общаться в голосе."
]
}Переменные окружения .env:
Код:
# Discord Bot Configuration
DISCORD_TOKEN=your_discord_bot_token_here
CLIENT_ID=your_discord_client_id_here
GUILD_ID=your_discord_guild_id_here
# OpenRouter AI Configuration
OPENROUTER_API_KEY=sk-or-v1-your-api-key-here
# Database Configuration
DB_DIALECT=sqlite
DB_STORAGE=./data/bot.sqlite
# Для PostgreSQL/MySQL (опционально):
# DB_DIALECT=postgres
# DATABASE_URL=postgresql://user:password@localhost:5432/dbname📋 Описание параметров конфига
Основные настройки:
applicationChannelId- ID канала, где будет размещена кнопка заявкиticketCategoryId- ID категории для создания тикет-каналовstaffRoleIds- Массив ID ролей модераторов (могут управлять заявками)acceptedRoleId- ID роли, которая выдаётся при одобрении заявкиlogChannelId- ID канала для логирования заявокnicknameFieldId- ID поля формы с ником Minecraft (для автоматической смены никнейма)
Ограничения:
maxApplications- Максимальное количество заявок от одного пользователя (-1= без ограничений)cooldownSeconds- Кулдаун между заявками в секундах (-1= без кулдауна)
RCON настройки:
rcon.enabled- Включить/выключить RCONrcon.host- Адрес Minecraft сервераrcon.port- Порт RCON (обычно 25575)rcon.password- Пароль RCONrcon.whitelistCommand- Команда для добавления в вайтлист
Поля формы:
id- Уникальный идентификатор поляlabel- Название поля в формеplaceholder- Подсказка для пользователяstyle- Стиль поля (shortилиparagraph)required- Обязательное ли полеmaxLength- Максимальная длина текста
Дополнительные вопросы:
-extraQuestions - Массив вопросов, которые ИИ задаст пользователю последовательноПравила:
-rules - Массив правил, которые используются ИИ для проверки заявок---
🎮 Команды бота
Для всех пользователей:
-/apply - Отправить сообщение с кнопкой для подачи заявки (только в канале заявок)Для модераторов:
/whitelist <nickname>- Добавить игрока в вайтлист сервера через RCON/stats- Показать статистику заявок
Кнопки в тикете:
- Одобрить - Одобрить заявку (выдать роль, добавить в вайтлист)
- Отклонить - Отклонить заявку
- Закрыть - Закрыть тикет
Кнопки после вердикта ИИ:
- Есть ещё вопросы - Оставить тикет открытым для вопросов
- Можно закрывать тикет - Закрыть тикет автоматически
Кнопки в логах:
- Одобрить - Изменить вердикт на "одобрено" из канала логов
- Отклонить - Изменить вердикт на "отклонено" из канала логов
🔄 Процесс работы с заявкой
1. Создание заявки- Пользователь нажимает кнопку "Открыть заявку"
- Заполняет модальное окно с полями из конфига
- Создаётся приватный тикет-канал
- Автоматически меняется никнейм на ник из Minecraft
2. ИИ-проверка
- ИИ задаёт дополнительные вопросы последовательно
- Пользователь отвечает на каждый вопрос в тикете
- После всех ответов ИИ выносит вердикт
- Автоматически выполняются действия (роль, вайтлист, ЛС)
3. Управление модераторами
- Модераторы могут изменить вердикт через кнопки в тикете или логах
- Все действия логируются в канал логов
- Статистика доступна через команду
/stats---
📊 Статистика
Команда/stats показывает:- Всего заявок
- Одобрено
- Отклонено
- Закрыто
- Открыто
- Без вердикта
🛠️ Технический стек
- Discord.js v14 - Работа с Discord API
- TypeScript - Типизированный JavaScript
- Sequelize - ORM для работы с БД
- SQLite/PostgreSQL/MySQL - База данных
- OpenRouter API - ИИ-модерация
- RCON Client - Подключение к Minecraft серверу
- Node.js - Среда выполнения