118 lines
3.8 KiB
Java
118 lines
3.8 KiB
Java
package main;
|
|
|
|
import java.util.List;
|
|
|
|
import javax.security.auth.login.LoginException;
|
|
|
|
import core.CharacterManager;
|
|
import core.CommandEnabler;
|
|
import core.CommandManager;
|
|
import core.DatabaseManager;
|
|
import core.ObjectBuilderFactory;
|
|
import core.RPManager;
|
|
import core.Stats;
|
|
import core.lua.PluginManager;
|
|
import dataStructures.KittyChannel;
|
|
import dataStructures.KittyCore;
|
|
import dataStructures.KittyGuild;
|
|
import dataStructures.KittyUser;
|
|
import dataStructures.Response;
|
|
import dataStructures.UserInput;
|
|
import net.dv8tion.jda.core.AccountType;
|
|
import net.dv8tion.jda.core.JDA;
|
|
import net.dv8tion.jda.core.JDABuilder;
|
|
import net.dv8tion.jda.core.entities.Game;
|
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
|
|
import net.dv8tion.jda.core.hooks.ListenerAdapter;
|
|
import offline.Ref;
|
|
import utils.GlobalLog;
|
|
|
|
// http://www.slf4j.org/ - this JDA logging tool has been disabled by specifying NOP implementation.
|
|
// This is the application entry point, and bot startup location!
|
|
|
|
@SuppressWarnings("unused")
|
|
public class Main extends ListenerAdapter
|
|
{
|
|
// Variables and bot specific objects
|
|
private static KittyCore kittyCore;
|
|
private static DatabaseManager databaseManager;
|
|
private static CommandManager commandManager;
|
|
private static Stats stats;
|
|
private static RPManager rpManager;
|
|
private static PluginManager pluginManager;
|
|
private static CharacterManager charManager;
|
|
|
|
// Initialization and setup
|
|
public static void main(String[] args) throws InterruptedException, LoginException, Exception
|
|
{
|
|
// Factory startup. The ordering is intentional.
|
|
GlobalLog.initialize();
|
|
databaseManager = ObjectBuilderFactory.constructDatabaseManager();
|
|
commandManager = ObjectBuilderFactory.constructCommandManager(CommandEnabler.instance); // TODO: Untangle this singleton
|
|
stats = ObjectBuilderFactory.constructStats(commandManager);
|
|
charManager = new CharacterManager();
|
|
rpManager = ObjectBuilderFactory.constructRPManager();
|
|
pluginManager = ObjectBuilderFactory.constructPluginManager();
|
|
|
|
// Bot startup
|
|
kittyCore = ObjectBuilderFactory.constructKittyCore();
|
|
}
|
|
|
|
// When a message is sent in a server that kitty is in, this is what's called.
|
|
@Override
|
|
public void onGuildMessageReceived(GuildMessageReceivedEvent event)
|
|
{
|
|
// Tweak the event as necessary
|
|
if(!Superintendent.preProcessSetup(event, stats))
|
|
return;
|
|
|
|
// Factory objects
|
|
KittyUser user = ObjectBuilderFactory.extractUser(event);
|
|
KittyGuild guild = ObjectBuilderFactory.extractGuild(event);
|
|
KittyChannel channel = ObjectBuilderFactory.extractChannel(event);
|
|
|
|
// Specialized uncached objects
|
|
Response response = new Response(event, kittyCore);
|
|
UserInput input = new UserInput(event, guild);
|
|
|
|
// Tweak object construction as necessary
|
|
if(!Superintendent.postProcessSetup(event, user, guild, channel, response, input))
|
|
return;
|
|
|
|
// Track beans!
|
|
user.changeBeans(1);
|
|
|
|
// RP logging system
|
|
RPManager.instance.addLine(channel, user, input);
|
|
|
|
// Run any pre-emptive upkeep we need to
|
|
if(!Superintendent.perCommandUpkeepPre(pluginManager))
|
|
return;
|
|
|
|
// Attempt to spin up a command. If the command doesn't exist.
|
|
// Run plugins right before invoking the commands but after all other setup.
|
|
if(commandManager.invokeOnNewThread(guild, channel, user, input, response) == false)
|
|
{
|
|
List<String> pluginOutput = pluginManager.runAll(input.message, user);
|
|
|
|
if(pluginOutput != null && pluginOutput.size() > 0)
|
|
{
|
|
for(int i = 0; i < pluginOutput.size(); ++i)
|
|
{
|
|
if(pluginOutput.get(i).startsWith("!"))
|
|
{
|
|
commandManager.invokeOnNewThread(guild, channel, user, new UserInput(pluginOutput.get(i).substring(1), guild), response);
|
|
}
|
|
else
|
|
{
|
|
response.send(pluginOutput.get(i));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Run any upkeep in post we need to
|
|
if(!Superintendent.perCommandUpkeepPost(kittyCore, databaseManager))
|
|
return;
|
|
}
|
|
} |