Opeks — универсальный бот, подходящий для использования на множестве серверов. Протестируйте его и оставьте отзыв владельцу!
В настоящее время Opeks реализует следующие команды:
/about— предоставляет информацию о боте и клиенте;/avatar— показывает аватар указанного пользователя;/choice— случайным образом выбирает один из указанных вариантов;/clean— удаляет указанное количество сообщений (требует соответствующих прав как у вызвавшего команду, так и у клиента);/dice— запрашивает бросок куба у игрока (для ведущего);/dice-range— запрашивает бросок куба с диапазонами результатов (для ведущего);/8ball— даёт таинственный ответ на ваш вопрос;/meow— присылает картинку с котиком /ᐠ。ꞈ。ᐟ;/nekos-life— присылает аниме-картинку по одному из доступных запросов;/roll— выдаёт случайное число в указанном диапазоне, может считать модификаторы;/rps— камень-ножницы-бумага!;/sauce— ищет источник аниме-арта через SauceNAO;/serverinfo— показывает информацию о сервере;/special— генерирует характеристики персонажа а-ля Fallout;/timeout— выдаёт участнику мут на указанное количество часов (требует соответствующих прав как у вызвавшего команду, так и у клиента);/trace-moe— определяет аниме по кадру из него;/userinfo— показывает информацию об участнике;/voting— инициирует голосование;/wiki— ищет статью по вики и выдаёт краткую сводку от ИИ;- «Составить вердикт» (контекстное меню сообщения) — продолжает ролевой пост с учётом контекста чата и вики.
Также Opeks иногда присылает в чат смайлик или ставит реакцию. Говорят, без искусственного интеллекта там не обошлось ¯_(ツ)_/¯
Opeks является гибкой системой и не привязан к одному Discord-клиенту. С его помощью вы можете создать своего бота! Для этого следуйте инструкции:
- Установите Node.js. Проект ориентирован на Node.js 24.x (см.
enginesвpackage.json). - Клонируйте этот репозиторий на свой сервер.
- Создайте в корне репозитория файл
.envна основе.env.exampleи заполните его своими данными:
TOKEN="ТОКЕН_ВАШЕГО_КЛИЕНТА" # Получить его вы можете при создании бота на Discord Developers Portal
LINE_COLOR="0xfefefe" # Цвет эмбедов, HEX или десятичный (по умолчанию 0xfefefe)
HOSTING="НАЗВАНИЕ_ХОСТИНГА" # Отображается в /about (по умолчанию local)
ACTIVITY_NAME="Opeks" # Активность в статусе бота
ACTIVITY_TYPE="0" # Тип активности, см. документацию Discord
OPENROUTER_API_KEY="..." # Токен OpenRouter — нужен для /wiki и «Составить вердикт»
OPENROUTER_URL="https://openrouter.ai/api/v1/chat/completions"
OPENROUTER_MODEL="nvidia/nemotron-3-super-120b-a12b:free"
SAUCE_TOKEN="..." # Токен SauceNAO — нужен для /sauce
LOG_LEVEL="info" # debug | info | warn | error- Соберите и запустите бота:
npm ci # установка зависимостей
npm run build # компиляция TypeScript в dist/
npm start # запуск скомпилированного ботаДля разработки с перезагрузкой вручную можно использовать npm run dev (запуск через ts-node без сборки).
src/
├── index.ts # точка входа (bootstrap)
├── config/ # env.ts — загрузка/валидация .env, constants.ts — константы
├── core/ # Logger, ClientFactory, AppContext (DI-контекст)
├── structures/ # базовые классы Command, TextParser, Listener
├── commands/ # слеш- и контекстные команды (по классу на команду)
├── listeners/ # обработчики событий Discord
├── parsers/ # парсеры обычных сообщений
├── services/ # Wiki, LLM, SauceNAO, trace.moe, nekos.life, промпты
└── utils/ # хелперы (random, time, text, embed, discord)
Основные скрипты (npm run <script>):
dev— запуск через ts-node без сборки;build— компиляция TypeScript вdist/;start— запуск собранного бота;typecheck— проверка типов без эмита;lint/lint:fix— ESLint (проверка / автоправки);format/format:check— Prettier (форматирование / проверка);test— юнит-тесты на встроенном Node test runner.
Код форматируется Prettier и линтится ESLint (+ typescript-eslint). Перед коммитом Husky
автоматически прогоняет сборку и линт (npm run build && npm run lint).