From 255a47e10e755da5606a8540eb724c23728f2729 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Tue, 30 Jun 2015 05:10:07 -0400 Subject: [PATCH] Merged VersionConsoleCommand and VersionIRCCommand into VersionGenericCommand. Replaced SynIRCCommand and RehashIRCCommand with SyncGenericCommand and RehashGenericCommand. --- CoreCommands/CoreCommands.cpp | 92 ++++++++++++++-------------------- CoreCommands/CoreCommands.h | 9 ++-- Release/Bot.lib | Bin 25088 -> 25088 bytes Release/Plugins/RenX.Core.lib | Bin 129390 -> 129390 bytes 4 files changed, 43 insertions(+), 58 deletions(-) diff --git a/CoreCommands/CoreCommands.cpp b/CoreCommands/CoreCommands.cpp index f2c2590..ef5400b 100644 --- a/CoreCommands/CoreCommands.cpp +++ b/CoreCommands/CoreCommands.cpp @@ -22,6 +22,8 @@ #include "CoreCommands.h" #include "IRC_Bot.h" +using namespace Jupiter::literals; + // Help Console Command HelpConsoleCommand::HelpConsoleCommand() @@ -61,33 +63,7 @@ const Jupiter::ReadableString &HelpConsoleCommand::getHelp(const Jupiter::Readab CONSOLE_COMMAND_INIT(HelpConsoleCommand) -// Version Console Command - -VersionConsoleCommand::VersionConsoleCommand() -{ - this->addTrigger(STRING_LITERAL_AS_REFERENCE("version")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("versioninfo")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyright")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyrightinfo")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("client")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("clientinfo")); - this->addTrigger(STRING_LITERAL_AS_REFERENCE("info")); -} - -void VersionConsoleCommand::trigger(const Jupiter::ReadableString ¶meters) -{ - printf("Version: %s" ENDL "%s" ENDL, Jupiter::version, Jupiter::copyright); -} - -const Jupiter::ReadableString &VersionConsoleCommand::getHelp(const Jupiter::ReadableString &) -{ - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays version and copyright information"); - return defaultHelp; -} - -CONSOLE_COMMAND_INIT(VersionConsoleCommand) - -// Help Command. +// Help IRC Command. void HelpIRCCommand::create() { @@ -137,87 +113,97 @@ const Jupiter::ReadableString &HelpIRCCommand::getHelp(const Jupiter::ReadableSt IRC_COMMAND_INIT(HelpIRCCommand) -// Version IRC Command +// Version Command -void VersionIRCCommand::create() +VersionGenericCommand::VersionGenericCommand() { this->addTrigger(STRING_LITERAL_AS_REFERENCE("version")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("versioninfo")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyright")); this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyrightinfo")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("client")); + this->addTrigger(STRING_LITERAL_AS_REFERENCE("clientinfo")); } -void VersionIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +GenericCommand::ResponseLine *VersionGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { - source->sendMessage(channel, Jupiter::StringS::Format("Version: %s", Jupiter::version)); - source->sendMessage(channel, Jupiter::ReferenceString(Jupiter::copyright)); + GenericCommand::ResponseLine *ret = new GenericCommand::ResponseLine("Version: "_jrs + Jupiter::ReferenceString(Jupiter::version), GenericCommand::DisplayType::PublicSuccess); + ret->next = new GenericCommand::ResponseLine(Jupiter::ReferenceString(Jupiter::copyright), GenericCommand::DisplayType::PublicSuccess); + return ret; } -const Jupiter::ReadableString &VersionIRCCommand::getHelp(const Jupiter::ReadableString &) +const Jupiter::ReadableString &VersionGenericCommand::getHelp(const Jupiter::ReadableString &) { - static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays version and copyright information. Syntax: version"); + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays version and copyright information"); return defaultHelp; } -IRC_COMMAND_INIT(VersionIRCCommand) +GENERIC_COMMAND_INIT(VersionGenericCommand) +GENERIC_COMMAND_AS_CONSOLE_COMMAND(VersionGenericCommand) +GENERIC_COMMAND_AS_IRC_COMMAND(VersionGenericCommand) // Sync Command -void SyncIRCCommand::create() +SyncGenericCommand::SyncGenericCommand() { this->addTrigger(STRING_LITERAL_AS_REFERENCE("sync")); - this->setAccessLevel(4); } -void SyncIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +GenericCommand::ResponseLine *SyncGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { - if (source->Config == nullptr) source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Unable to find Config data.")); + if (Jupiter::IRC::Client::Config == nullptr) + return new GenericCommand::ResponseLine(STRING_LITERAL_AS_REFERENCE("Unable to find Config data."), GenericCommand::DisplayType::PublicError); else { bool r; if (parameters.isNotEmpty()) - r = source->Config->sync(parameters); - else r = source->Config->sync(); - if (r) source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Config data synced to file successfully.")); - else source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Unable to sync Config data.")); + r = Jupiter::IRC::Client::Config->sync(parameters); + else r = Jupiter::IRC::Client::Config->sync(); + if (r) + return new GenericCommand::ResponseLine(STRING_LITERAL_AS_REFERENCE("Config data synced to file successfully."), GenericCommand::DisplayType::PublicSuccess); + return new GenericCommand::ResponseLine(STRING_LITERAL_AS_REFERENCE("Unable to sync Config data."), GenericCommand::DisplayType::PublicError); } } -const Jupiter::ReadableString &SyncIRCCommand::getHelp(const Jupiter::ReadableString &) +const Jupiter::ReadableString &SyncGenericCommand::getHelp(const Jupiter::ReadableString &) { static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Syncs the configuration data to a file. Syntax: sync [file]"); return defaultHelp; } -IRC_COMMAND_INIT(SyncIRCCommand) +GENERIC_COMMAND_INIT(SyncGenericCommand) +GENERIC_COMMAND_AS_CONSOLE_COMMAND(SyncGenericCommand) +GENERIC_COMMAND_AS_IRC_COMMAND_2(SyncGenericCommand, 4) // Rehash Command -void RehashIRCCommand::create() +RehashGenericCommand::RehashGenericCommand() { this->addTrigger(STRING_LITERAL_AS_REFERENCE("rehash")); - this->setAccessLevel(4); } -void RehashIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +GenericCommand::ResponseLine *RehashGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { - if (source->Config == nullptr) source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Unable to find Config data.")); + if (Jupiter::IRC::Client::Config == nullptr) + return new GenericCommand::ResponseLine(STRING_LITERAL_AS_REFERENCE("Unable to find Config data."), GenericCommand::DisplayType::PublicError); else { unsigned int r = Jupiter::rehash(); if (r == 0) - source->sendMessage(channel, Jupiter::StringS::Format("All %u objects were successfully rehashed.", Jupiter::getRehashableCount())); - else source->sendMessage(channel, Jupiter::StringS::Format("%u of %u objects failed to successfully rehash.", r, Jupiter::getRehashableCount())); + return new GenericCommand::ResponseLine(Jupiter::StringS::Format("All %u objects were successfully rehashed.", Jupiter::getRehashableCount()), GenericCommand::DisplayType::PublicSuccess); + return new GenericCommand::ResponseLine(Jupiter::StringS::Format("%u of %u objects failed to successfully rehash.", r, Jupiter::getRehashableCount()), GenericCommand::DisplayType::PublicError); } } -const Jupiter::ReadableString &RehashIRCCommand::getHelp(const Jupiter::ReadableString &) +const Jupiter::ReadableString &RehashGenericCommand::getHelp(const Jupiter::ReadableString &) { static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Rehashes configuration data from a file. Syntax: rehash [file]"); return defaultHelp; } -IRC_COMMAND_INIT(RehashIRCCommand) +GENERIC_COMMAND_INIT(RehashGenericCommand) +GENERIC_COMMAND_AS_CONSOLE_COMMAND(RehashGenericCommand) +GENERIC_COMMAND_AS_IRC_COMMAND_2(RehashGenericCommand, 4) // Plugin instantiation and entry point. CoreCommandsPlugin pluginInstance; diff --git a/CoreCommands/CoreCommands.h b/CoreCommands/CoreCommands.h index b847192..4c3a0cd 100644 --- a/CoreCommands/CoreCommands.h +++ b/CoreCommands/CoreCommands.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -32,10 +32,9 @@ private: }; GENERIC_CONSOLE_COMMAND(HelpConsoleCommand) -GENERIC_CONSOLE_COMMAND(VersionConsoleCommand) GENERIC_IRC_COMMAND(HelpIRCCommand) -GENERIC_IRC_COMMAND(VersionIRCCommand) -GENERIC_IRC_COMMAND(SyncIRCCommand) -GENERIC_IRC_COMMAND(RehashIRCCommand) +GENERIC_GENERIC_COMMAND(VersionGenericCommand) +GENERIC_GENERIC_COMMAND(SyncGenericCommand) +GENERIC_GENERIC_COMMAND(RehashGenericCommand) #endif // _CORECOMMANDS_H_HEADER \ No newline at end of file diff --git a/Release/Bot.lib b/Release/Bot.lib index 9336cfee1c9b29e79e133f44c1f3604f42b4a16f..97712ca887bde0e00c1b8b3cbe60f1db0109e2f4 100644 GIT binary patch delta 1678 zcmZ8hT}V@57~aBxIjxb)W2JL8D$#|u7%jJX_S>BM^JhP<&3Sea5g8N`bYmG6Xn8Sw zDI(1KiUJcaBCsx`iz2Zu>qdxf!oa(r1pB`C`@Yk$b9bKezR&wS&-;C6az#J6qOUX? zoKD9H7p%$B!s*pR|K1jDO&j7>aW_D_%e2c;T=ckp>UojkmLS}{*Wf75W|rWdy9KUw ze^b95rPWjJX0=+D;F-7HNUM+O=u-uiDl2SzEUafX*-ly@>GcZ^)1Sp} ziIo~+rrdG_@*OAPm!BH~U$`CZc9IGsuW-voxDjaJJPNV65WtD=0$~oCf~d1qZ&U05w3iN_nyoz9XRE2L-{^h`JM^z}{=dKs-cbBi(6c}4+rK{fGRh{aoWMS z;PMqExXQr0@$(v8bqSVv8?kd3GdEcwo)CU$=C>25;ZdT@`uHyGNfEIxEWvaVC(b8@ zE*^7JO5{$fZl$p5VQPR&pm`bknb`gz4LHrf`F=G-;^2E0E87Mx2nPgwKENDAh=UHD zK?iTTWH1h@2bh$E2eI$$;5kj-#|(m-gBLld3}Li0LqahX$L~^gTHGa?BpFG!Qb~&> z>0PR4d~KQOokMohBON2+9H7tHpry_Romrud&%B-$Gbuf{`8z9Yk}Q#>gRnS}WjWW% zr&#liu$9|K^_YgQXhuICX1PR3(yb+cbH*_ubU@%*?-gutd2z^Q3M&<%3I4qp#Y z?bVRX?dMH2BK~J_6|{erCk2dXxiFzhLi(}dB@WP|MJ^K+UNa(oU;H#b7!k*aCc8a? zT;|dpl}m!95`ynbn)RVvJCPfJPbC{vMny=37QY=Q--7t9R&ALpI)bk?6B|)fbufg0in_Yr?t|qwF z^-cYDlvYo=8r5o9f@hvuBdtEBqfZ6QR9Io#ZDBpL$yU+=Nsmu(unr2o^@Mj6IlHw* z_q%Ip(bMjLrgJ=qphfnmAo5SkG6&XV1h(X&3P>>K#kNUrUIYGNpvjlzptT^uO&>Ee zLabB~Gv%fuP-r^|zkJ*fctfpdx1CfNd4)?h!VP~N=TV5o1wT%F=MQnv6hK|>0Qbm) zdGX)7HK@&i*sZ3~TF5Muu0jXCJ#`QaiuKYB{s@{$OtT>upF`x)*hWLCor5<*f_Rgy zq|_7R6&(1Y0@MK6D&@(A`Hp~s9~1;v!|G0m0(-=afw+mtdb}-TBuivzBP~`kbZRN5(ntfBA1B@uNoG=FMgUI42xq#lieOh zE_3OQ$|b>43BmUz&H7NToyhgWr;-h3Mnp)27QY=Q-vaopTCoW-axP=+rYnm0jcBg_ Xx}sixc0e*^u`F8kx{Ny3${l|JOuomm diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index f04168f724d59b2f3666ca1a87646e8464b9fbba..f9da299d4386c401fb446bed2236e288ba2cfb5d 100644 GIT binary patch delta 7837 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