@ -1,5 +1,5 @@
/**
/**
* Copyright ( C ) 2014 Justin James .
* Copyright ( C ) 2014 - 2015 Justin James .
*
*
* This license must be preserved .
* This license must be preserved .
* Any applications , libraries , or code which make any use of any
* Any applications , libraries , or code which make any use of any
@ -18,10 +18,11 @@
# include <cstring>
# include <cstring>
# include "Jupiter/Functions.h"
# include "Jupiter/Functions.h"
# include "PluginManager.h"
# include "PluginManager.h"
# include "IRC_Bot.h"
// Plugin Console Command
using namespace Jupiter : : literals ;
PluginConsoleCommand : : PluginConsoleCommand ( )
// Plugin Generic Command
PluginGenericCommand : : PluginGenericCommand ( )
{
{
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugin " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugin " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugins " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugins " ) ) ;
@ -29,38 +30,40 @@ PluginConsoleCommand::PluginConsoleCommand()
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " modules " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " modules " ) ) ;
}
}
void PluginConsole Command: : trigger ( const Jupiter : : ReadableString & parameters )
GenericCommand : : ResponseLine * PluginGeneric Command: : trigger ( const Jupiter : : ReadableString & parameters )
{
{
GenericCommand : : ResponseLine * ret = new GenericCommand : : ResponseLine ( ) ;
if ( parameters . isEmpty ( ) | | parameters . matchi ( " list* " ) )
if ( parameters . isEmpty ( ) | | parameters . matchi ( " list* " ) )
{
{
printf ( " There are %u plugins loaded. " ENDL , Jupiter : : plugins - > size ( ) ) ;
GenericCommand : : ResponseLine * line = ret - > set ( Jupiter : : String : : Format ( " There are %u plugins loaded: " , Jupiter : : plugins - > size ( ) ) , GenericCommand : : DisplayType : : PublicSuccess ) ;
for ( size_t i = 0 ; i ! = Jupiter : : plugins - > size ( ) ; i + + ) Jupiter : : plugins - > get ( i ) - > getName ( ) . println ( stdout ) ;
for ( size_t i = 0 ; i ! = Jupiter : : plugins - > size ( ) ; i + + )
}
else
{
{
line - > next = new GenericCommand : : ResponseLine ( Jupiter : : plugins - > get ( i ) - > getName ( ) , GenericCommand : : DisplayType : : PublicSuccess ) ;
line = line - > next ;
}
return ret ;
}
if ( parameters . matchi ( " load * " ) )
if ( parameters . matchi ( " load * " ) )
{
{
if ( Jupiter : : loadPlugin ( Jupiter : : ReferenceString : : gotoWord ( parameters , 1 , WHITESPACE ) ) = = nullptr )
if ( Jupiter : : loadPlugin ( Jupiter : : ReferenceString : : gotoWord ( parameters , 1 , WHITESPACE ) ) = = nullptr )
puts ( " Error: Failed to load plugin. " ) ;
return ret - > set ( " Error: Failed to load plugin. " _jrs , GenericCommand : : DisplayType : : PublicError ) ;
else
else
puts ( " Plugin successfully loaded. " ) ;
return ret - > set ( " Plugin successfully loaded. " _jrs , GenericCommand : : DisplayType : : PublicSuccess ) ;
}
}
else if ( parameters . matchi ( " unload * " ) )
if ( parameters . matchi ( " unload * " ) )
{
{
Jupiter : : ReferenceString pluginName = Jupiter : : ReferenceString : : gotoWord ( parameters , 1 , WHITESPACE ) ;
Jupiter : : ReferenceString pluginName = Jupiter : : ReferenceString : : gotoWord ( parameters , 1 , WHITESPACE ) ;
if ( Jupiter : : getPlugin ( pluginName ) = = nullptr )
if ( Jupiter : : getPlugin ( pluginName ) = = nullptr )
puts ( " Error: Plugin does not exist. " ) ;
return ret - > set ( " Error: Plugin does not exist. " _jrs , GenericCommand : : DisplayType : : PublicError ) ;
else if ( Jupiter : : freePlugin ( pluginName ) = = false )
if ( Jupiter : : freePlugin ( pluginName ) = = false )
puts ( " Error: Failed to unload plugin. " ) ;
return ret - > set ( " Error: Failed to unload plugin. " _jrs , GenericCommand : : DisplayType : : PublicError ) ;
else
return ret - > set ( " Plugin successfully unloaded. " _jrs , GenericCommand : : DisplayType : : PublicSuccess ) ;
puts ( " Plugin successfully unloaded. " ) ;
}
else
puts ( " Error: Invalid Syntax. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>} " ) ;
}
}
return ret - > set ( " Error: Invalid Syntax. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>} " _jrs , GenericCommand : : DisplayType : : PrivateError ) ;
}
}
const Jupiter : : ReadableString & PluginConsole Command : : getHelp ( const Jupiter : : ReadableString & parameters )
const Jupiter : : ReadableString & PluginGeneric Command : : getHelp ( const Jupiter : : ReadableString & parameters )
{
{
static STRING_LITERAL_AS_NAMED_REFERENCE ( loadHelp , " Loads a plugin by file name. Do not include a file extension. Syntax: plugin load <plugin> " ) ;
static STRING_LITERAL_AS_NAMED_REFERENCE ( loadHelp , " Loads a plugin by file name. Do not include a file extension. Syntax: plugin load <plugin> " ) ;
static STRING_LITERAL_AS_NAMED_REFERENCE ( unloadHelp , " Unloads a plugin by name. Syntax: plugin unload <plugin> " ) ;
static STRING_LITERAL_AS_NAMED_REFERENCE ( unloadHelp , " Unloads a plugin by name. Syntax: plugin unload <plugin> " ) ;
@ -77,93 +80,10 @@ const Jupiter::ReadableString &PluginConsoleCommand::getHelp(const Jupiter::Read
return defaultHelp ;
return defaultHelp ;
}
}
CONSOLE_COMMAND_INIT ( PluginConsoleCommand )
GENERIC_COMMAND_INIT ( PluginGenericCommand )
// Load Plugin
void LoadPluginIRCCommand : : create ( )
{
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " loadplugin " ) ) ;
this - > setAccessLevel ( 5 ) ;
}
void LoadPluginIRCCommand : : trigger ( IRC_Bot * source , const Jupiter : : ReadableString & channel , const Jupiter : : ReadableString & nick , const Jupiter : : ReadableString & parameters )
{
if ( parameters ! = nullptr )
{
if ( Jupiter : : getPlugin ( parameters ) ! = nullptr ) source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Error: Plugin already exists. You must first unload the plugin. " ) ) ;
else
{
if ( Jupiter : : loadPlugin ( parameters ) = = nullptr ) source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Error: Failed to load plugin. " ) ) ;
else source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Plugin successfully loaded. " ) ) ;
}
}
else source - > sendNotice ( nick , STRING_LITERAL_AS_REFERENCE ( " Error: Too Few Parameters. Syntax: loadPlugin <plugin> " ) ) ;
}
const Jupiter : : ReadableString & LoadPluginIRCCommand : : getHelp ( const Jupiter : : ReadableString & )
{
static STRING_LITERAL_AS_NAMED_REFERENCE ( defaultHelp , " Dynamically loads a plugin. Syntax: loadPlugin <plugin> " ) ;
return defaultHelp ;
}
IRC_COMMAND_INIT ( LoadPluginIRCCommand )
// Free Plugin
void FreePluginIRCCommand : : create ( )
{
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " freeplugin " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " unloadplugin " ) ) ;
this - > setAccessLevel ( 5 ) ;
}
void FreePluginIRCCommand : : trigger ( IRC_Bot * source , const Jupiter : : ReadableString & channel , const Jupiter : : ReadableString & nick , const Jupiter : : ReadableString & parameters )
{
if ( parameters ! = nullptr )
{
if ( Jupiter : : getPlugin ( parameters ) = = nullptr ) source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Error: Plugin does not exist. " ) ) ;
else if ( Jupiter : : freePlugin ( parameters ) = = false ) source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Error: Failed to unload plugin. " ) ) ;
else source - > sendMessage ( channel , STRING_LITERAL_AS_REFERENCE ( " Plugin successfully unloaded. " ) ) ;
}
else source - > sendNotice ( nick , STRING_LITERAL_AS_REFERENCE ( " Error: Too Few Parameters. Syntax: freePlugin <plugin> " ) ) ;
}
const Jupiter : : ReadableString & FreePluginIRCCommand : : getHelp ( const Jupiter : : ReadableString & )
{
static STRING_LITERAL_AS_NAMED_REFERENCE ( defaultHelp , " Dynamically unloads a plugin. Syntax: freePlugin <plugin> " ) ;
return defaultHelp ;
}
IRC_COMMAND_INIT ( FreePluginIRCCommand )
// List Plugins
void ListPluginIRCCommand : : create ( )
{
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugins " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " plugin " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " listplugin " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " listplugins " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " pluginlist " ) ) ;
this - > addTrigger ( STRING_LITERAL_AS_REFERENCE ( " pluginslist " ) ) ;
this - > setAccessLevel ( 4 ) ;
}
void ListPluginIRCCommand : : trigger ( IRC_Bot * source , const Jupiter : : ReadableString & channel , const Jupiter : : ReadableString & nick , const Jupiter : : ReadableString & parameters )
{
source - > sendMessage ( channel , Jupiter : : StringS : : Format ( " %u plugins loaded: " , Jupiter : : plugins - > size ( ) ) ) ;
for ( size_t i = 0 ; i ! = Jupiter : : plugins - > size ( ) ; i + + )
source - > sendMessage ( channel , Jupiter : : plugins - > get ( i ) - > getName ( ) ) ;
}
const Jupiter : : ReadableString & ListPluginIRCCommand : : getHelp ( const Jupiter : : ReadableString & )
{
static STRING_LITERAL_AS_NAMED_REFERENCE ( defaultHelp , " Lists the currently loaded plugins. Syntax: pluginlist " ) ;
return defaultHelp ;
}
IRC_COMMAND_INIT ( ListPluginIRCCommand )
GENERIC_COMMAND_AS_CONSOLE_COMMAND ( PluginGenericCommand )
GENERIC_COMMAND_AS_IRC_COMMAND_2 ( PluginGenericCommand , 5 )
// Plugin instantiation and entry point.
// Plugin instantiation and entry point.
PluginManager pluginInstance ;
PluginManager pluginInstance ;