Search in sources :

Example 1 with DefaultShardManagerBuilder

use of net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder in project Utility by anweisen.

the class DiscordBot method init.

protected final void init() throws Exception {
    if (initialized)
        throw new IllegalStateException("init() was already called");
    initialized = true;
    builder = builder().validate();
    DiscordBotBuilder.logger.debug("Building bot with following configuration:" + "\n\t" + config + "\n\t" + builder + "\n\t" + (builder.databaseConfig == null ? "BotDatabaseConfig{null}" : builder.databaseConfig));
    boolean requireDatabase = builder.databaseConfig != null || !builder.tables.isEmpty() || builder.requireDatabase;
    if (builder.databaseConfig == null) {
        builder.databaseConfig = new BotDatabaseConfig("guilds", "guildId", null, null, null);
    }
    if (requireDatabase) {
        database = config.createDatabase();
        database.connect();
        builder.tables.forEach((ExceptionallyBiConsumer<String, SQLColumn[]>) database::createTable);
    } else {
        database = Database.unsupported();
    }
    builder.fileLanguages.addAll(config.getLanguageFiles());
    commandManager = new DefaultCommandManager(builder.databaseConfig.getPrefixColumn() == null ? new ConstantPrefixProvider(config.getDefaultPrefix()) : new DatabasePrefixProvider(config.getDefaultPrefix(), database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getPrefixColumn())).setUseEmbeds(builder.useEmbeds);
    if (builder.databaseConfig.getTeamRoleColumn() != null) {
        commandManager.setTeamRoleManager(new DatabaseTeamRoleManager(database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getTeamRoleColumn()));
    }
    if (builder.databaseConfig.getLanguageColumn() != null) {
        LanguageManager languageManager = new DatabaseLanguageManager(database, builder.databaseConfig.getGuildTable(), builder.databaseConfig.getGuildKeyColumn(), builder.databaseConfig.getLanguageColumn());
        commandManager.setLanguageManager(languageManager);
        for (String filename : builder.fileLanguages) languageManager.readFile(filename);
        for (String filename : builder.resourceLanguages) languageManager.readResource(filename);
        languageManager.setDefaultLanguage(config.getDefaultLanguage());
    } else if (!builder.fileLanguages.isEmpty() || !builder.resourceLanguages.isEmpty()) {
        DiscordBotBuilder.logger.warn("Languages were registered but no database for language management is setup!");
        LanguageManager languageManager = new ConstantLanguageManager();
        commandManager.setLanguageManager(languageManager);
        for (String filename : builder.fileLanguages) languageManager.readFile(filename);
        for (String filename : builder.resourceLanguages) languageManager.readResource(filename);
        languageManager.setDefaultLanguage(config.getDefaultLanguage());
    }
    builder.parsers.forEach((key, parser) -> commandManager.getParserContext().registerParser(key, parser.getFirst(), parser.getSecond()));
    commandManager.register(builder.commands);
    builder.taskCommands.forEach(pair -> commandManager.register(pair.getFirst(), pair.getSecond()));
    List<GatewayIntent> intents = Arrays.asList(builder.intents);
    if (!intents.contains(GatewayIntent.DIRECT_MESSAGES))
        DiscordBotBuilder.logger.warn("Missing GatewayIntent.DIRECT_MESSAGES, no commands will be available in private chats");
    if (!intents.contains(GatewayIntent.GUILD_MESSAGES))
        DiscordBotBuilder.logger.warn("Missing GatewayIntent.GUILD_MESSAGES, no commands will be available in guild chats");
    DefaultShardManagerBuilder shardManagerBuilder = DefaultShardManagerBuilder.create(config.getToken(), intents).setCallbackPoolProvider(newThreadPoolProvider("Callback")).setEventPoolProvider(newThreadPoolProvider("Events")).setShardsTotal(config.getShards()).setMemberCachePolicy(builder.memberCachePolicy).setEventManagerProvider(shardId -> eventManager).setStatusProvider(shardId -> config.getOnlineStatus()).addEventListeners(new CommandListener(commandManager), this);
    if (builder.chunkingFilter != null)
        shardManagerBuilder.setChunkingFilter(builder.chunkingFilter);
    builder.builderSettings.forEach(action -> action.accept(shardManagerBuilder));
    builder.listener.forEach(shardManagerBuilder::addEventListeners);
    for (CacheFlag cache : CacheFlag.values()) {
        if (builder.cacheFlags.contains(cache)) {
            shardManagerBuilder.enableCache(cache);
        } else {
            shardManagerBuilder.disableCache(cache);
        }
    }
    shardManager = shardManagerBuilder.build();
    builder.shardManagerSettings.forEach(action -> action.accept(shardManager));
    if (!builder.customSlashCommands.isEmpty())
        getJDA().updateCommands().addCommands(builder.customSlashCommands).queue();
    else if (!builder.disableAutoSlashCommands)
        commandManager.setupSlashCommands(getJDA());
    getJDA().retrieveApplicationInfo().queue(applicationInfo -> this.applicationInfo = applicationInfo);
    onStart();
    if (!builder.activities.isEmpty()) {
        new Timer("BotActivityChanger").schedule(new TimerTask() {

            private int index = 0;

            @Override
            public void run() {
                if (index >= builder.activities.size()) {
                    index = 0;
                }
                Supplier<? extends Activity> activitySupplier = builder.activities.get(index);
                Activity activity = activitySupplier.get();
                shardManager.setActivity(activity);
                index++;
            }
        }, 3000, builder.activityUpdateRate * 1000L);
    }
}
Also used : DatabasePrefixProvider(net.anweisen.utilities.jda.manager.impl.prefix.DatabasePrefixProvider) ThreadPoolProvider(net.dv8tion.jda.api.sharding.ThreadPoolProvider) java.util(java.util) JDA(net.dv8tion.jda.api.JDA) DefaultShardManagerBuilder(net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder) ConstantLanguageManager(net.anweisen.utilities.jda.manager.impl.language.ConstantLanguageManager) ReadyEvent(net.dv8tion.jda.api.events.ReadyEvent) Supplier(java.util.function.Supplier) Status(net.dv8tion.jda.api.JDA.Status) GatewayIntent(net.dv8tion.jda.api.requests.GatewayIntent) ConfigProvider(net.anweisen.utilities.jda.manager.bot.config.ConfigProvider) SQLColumn(net.anweisen.utilities.database.SQLColumn) CommandManager(net.anweisen.utilities.jda.manager.CommandManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExceptionallyBiConsumer(net.anweisen.utilities.common.function.ExceptionallyBiConsumer) LanguageManager(net.anweisen.utilities.jda.manager.language.LanguageManager) GenericEvent(net.dv8tion.jda.api.events.GenericEvent) DefaultCommandManager(net.anweisen.utilities.jda.manager.impl.DefaultCommandManager) CacheFlag(net.dv8tion.jda.api.utils.cache.CacheFlag) Nonnull(javax.annotation.Nonnull) Database(net.anweisen.utilities.database.Database) ExecutorService(java.util.concurrent.ExecutorService) ConstantPrefixProvider(net.anweisen.utilities.jda.manager.impl.prefix.ConstantPrefixProvider) ShardManager(net.dv8tion.jda.api.sharding.ShardManager) NamedThreadFactory(net.anweisen.utilities.common.collection.NamedThreadFactory) ActionEventListener(net.anweisen.utilities.jda.manager.listener.manager.ActionEventListener) Activity(net.dv8tion.jda.api.entities.Activity) BotConfigCreator(net.anweisen.utilities.jda.manager.bot.config.BotConfigCreator) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) Consumer(java.util.function.Consumer) SubscribeEvent(net.dv8tion.jda.api.hooks.SubscribeEvent) CheckReturnValue(javax.annotation.CheckReturnValue) CommandListener(net.anweisen.utilities.jda.manager.listener.CommandListener) CombinedEventManager(net.anweisen.utilities.jda.manager.listener.manager.CombinedEventManager) DatabaseTeamRoleManager(net.anweisen.utilities.jda.manager.impl.DatabaseTeamRoleManager) ILogger(net.anweisen.utilities.common.logging.ILogger) Preconditions(com.google.common.base.Preconditions) IEventManager(net.dv8tion.jda.api.hooks.IEventManager) FileDocument(net.anweisen.utilities.common.config.FileDocument) DatabaseLanguageManager(net.anweisen.utilities.jda.manager.impl.language.DatabaseLanguageManager) ApplicationInfo(net.dv8tion.jda.api.entities.ApplicationInfo) ConstantPrefixProvider(net.anweisen.utilities.jda.manager.impl.prefix.ConstantPrefixProvider) CacheFlag(net.dv8tion.jda.api.utils.cache.CacheFlag) DatabasePrefixProvider(net.anweisen.utilities.jda.manager.impl.prefix.DatabasePrefixProvider) Activity(net.dv8tion.jda.api.entities.Activity) GatewayIntent(net.dv8tion.jda.api.requests.GatewayIntent) DefaultCommandManager(net.anweisen.utilities.jda.manager.impl.DefaultCommandManager) DatabaseTeamRoleManager(net.anweisen.utilities.jda.manager.impl.DatabaseTeamRoleManager) CommandListener(net.anweisen.utilities.jda.manager.listener.CommandListener) ConstantLanguageManager(net.anweisen.utilities.jda.manager.impl.language.ConstantLanguageManager) DefaultShardManagerBuilder(net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder) ConstantLanguageManager(net.anweisen.utilities.jda.manager.impl.language.ConstantLanguageManager) LanguageManager(net.anweisen.utilities.jda.manager.language.LanguageManager) DatabaseLanguageManager(net.anweisen.utilities.jda.manager.impl.language.DatabaseLanguageManager) DatabaseLanguageManager(net.anweisen.utilities.jda.manager.impl.language.DatabaseLanguageManager) Supplier(java.util.function.Supplier)

Example 2 with DefaultShardManagerBuilder

use of net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder in project Baymax by napstr.

the class ShardManagerConfiguration method shardManager.

// we manage the lifecycle ourselves tyvm, see shutdown hook in the launcher
@Bean(destroyMethod = "")
public ShardManager shardManager(BaymaxConfig baymaxConfig, OkHttpClient.Builder httpClientBuilder, ScheduledThreadPoolExecutor jdaThreadPool, EventWaiter eventWaiter, HelpDeskListener helpDeskListener) throws LoginException {
    DefaultShardManagerBuilder shardBuilder = DefaultShardManagerBuilder.createDefault(baymaxConfig.getDiscordToken()).setChunkingFilter(// we need to fetch members from the cache at several places
    ChunkingFilter.ALL).enableIntents(// required for chunking
    GatewayIntent.GUILD_MEMBERS).addEventListeners(eventWaiter).addEventListeners(helpDeskListener).setHttpClientBuilder(httpClientBuilder.retryOnConnectionFailure(false)).setEnableShutdownHook(false).setRateLimitPool(jdaThreadPool, false).setCallbackPool(jdaThreadPool, false).disableCache(EnumSet.allOf(CacheFlag.class));
    String statusMessage = baymaxConfig.getStatusMessage();
    if (!ObjectUtils.isEmpty(statusMessage)) {
        Activity.ActivityType activityType = Activity.ActivityType.fromKey(baymaxConfig.getStatusType());
        Activity discordStatus = Activity.of(activityType, statusMessage);
        shardBuilder.setActivity(discordStatus);
    }
    return shardBuilder.build();
}
Also used : CacheFlag(net.dv8tion.jda.api.utils.cache.CacheFlag) DefaultShardManagerBuilder(net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder) Activity(net.dv8tion.jda.api.entities.Activity) Bean(org.springframework.context.annotation.Bean)

Example 3 with DefaultShardManagerBuilder

use of net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder in project Me-e--bypasser by JDiscordBots.

the class MeeBypasser method main.

public static void main(String[] args) {
    File tokenFile = new File(".token");
    if (tokenFile.exists()) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(tokenFile), StandardCharsets.UTF_8))) {
            final DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.createLight(reader.readLine(), GatewayIntent.getIntents(GatewayIntent.DEFAULT)).setAutoReconnect(true).setStatus(OnlineStatus.ONLINE).setActivity(Activity.watching("https://github.com/JDiscordBots/Mee6-bypasser")).setRequestTimeoutRetry(true);
            MessageAction.setDefaultMentions(Collections.emptySet());
            CommandFramework framework = new CommandFramework();
            framework.setSlashCommandsPerGuild(true);
            framework.setPrefix("mb!");
            builder.addEventListeners(framework.build(), new MsgListener());
            ShardManager manager = builder.build();
            for (JDA jda : manager.getShards()) {
                jda.awaitReady();
            }
        } catch (LoginException | IOException e) {
            LOG.error("Cannot initialize bot", e);
        } catch (InterruptedException e) {
            LOG.warn("The main thread was interruped while waiting for a shard to connect initially", e);
            Thread.currentThread().interrupt();
        }
    } else {
        try {
            Files.createFile(tokenFile.toPath());
        } catch (IOException e) {
            LOG.error("Cannot create token file.", e);
        }
    }
}
Also used : InputStreamReader(java.io.InputStreamReader) JDA(net.dv8tion.jda.api.JDA) ShardManager(net.dv8tion.jda.api.sharding.ShardManager) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) DefaultShardManagerBuilder(net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder) BufferedReader(java.io.BufferedReader) LoginException(javax.security.auth.login.LoginException) File(java.io.File) CommandFramework(io.github.jdiscordbots.command_framework.CommandFramework)

Aggregations

DefaultShardManagerBuilder (net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder)3 JDA (net.dv8tion.jda.api.JDA)2 Activity (net.dv8tion.jda.api.entities.Activity)2 CacheFlag (net.dv8tion.jda.api.utils.cache.CacheFlag)2 Preconditions (com.google.common.base.Preconditions)1 CommandFramework (io.github.jdiscordbots.command_framework.CommandFramework)1 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 java.util (java.util)1 ExecutorService (java.util.concurrent.ExecutorService)1 Executors (java.util.concurrent.Executors)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1 Consumer (java.util.function.Consumer)1 Supplier (java.util.function.Supplier)1 Collectors (java.util.stream.Collectors)1 CheckReturnValue (javax.annotation.CheckReturnValue)1 Nonnull (javax.annotation.Nonnull)1