Search in sources :

Example 1 with SQLColumn

use of net.anweisen.utilities.database.SQLColumn 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 SQLColumn

use of net.anweisen.utilities.database.SQLColumn in project Utility by anweisen.

the class AbstractSQLDatabase method createTable.

@Override
public void createTable(@Nonnull String name, @Nonnull SQLColumn... columns) throws DatabaseException {
    try {
        StringBuilder command = new StringBuilder();
        command.append("CREATE TABLE IF NOT EXISTS `");
        command.append(name);
        command.append("` (");
        {
            int index = 0;
            for (SQLColumn column : columns) {
                if (index > 0)
                    command.append(", ");
                command.append(column);
                index++;
            }
        }
        command.append(")");
        PreparedStatement statement = prepare(command.toString());
        statement.execute();
    } catch (Exception ex) {
        throw new DatabaseException(ex);
    }
}
Also used : SQLColumn(net.anweisen.utilities.database.SQLColumn) PreparedStatement(java.sql.PreparedStatement) DatabaseException(net.anweisen.utilities.database.exceptions.DatabaseException) DatabaseException(net.anweisen.utilities.database.exceptions.DatabaseException) SQLException(java.sql.SQLException)

Example 3 with SQLColumn

use of net.anweisen.utilities.database.SQLColumn in project Utility by anweisen.

the class DiscordBotBuilder method validate.

@Nonnull
@CheckReturnValue
DiscordBotBuilder validate() {
    if (intents == null || intents.length == 0) {
        logger.warn("No intents were given, defaulting to all intents");
        allIntents();
    }
    if (activityUpdateRate < 0 && !activities.isEmpty()) {
        logger.warn("No activity update rate was given, defaulting to 15 seconds");
        updateActivity(15);
    }
    if (databaseConfig != null) {
        if (!tables.containsKey(databaseConfig.getGuildTable())) {
            List<SQLColumn> columns = new ArrayList<>(1);
            columns.add(new SQLColumn(databaseConfig.getGuildKeyColumn(), Type.VARCHAR, 18));
            if (databaseConfig.getPrefixColumn() != null)
                columns.add(new SQLColumn(databaseConfig.getPrefixColumn(), Type.VARCHAR, 100));
            if (databaseConfig.getLanguageColumn() != null)
                columns.add(new SQLColumn(databaseConfig.getLanguageColumn(), Type.VARCHAR, 32));
            if (databaseConfig.getTeamRoleColumn() != null)
                columns.add(new SQLColumn(databaseConfig.getTeamRoleColumn(), Type.VARCHAR, 18));
            if (columns.size() > 1)
                createTable(databaseConfig.getGuildTable(), columns.toArray(new SQLColumn[0]));
        }
    }
    return this;
}
Also used : SQLColumn(net.anweisen.utilities.database.SQLColumn) CheckReturnValue(javax.annotation.CheckReturnValue) Nonnull(javax.annotation.Nonnull)

Aggregations

SQLColumn (net.anweisen.utilities.database.SQLColumn)3 CheckReturnValue (javax.annotation.CheckReturnValue)2 Nonnull (javax.annotation.Nonnull)2 Preconditions (com.google.common.base.Preconditions)1 PreparedStatement (java.sql.PreparedStatement)1 SQLException (java.sql.SQLException)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 NamedThreadFactory (net.anweisen.utilities.common.collection.NamedThreadFactory)1 FileDocument (net.anweisen.utilities.common.config.FileDocument)1 ExceptionallyBiConsumer (net.anweisen.utilities.common.function.ExceptionallyBiConsumer)1 ILogger (net.anweisen.utilities.common.logging.ILogger)1 Database (net.anweisen.utilities.database.Database)1 DatabaseException (net.anweisen.utilities.database.exceptions.DatabaseException)1 CommandManager (net.anweisen.utilities.jda.manager.CommandManager)1