Skip to content

Releases: voidforge-community/VoidBot

2.0.0-beta.5

2.0.0-beta.5 Pre-release
Pre-release

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 06 Jul 19:09
ada3237

Изменения на 06.07.2026

Бот 2.0.0-beta.5 (dev)

[ADD] Команда /feedback (скрытая, MANAGE_SERVER): постит embed-«приёмную» в channel.feedback.message с кнопками 💡/⚠️/👤; ответ команды ephemeral (Feedback.java, FeedbackListener.onButtonInteraction)
[ADD] Обработка идей/жалоб через Modal (TextInput PARAGRAPH, 10–2000 символов) + EntitySelectMenu (SelectTarget.USER, requiredRange 1) для выбора цели жалобы (Modal.create, Label.of(label, input) для JDA 6.3.1)
[ADD] Кнопки ✅Одобрить/❌Отклонить на embed'е обращения; approve → перестройка embed (зелёный, копия полей + «Одобрил модератор») + DM автору; reject → modal причины → перестройка (красный + «Причина отклонения») + DM автору; требуют Permission.MANAGE_SERVER (ButtonStyle.SUCCESS/DANGER, setComponents(Collections.emptyList()))
[ADD] Система уровней: LevelService.requiredXpForLevel(level)=floor(base*growth^level), по умолч. base=100, growth=1.2 (+20%/уровень); XP за сообщения (xp-per-message, кулдаун message-cooldown-seconds) и за минуты в войсе (xp-per-voice-minute); level-up embed в levels.channel или в ЛС
[ADD] Команда /rank [user]: генерация PNG-карточки (900×240) через Java2D (RankCardRenderer): круглый аватар + статус-бейдж, имя с ellipsis, строка «Ур.N ◦ Опыт:X/Y ◦ Войс:NдHчMм ◦ Всего:N» с цветными частями, прогресс-бар, листья; отправка как FileUpload.fromData(image, "rank-<id>.png") через event.deferReply().getHook()
[ADD] Команда /serverstats [period] (today/week/all): embed с участниками (MemberEventRepository.countByTypeSince), активностью (MessageRepository.countAll/countSince/countDeleted, VoiceSessionRepository.sumAllDurationSeconds/countAllSessions), модерацией (Warn/Ban/MuteRepository.countAll/countActive), топ-5 по XP (ExperienceRepository.topByGuild)
[ADD] Команда /userinfo [user]: профиль — базовое (JDA: аватар, имя, ID, даты, роли, статус) + из БД (уровень/опыт/всего XP, войс-тайм через sumDurationSecondsByUser, варны через WarnRepository.countAll, активные баны/муты через countActive)
[ADD] Команда /serverinfo: ID/владелец/создание/участники/роли/бусты/каналы (text/voice/categories)/верификация/локаль + аналитика из БД (сообщения/войс/сессии/входы/баны/кики/варны)
[ADD] Подкоманда /mod warn (Warn.java): опции target-user/reason, права MODERATE_MEMBERS, canInteract-проверки, сохранение в warns + StatisticsService.onWarn + embed с общим числом варнов
[ADD] /mod ban (Ban.java) — после guild.ban().queue(success -> persistBan(...)) создаёт Ban с expiredAt для tempban
[ADD] /mod mute (Mute.java) — после timeoutFor().queue(success -> persistMute(...)) создаёт Mute с expiredAt
[ADD] Полный слой БД: MigrationInterface + MigrationManager (таблица schema_migrations, сортировка по version, пропуск применённых); DatabaseDialect (SQLite/MySQL: idColumn(), boolType()); 11 миграций (v1–v11, все CREATE TABLE IF NOT EXISTS с formatted(idColumn)): users, messages, voice_sessions, member_events, warns, bans, mutes, experience, daily_statistics, user_daily_statistics, server_statistics
[ADD] JdbcRepository<T> базовый (findById/findAll/deleteById/generatedId/prepareInsert) + 10 репозиториев: UserRepository, MessageRepository, VoiceSessionRepository, MemberEventRepository, WarnRepository, BanRepository, MuteRepository, DailyStatisticsRepository, UserDailyStatisticsRepository, ServerStatisticsRepository, ExperienceRepository (RepositoryManager агрегирует)
[ADD] MemberEventListener: JOIN/LEAVE/KICK/BAN/UNBAN (детект kick через retrieveAuditLogs().type(ActionType.KICK).limit(5) в течение 60с), сохранение в member_events, upsert в users (joined_at/left_at), StatisticsService.onMemberJoin/onMemberLeft
[ADD] MessageEventListener: запись каждого сообщения гильдии в messages + StatisticsService.onMessage + XP с кулдауном (ConcurrentHashMap<guildId+userId, timestamp>)
[ADD] MessageDeleteListener: onMessageDelete → MessageRepository.markDeleted + StatisticsService.onMessageDeleted
[ADD] StatisticsService: единый инкремент статистики (onMessage/onMessageDeleted/onMemberJoin/onMemberLeft/onVoiceMinutes/onWarn/onCommand) с atomic upsert через DailyStatisticsRepository.increment и UserDailyStatisticsRepository.increment (column-whitelist regex messages|new_members|...)
[ADD] Локализация: system.runtime.profile=dev — пропуск LangRepositorySync.sync() (не затирает локальные правки языков); LangHelper.getInfoLocale(src, path, Map<String,String>) для %placeholders% (LevelService использует %server-name%/%level%/%required-experience%)
[ADD] Файлы локализаций: command/server/{rank,serverstats,userinfo,serverinfo}.yml, command/moderation/warn.yml, command/system/feedback.yml (формы, embed'ы, DM, статусы, ошибки, кнопки)
[ADD] Config.getLong/getDouble (через getNested() с instanceof Number + parseXxx fallback) — нужны для levels.base-xp/growth/xp-per-*/message-cooldown-seconds
[ADD] ICommand.isHidden() + ICommand.getDefaultPermissions() (по умолч. DefaultMemberPermissions.ENABLED); CommandRegister применяет DefaultMemberPermissions.DISABLED для скрытых команд
[FIX] SQLFeatureNotSupportedException от SQLite JDBC при getGeneratedKeys() — JdbcRepository.generatedId ловит исключение и возвращает 0; UserRepository/MessageRepository/VoiceSessionRepository делают fallback re-fetch по natural key (findByDiscordId/findByMessageId/findOpenByUser) после INSERT
[FIX] Войс-сессии «вечно открыты» в БД после рестарта: VoiceStateListener переписан — работает напрямую через БД (findOpenByUser/closeSession), без in-memory ConcurrentHashMap; OnReady вызывает cleanupOrphanedSessions() (одним UPDATE ... WHERE left_at IS NULL)
[FIX] Modal.setTitle лимит 45 символов — добавлен clip(s, max) (getModalTitle), защищает от крашей при fallback'ах локализации
[FIX] Локализация feedback: ключи fb. → feedback. (все вызовы getInfo выровнены с YAML-структурой); добавлены отсутствующие ключи embed.idea/user/mod.title+description, success, error.empty, footer-status.pending/decided, modal.reason.reject.label/placeholder
[DEL] Удалены core/events/EventManager.java (static singleton jda + getEventHandler()) и core/events/discord/EventHandler.java (утилита addEventListener/removeEventListener); все слушатели теперь регистрируются напрямую в JDALoader.init() через jda.addEventListener(new ...())

What's Changed

Full Changelog: 2.0.0-beta.4...2.0.0-beta.5

2.0.0-BETA.4 VoidBot v2 Небольшие фиксы

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 13 Mar 19:57
7e8d448

Изменено

  • Перемещение lavalink из command -> core
  • Небольшая чистка кода

Добавлено

  • Автосоздание веток для новостей и изменений

What's Changed

2.0.0-BETA.3 VoidBot v2 Большое техническое обновление

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 09 Mar 20:27
e35ed9a

1. Функциональные изменения (что появилось)

  • Перевод ядра в core/* и обновление архитектуры загрузки.
  • Полноценная система регистрации slash-команд через CommandRegister.
  • Поддержка subcommands (ICommand / ISubCommand / SubCommand).
  • Реализованы категории команд:
    • FUN: avatar, calc, coinflip, joke, emote, rps.
    • MUSIC: play, stop, pause, nowplaying, volume.
    • SERVER: moderation + help.
  • Реализованы модерационные subcommands:
    • ban, kick, mute, unmute, unban.
  • Локализация через константы LangMessage + синхронизация language-репозитория.
  • Голосовой стек:
    • JDA 6.3.1
    • интеграция Lavalink client
    • подготовка/интеграция DAVE/JDAVE.
  • Переход проекта на Java 25.
  • Рефакторинг логирования, ошибок и bootstrap-компонентов.

2. Риски/проверки перед merge

  • Проверить runtime-конфиги и секреты (токены/API keys/DB).
  • Проверить запуск voice-части (Lavalink node + DAVE/JDAVE + JVM флаги).
  • Проверить регистрацию и обновление slash/subcommands на guild.
  • Проверить локализации на отсутствие missing-key при вызове новых команд.

3. TODO / Backlog (на будущее)

  • Сделать полноценную очередь музыки:
    • skip, previous, clear, remove-by-index, shuffle, loop(track/queue), autoplay.
  • Реструктуризовать архитектуру бота:
    • разделить слои domain / application / infrastructure,
    • убрать сильные статические зависимости (Utils, глобальные singleton-паттерны),
    • выделить сервисы и интерфейсы для тестируемости.
  • Добавить новые команды:
    • moderation: warn, purge, slowmode, role/massrole,
    • music: queue, skip, loop, shuffle, seek, lyrics,
    • utility: ping, serverinfo, userinfo, uptime.
  • Реализовать систему уровней (после готовности сайта):
    • события XP, анти-спам, роли за уровни, leaderboard, web-профиль.
  • Ввести миграции БД (Flyway/Liquibase) и версионирование схем.
  • Покрыть критические сценарии тестами (unit + integration):
    • команды, permission-check, time-parser, localization fallback.
  • Усилить обработку ошибок:
    • единый error-code формат, tracing-id, user-safe сообщения.
  • Привести music runtime к стабильному состоянию:
    • корректный lifecycle плеера, reconnect, обработка node failover.
  • Настроить CI/CD:
    • build, tests, static analysis, release artifact.
  • Секьюрность:
    • вынести секреты в env/secret manager, ротация токенов.
  • Документация:
    • ADR по архитектуре, CONTRIBUTING, release-process, command-spec.

What's Changed

New Contributors

Full Changelog: https://github.com/voidforge-community/VoidBot/commits/2.0.0-beta.3

1.2.0

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 13 Feb 22:54

Full Changelog: 1.1.0...1.2.0


EN Release 1.2.0

🎵 Music Fixes & Localization Overhaul

🔧 Changes & Fixes:

  • Fixed music issues for a smoother experience.
  • Rewritten Configuration & Localization Storage – Now using YAML instead of properties files.
  • Localization Rework – Now prioritizes user settings over guild settings:
    • If a user has their own localization setting, it takes priority.
    • If no user setting exists, default localization is used for personal messages.
    • For servers, the localization set by guild administrators is applied.
  • Minor bug fixes and improvements.

🚀 Enjoy the update and let us know if you find any issues!


RU Релиз 1.2.0

🎵 Исправление музыки и переработка локализации

🔧 Изменения и исправления:

  • Исправлены ошибки с музыкой для более стабильной работы.
  • Переписаны конфигурация и хранилище локализаций – теперь используется YAML вместо properties-файлов.
  • Новая логика локализации – теперь приоритет отдается настройкам пользователя:
    • Если у пользователя установлена локализация, она будет в приоритете.
    • Если локализация не указана, для личных сообщений используется дефолтный язык.
    • Для серверов (гильдий) применяется локализация, установленная администраторами.
  • Небольшие исправления и улучшения.

🚀 Наслаждайтесь обновлением и сообщайте о найденных ошибках!


1.1.0

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 31 Jan 00:40

Full Changelog: 1.0.0...1.1.0

RU

Много фиксов, оптимизация кода, и немного нового функционала

Пофикшено

  • Систему прав slash команд
  • Систему добавления опыта за сообщения (Ошибка была в том что проверка была криво написана XD)
  • Оптимизировал немного код

Добавлено

EN

A lot of fixes, code optimization, and some new functionality

Fixed

  • The rights system of slash commands
  • A system for adding experience for messages (The mistake was that the check was crookedly written XD)
  • Optimized the code a bit

Added

Release 1.0.0

Choose a tag to compare

@Dev-prizrakk Dev-prizrakk released this 08 Aug 10:58

Это первичный релиз и надеюсь к этому релизу я с умел пофиксить все баги, недочеты и тд

Со списком команд вы можете ознакомится в документации я ее все еще дописываю
Docs: CookiesBot docs