SBDS, наш власний дискорд бот. Нарешті на Java.
Find a file
2026-09-02 06:30:27 +03:00
ai-module Скинуто версії модулів до 1.0; Перенесено версію модулів в build.gradle.kts 2026-06-23 06:08:52 +03:00
api Виправлено DataManager'и: Через WeakHashMap java надто швидко видаляла кеш 2026-09-02 06:30:27 +03:00
changestatus-module Багато всяких фіксів та покращень там і сям. 2026-09-02 06:16:07 +03:00
chatbot-module Скинуто версії модулів до 1.0; Перенесено версію модулів в build.gradle.kts 2026-06-23 06:08:52 +03:00
core Виправлено DataManager'и: Через WeakHashMap java надто швидко видаляла кеш 2026-09-02 06:30:27 +03:00
github-module Скинуто версії модулів до 1.0; Перенесено версію модулів в build.gradle.kts 2026-06-23 06:08:52 +03:00
guildconfig-module GuildConfigModule: Виправлено видимість internal опцій та додано translation аргумент. 2026-07-04 03:55:33 +03:00
logging-module Багато всяких фіксів та покращень там і сям. 2026-09-02 06:16:07 +03:00
moderation-module Скинуто версії модулів до 1.0; Перенесено версію модулів в build.gradle.kts 2026-06-23 06:08:52 +03:00
music-module MusicModule: Додано дозвіл (якого чомусь там не було) на кнопку до команди /lock 2026-07-27 18:06:03 +03:00
permission-module PermissionModule: Додано перевірку на бота в /permission member set 2026-07-06 16:19:45 +03:00
privatevoice-module PrivateVoiceModule: Виправлено неправильне видалення каналів при вимкненні модуля. 2026-07-04 04:04:34 +03:00
test-module Багато всяких фіксів та покращень там і сям. 2026-09-02 06:16:07 +03:00
translation-module Скинуто версії модулів до 1.0; Перенесено версію модулів в build.gradle.kts 2026-06-23 06:08:52 +03:00
.gitattributes initial commit 2025-02-25 02:01:55 +02:00
.gitignore Added .run directory to .gitignore. 2025-03-07 17:39:07 +02:00
build.gradle.kts SBDS: Додано примусове застосування JDK 21. 2026-07-27 17:56:39 +03:00
README.md Updated README.md 2026-06-23 15:54:43 +03:00
settings.gradle.kts Змінено include в settings.gradle.kts щоб воно включало усі модулі автоматично. 2026-06-10 00:33:06 +03:00

SurvivalBoom Discord Service

SBDS - універсальна платформа для розробки Discord ботів. Це просто диво!

API

Реально зручне API та абстракції над складними задачами.

  • Commands (String, Console, Slash, Context)
  • Modal (Централізована система надсилання Modal із шаблонізацією)
  • InteractableComponents (Централізована система обробки взаємодій із кнопками)
  • Events (Включаючи створення власних)
  • Database (Модульна система репозиторіїв, вбудовані сховища для даних користувачів та серверів, підтримує будь-які способи зберігання даних)
  • GuildConfig (Універсальне централізоване сховище налаштувань модулів для конкретного серверу)
  • Libraries (Ізолювання кожної версії бібліотеки та модулів, динамічне завантаження залежностей модулів)
  • Translations (Повна підтримка перекладів, налаштування через YAML, у тому числі для кожного модуля окремо)
  • Permissions (Універсальна система дозволів та груп, глобальні, серверні та для учасників)
  • Modules (Динамічно підвантажувані модулі, що використовують SBDS API)
  • RegistrationRegistry (Усі реєстрації під контролем одного централізованого сховища)
  • ServiceProvider (Реєстрація API модулів)

Приклади

Треба швиденько зробити команду? Ось!

@CommandClass(name = "ban", description = "Ban user", permission = "mymodule.command.ban")
public class MyBanCommand extends CommandBase implements StringCommandExecutor, SlashCommandExecutor, ConsoleCommandExecutor {
    
    @Override
    public void executes(@NotNull SlashExecutionInfo info) {
        executes0(info);
    }
    
    @Override
    public void executes(@NotNull StringExecutionInfo info) {
        executes0(info);
    }
    
    private void executes0(@NotNull InteractionHolder info) {
        
        User user = info.arguments().getCast("user", User.class).orElseThrow();
        String reason = info.arguments().getCast("reason", String.class).orElseThrow();
        
        Guild guild = info.guild();
        Member member = guild.retrieveMember(user).complete();
        
        member.ban(reason).queue();
        
        info.reply("mymodule.command.ban.success")
                .withPlaceholders("user", member)
                .queue();
        
    }
    
    @Override
    public void executes(@NotNull ConsoleExecutionInfo info) {

        User user = info.arguments().getCast("user", User.class).orElseThrow();
        Guild guild = info.arguments().getCast("guild", Guild.class).orElseThrow();
        String reason = info.arguments().getCast("reason", String.class).orElseThrow();

        Member member = guild.retrieveMember(user).complete();
        member.ban(reason).queue();
        
        info.logger().info("Banned `{}` successfully!", member.getEffectiveName());
        
    }
    
    @ArgumentMethod(scope = ArgumentScope.CONSOLE)
    public GuildArgument guild() {
        return new GuildArgument();
    }
    
    @ArgumentMethod(index = 1)
    public UserArgument user() {
        return new UserArgument();
    }
    
    @ArgumentMethod(index = 2)
    public StringArgument reason() {
        return new StringArgument();
    }
    
}

І магічним чином тепер існує команда /ban, або ж !ban та варіант для консолі. При виконанні команди автоматично перевіряється її Permission.

А потім:

public class MyModule extends ModuleMain {
    
    @Override
    public void onEnable() {
        registerCommand(new MyBanCommand());
    }
    
}

Модулі

Коли проєкт розростається все більше і більше, код перетворюється у величезну тарілку заплутанного спагетті. У наслідок чого вирішення проблеми та додавання нового функціоналу все більше схоже на катування. Саме тому SBDS має модульну систему.

Кожен модуль - окремий проєкт, що фокусується на конкретній задачі та використовує SBDS API для виконання задачі. При запуску SBDS виконує усю брудну роботу: завантажує бібліотеки, підключається до бази даних, ініціалізує усі менеджери, розгортає усе API. Після цього модулі завантажуються і запускаються. Модулі можуть бути динамічно завантажені чи вивантажені під час роботи бота. У процесі роботи модулі викликають API з SBDS, що виконує усі підкапотні операції, тим самим спрощуючи життя. Під час розробки модуля ви концентруєтесь на функціоналі, а не на тому як надсилати запити у базу даних.

Цей репозиторій включає деякі модулі написані нами, що покривають загальні потреби та служать як приклад використання API.

Збірка

💥 Вам необхідна Java >= 21 та gradle.

Щоб розпочати, завантажте репозиторій git clone https://github.com/SurvivalBoom/SurvivalBoomDiscordService.git

Збірка ядра

  • Виконайте gradle build щоб зібрати ядро в виконуваний JAR.
  • Ви можете запустити SBDS прямо з проєкту використавши gradle runApp

Підготовка середовища розробки

  1. Виконайте gradle publishToMavenLocal
  2. Створіть новий проєкт та додайте у ваш build.gradle.kts:
repositories {
    mavenLocal()
}

dependencies {
    compileOnly("net.survivalboom.sbds:api:{version}")
}
  1. Насолоджуйтесь!

SurvivalBoom Network 2026 | Ми - найкращі! | Слава Україні!