From d8eedce01ab04bf131f87581cd09e549eb5ad485 Mon Sep 17 00:00:00 2001 From: JAJames Date: Sat, 25 Jun 2016 12:18:17 -0400 Subject: [PATCH] Updated Jupiter; updated plugins as necessary --- Bot/Bot.vcxproj | 2 - Bot/Bot.vcxproj.filters | 6 -- Bot/Console_Command.h | 11 ++- Bot/Generic_Command.cpp | 63 ---------------- Bot/Generic_Command.h | 128 -------------------------------- Bot/IRC_Bot.cpp | 86 ++++++++++++--------- Bot/IRC_Command.h | 17 ++--- CoreCommands/CoreCommands.cpp | 12 +-- ExtraCommands/ExtraCommands.cpp | 82 ++++++++++---------- FunCommands/FunCommands.cpp | 14 ++-- Jupiter | 2 +- PluginManager/PluginManager.cpp | 8 +- PluginManager/PluginManager.h | 4 +- Release/Bot.lib | Bin 24762 -> 19532 bytes Release/Plugins/RenX.Core.lib | Bin 206992 -> 206992 bytes RenX.Ladder/RenX_Ladder.cpp | 24 +++--- 16 files changed, 138 insertions(+), 321 deletions(-) delete mode 100644 Bot/Generic_Command.cpp delete mode 100644 Bot/Generic_Command.h diff --git a/Bot/Bot.vcxproj b/Bot/Bot.vcxproj index 29a4484..5d7b0e5 100644 --- a/Bot/Bot.vcxproj +++ b/Bot/Bot.vcxproj @@ -88,7 +88,6 @@ - @@ -96,7 +95,6 @@ - diff --git a/Bot/Bot.vcxproj.filters b/Bot/Bot.vcxproj.filters index 9478b74..e11e6f6 100644 --- a/Bot/Bot.vcxproj.filters +++ b/Bot/Bot.vcxproj.filters @@ -30,9 +30,6 @@ Source Files - - Source Files - @@ -50,9 +47,6 @@ Header Files - - Header Files - diff --git a/Bot/Console_Command.h b/Bot/Console_Command.h index aae90ca..7d79d6b 100644 --- a/Bot/Console_Command.h +++ b/Bot/Console_Command.h @@ -24,10 +24,9 @@ * @brief Provides an extendable command system specialized for console-based commands. */ -#include "Jupiter/Command.h" +#include "Jupiter/GenericCommand.h" #include "Jupiter/ArrayList.h" #include "Jupiter_Bot.h" -#include "Generic_Command.h" class ConsoleCommand; @@ -114,11 +113,11 @@ template Generic_Command_As_Console_Command::Generic_Command_As_ template void Generic_Command_As_Console_Command::trigger(const Jupiter::ReadableString ¶meters) { - GenericCommand::ResponseLine *del; - GenericCommand::ResponseLine *ret = T::instance.trigger(parameters); + Jupiter::GenericCommand::ResponseLine *del; + Jupiter::GenericCommand::ResponseLine *ret = T::instance.trigger(parameters); while (ret != nullptr) { - ret->response.println(ret->type == GenericCommand::DisplayType::PublicError || ret->type == GenericCommand::DisplayType::PrivateError ? stderr : stdout); + ret->response.println(ret->type == Jupiter::GenericCommand::DisplayType::PublicError || ret->type == Jupiter::GenericCommand::DisplayType::PrivateError ? stderr : stdout); del = ret; ret = ret->next; delete del; @@ -139,4 +138,4 @@ template const Jupiter::ReadableString &Generic_Command_As_Console_C #pragma warning(pop) #endif -#endif // _CONSOLE_COMMAND_H_HEADER \ No newline at end of file +#endif // _CONSOLE_COMMAND_H_HEADER diff --git a/Bot/Generic_Command.cpp b/Bot/Generic_Command.cpp deleted file mode 100644 index 3cefd51..0000000 --- a/Bot/Generic_Command.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (C) 2015 Jessica James. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Written by Jessica James - */ - -#include "Generic_Command.h" - -Jupiter::ArrayList _genericCommands; -Jupiter::ArrayList *genericCommands = &_genericCommands; - -GenericCommand::GenericCommand() -{ - _genericCommands.add(this); -} - -GenericCommand::~GenericCommand() -{ - size_t count = _genericCommands.size(); - while (count != 0) - if (_genericCommands.get(--count) == this) - { - _genericCommands.remove(count); - break; - } -} - -GenericCommand *getGenericCommand(const Jupiter::ReadableString &trigger) -{ - size_t count = _genericCommands.size(); - while (count != 0) - { - GenericCommand *cmd = _genericCommands.get(--count); - if (cmd->matches(trigger)) - return cmd; - } - return nullptr; -} - -GenericCommand::ResponseLine::ResponseLine(const Jupiter::ReadableString &response_, GenericCommand::DisplayType type_) -{ - GenericCommand::ResponseLine::response = response_; - GenericCommand::ResponseLine::type = type_; -} - -GenericCommand::ResponseLine *GenericCommand::ResponseLine::set(const Jupiter::ReadableString &response_, GenericCommand::DisplayType type_) -{ - GenericCommand::ResponseLine::response = response_; - GenericCommand::ResponseLine::type = type_; - return this; -} \ No newline at end of file diff --git a/Bot/Generic_Command.h b/Bot/Generic_Command.h deleted file mode 100644 index 0412a30..0000000 --- a/Bot/Generic_Command.h +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright (C) 2015 Jessica James. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Written by Jessica James - */ - -#if !defined _GENERIC_COMMAND_H_HEADER -#define _GENERIC_COMMAND_H_HEADER - -/** -* @file Generic_Command.h -* @brief Provides an extendable command system. -*/ - -#include "Jupiter/Command.h" -#include "Jupiter/String.h" -#include "Jupiter_Bot.h" - -class GenericCommand; - -/** DLL Linkage Nagging */ -#if defined _MSC_VER -#pragma warning(push) -#pragma warning(disable: 4251) -#endif - -/** Generic command list */ -JUPITER_BOT_API extern Jupiter::ArrayList *genericCommands; - -/** -* @brief Provides the base for generic commands. -*/ -class JUPITER_BOT_API GenericCommand : public Jupiter::Command -{ -public: - /** Enumerated class to guide output in generic command interpreters */ - enum class DisplayType - { - PublicSuccess, - PrivateSuccess, - PublicError, - PrivateError, - }; - - /** Data entry returned by trigger() */ - struct JUPITER_BOT_API ResponseLine - { - Jupiter::StringS response; - GenericCommand::DisplayType type; - ResponseLine *next = nullptr; - - /** - * @brief Sets the response and type of the ResponseLine. - * - * @param in_response Value to set response to. - * @param in_type Value to set type to. - * @return This. - */ - ResponseLine *set(const Jupiter::ReadableString &response, GenericCommand::DisplayType type); - ResponseLine() = default; - ResponseLine(const Jupiter::ReadableString &response, GenericCommand::DisplayType type); - }; - - /** - * @brief Called when the command is to be executed. - * - * @param input Parameters passed to the command by the user. - */ - virtual ResponseLine *trigger(const Jupiter::ReadableString &input) = 0; - - /** - * @brief Default constructor for the generic command class. - */ - GenericCommand(); - - /** - * @brief Destructor for the generic command class. - */ - ~GenericCommand(); -}; - -/** -* @brief Fetches a generic command based on its trigger. -* -* @param trigger Trigger of the command to fetch. -* @return A generic command if it exists, nullptr otherwise. -*/ -JUPITER_BOT_API extern GenericCommand *getGenericCommand(const Jupiter::ReadableString &trigger); - -/** Generic Command Macros */ - -/** Defines the core of a generic command's declaration. This should be included in every generic command. */ -#define BASE_GENERIC_COMMAND(CLASS) \ - public: \ - CLASS(); \ - GenericCommand::ResponseLine *trigger(const Jupiter::ReadableString ¶meters); \ - const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters); \ - static CLASS instance; - -/** Expands to become the entire declaration for a generic command. In most cases, this will be sufficient. */ -#define GENERIC_GENERIC_COMMAND(CLASS) \ -class CLASS : public GenericCommand { \ - BASE_GENERIC_COMMAND(CLASS) \ -}; - -/** Instantiates a generic command. */ -#define GENERIC_COMMAND_INIT(CLASS) \ - CLASS CLASS :: instance = CLASS (); \ - CLASS & CLASS ## _instance = CLASS :: instance; - -/** Re-enable warnings */ -#if defined _MSC_VER -#pragma warning(pop) -#endif - -#endif // _GENERIC_COMMAND_H_HEADER \ No newline at end of file diff --git a/Bot/IRC_Bot.cpp b/Bot/IRC_Bot.cpp index 615ffe6..65a9f3c 100644 --- a/Bot/IRC_Bot.cpp +++ b/Bot/IRC_Bot.cpp @@ -103,49 +103,67 @@ Jupiter::StringL IRC_Bot::getTriggers(Jupiter::ArrayList &cmds) void IRC_Bot::setCommandAccessLevels() { - // Rewrite this later - // Note: Prepare for abstraction of configuration file type. - Jupiter::StringS commandSection = "DefaultCommands"; - - checkForCommands: - int sIndex = Config->getSectionIndex(commandSection); - if (sIndex >= 0) + auto set_command_access_levels = [this](const Jupiter::ReadableString §ion_name) { - int sLen = Config->getSectionLength(sIndex); - for (int i = 0; i < sLen; i++) + Jupiter::INIFile::Section *section = this->Config->getSection(section_name); + + if (section != nullptr) { - const Jupiter::ReadableString &key = Config->getKey(commandSection, i); - int pos = key.find('.'); - if (pos != Jupiter::INVALID_INDEX) + size_t section_length = section->size(); + Jupiter::INIFile::Section::KeyValuePair *pair; + size_t tmp_index; + Jupiter::ReferenceString tmp_key, tmp_sub_key; + IRCCommand *command; + + for (size_t pair_index = 0; pair_index != section_length; ++pair_index) { - Jupiter::ReferenceString command = Jupiter::ReferenceString(key.ptr(), pos); - if (command != nullptr) + pair = section->getPair(pair_index); + + tmp_index = pair->getKey().find('.'); + if (tmp_index != Jupiter::INVALID_INDEX) { - IRCCommand *cmd = IRC_Bot::getCommand(command); - if (cmd != nullptr) + // non-default access assignment + + tmp_key.set(pair->getKey().ptr(), tmp_index); + + tmp_sub_key = pair->getKey(); + tmp_sub_key.shiftRight(tmp_index + 1); + + if (tmp_sub_key.findi("Type."_jrs) == 0) + { + tmp_sub_key.shiftRight(5); // shift beyond "Type." + + command = this->getCommand(tmp_key); + if (command != nullptr) + command->setAccessLevel(tmp_sub_key.asInt(), pair->getValue().asInt()); + } + else if (tmp_sub_key.findi("Channel."_jrs) == 0) { - Jupiter::ReferenceString channelType(key.ptr() + pos + 1, key.size() - pos - 1); - if (isdigit(key[pos + 1])) - cmd->setAccessLevel(channelType.asInt(10), Config->getInt(commandSection, key)); - else cmd->setAccessLevel(channelType.asInt(10), Config->getInt(commandSection, key)); + tmp_sub_key.shiftRight(8); // shift beyond "Channel." + + // Assign access level to command (if command exists) + command = this->getCommand(tmp_key); + if (command != nullptr) + command->setAccessLevel(tmp_sub_key, pair->getValue().asInt()); + else if (this->getPrintOutput() != nullptr) + fprintf(this->getPrintOutput(), "Unable to find command \"%.*s\"" ENDL, tmp_key.size(), tmp_key.ptr()); } - else if (this->getPrintOutput()) printf("Unable to find command \"%.*s\"" ENDL, key.size(), key.ptr()); } - } - else - { - IRCCommand *cmd = IRC_Bot::getCommand(key); - if (cmd != nullptr) cmd->setAccessLevel(Config->getInt(commandSection, key)); - else if (this->getPrintOutput()) printf("Unable to find command \"%.*s\"" ENDL, key.size(), key.ptr()); + else + { + // Assign access level to command (if command exists) + command = this->getCommand(pair->getKey()); + if (command != nullptr) + command->setAccessLevel(pair->getValue().asInt()); + else if (this->getPrintOutput() != nullptr) + fprintf(this->getPrintOutput(), "Unable to find command \"%.*s\"" ENDL, pair->getKey().size(), pair->getKey().ptr()); + } } } - } - if (commandSection.equals("DefaultCommands")) - { - commandSection = this->getConfigSection(); - commandSection += "Commands"; - if (commandSection.equals("DefaultCommands") == false) goto checkForCommands; - } + }; + + set_command_access_levels("DefaultCommands"_jrs); + set_command_access_levels(this->getConfigSection() + "Commands"_jrs); } int IRC_Bot::OnRehash() diff --git a/Bot/IRC_Command.h b/Bot/IRC_Command.h index 3002b13..7c504d8 100644 --- a/Bot/IRC_Command.h +++ b/Bot/IRC_Command.h @@ -24,14 +24,13 @@ * @brief Provides an extendable command system specialized for IRC chat-based commands. */ -#include "Jupiter/Command.h" +#include "Jupiter/GenericCommand.h" #include "Jupiter/IRC_Client.h" #include "Jupiter/ArrayList.h" #include "Jupiter/String.h" #include "Jupiter_Bot.h" #include "ServerManager.h" #include "IRC_Bot.h" -#include "Generic_Command.h" class IRCCommand; @@ -218,18 +217,18 @@ template Generic_Command_As_IRC_Command::Generic_Command_As_IRC_C template void Generic_Command_As_IRC_Command::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) { - GenericCommand::ResponseLine *del; - GenericCommand::ResponseLine *ret = T::instance.trigger(parameters); + Jupiter::GenericCommand::ResponseLine *del; + Jupiter::GenericCommand::ResponseLine *ret = T::instance.trigger(parameters); while (ret != nullptr) { switch (ret->type) { - case GenericCommand::DisplayType::PublicSuccess: - case GenericCommand::DisplayType::PublicError: + case Jupiter::GenericCommand::DisplayType::PublicSuccess: + case Jupiter::GenericCommand::DisplayType::PublicError: source->sendMessage(channel, ret->response); break; - case GenericCommand::DisplayType::PrivateSuccess: - case GenericCommand::DisplayType::PrivateError: + case Jupiter::GenericCommand::DisplayType::PrivateSuccess: + case Jupiter::GenericCommand::DisplayType::PrivateError: source->sendNotice(nick, ret->response); break; default: @@ -289,4 +288,4 @@ template void Generic_Command_As_IRC_Command::copyTriggers() #pragma warning(pop) #endif -#endif // _IRC_COMMAND_H_HEADER \ No newline at end of file +#endif // _IRC_COMMAND_H_HEADER diff --git a/CoreCommands/CoreCommands.cpp b/CoreCommands/CoreCommands.cpp index 8fbe3a0..2c4bdb3 100644 --- a/CoreCommands/CoreCommands.cpp +++ b/CoreCommands/CoreCommands.cpp @@ -131,10 +131,10 @@ VersionGenericCommand::VersionGenericCommand() this->addTrigger(STRING_LITERAL_AS_REFERENCE("clientinfo")); } -GenericCommand::ResponseLine *VersionGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *VersionGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { - 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); + Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine("Version: "_jrs + Jupiter::ReferenceString(Jupiter::version), GenericCommand::DisplayType::PublicSuccess); + ret->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::ReferenceString(Jupiter::copyright), GenericCommand::DisplayType::PublicSuccess); return ret; } @@ -155,14 +155,14 @@ RehashGenericCommand::RehashGenericCommand() this->addTrigger(STRING_LITERAL_AS_REFERENCE("rehash")); } -GenericCommand::ResponseLine *RehashGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *RehashGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { unsigned int r = Jupiter::rehash(); if (r == 0) - return new GenericCommand::ResponseLine(Jupiter::StringS::Format("All %u objects were successfully rehashed.", Jupiter::getRehashableCount()), GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::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); + return new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("%u of %u objects failed to successfully rehash.", r, Jupiter::getRehashableCount()), GenericCommand::DisplayType::PublicError); } const Jupiter::ReadableString &RehashGenericCommand::getHelp(const Jupiter::ReadableString &) diff --git a/ExtraCommands/ExtraCommands.cpp b/ExtraCommands/ExtraCommands.cpp index d6f6c27..ea2b7f9 100644 --- a/ExtraCommands/ExtraCommands.cpp +++ b/ExtraCommands/ExtraCommands.cpp @@ -31,24 +31,24 @@ SelectGenericCommand::SelectGenericCommand() this->addTrigger("ircselect"_jrs); } -GenericCommand::ResponseLine *SelectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *SelectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { if (parameters.isEmpty()) { if (IRCCommand::selected_server == nullptr) - return new GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); - return new GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); } if (IRCCommand::active_server == IRCCommand::selected_server) IRCCommand::active_server = nullptr; IRCCommand::selected_server = serverManager->getServer(parameters); if (IRCCommand::selected_server == nullptr) - return new GenericCommand::ResponseLine("Error: IRC server \""_jrs + parameters + "\" not found. No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: IRC server \""_jrs + parameters + "\" not found. No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); if (IRCCommand::active_server == nullptr) IRCCommand::active_server = IRCCommand::selected_server; - return new GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " is now selected."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " is now selected."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &SelectGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -73,12 +73,12 @@ DeselectGenericCommand::DeselectGenericCommand() this->addTrigger("ircunselect"_jrs); } -GenericCommand::ResponseLine *DeselectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *DeselectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { if (IRCCommand::selected_server == nullptr) - return new GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); - GenericCommand::ResponseLine *ret = new GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " has been deselected."_jrs, GenericCommand::DisplayType::PublicSuccess); + Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine(IRCCommand::selected_server->getConfigSection() + " has been deselected."_jrs, GenericCommand::DisplayType::PublicSuccess); IRCCommand::selected_server = nullptr; IRCCommand::active_server = IRCCommand::selected_server; return ret; @@ -102,7 +102,7 @@ RawGenericCommand::RawGenericCommand() this->addTrigger("sendraw"_jrs); } -GenericCommand::ResponseLine *RawGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *RawGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -110,13 +110,13 @@ GenericCommand::ResponseLine *RawGenericCommand::trigger(const Jupiter::Readable else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); if (parameters.isEmpty()) - return new GenericCommand::ResponseLine("Error: Too few parameters. Syntax: raw "_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: raw "_jrs, GenericCommand::DisplayType::PrivateError); server->send(parameters); - return new GenericCommand::ResponseLine("Data has been successfully sent to server."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Data has been successfully sent to server."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &RawGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -138,7 +138,7 @@ IRCMessageGenericCommand::IRCMessageGenericCommand() this->addTrigger("privmsg"_jrs); } -GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -146,13 +146,13 @@ GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(const Jupiter::R else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); if (parameters.wordCount(WHITESPACE) < 3) - return new GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg "_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg "_jrs, GenericCommand::DisplayType::PrivateError); server->sendMessage(Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE), Jupiter::ReferenceString::gotoWord(parameters, 1, WHITESPACE)); - return new GenericCommand::ResponseLine("Message successfully sent."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Message successfully sent."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &IRCMessageGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -172,7 +172,7 @@ JoinGenericCommand::JoinGenericCommand() this->addTrigger("Join"_jrs); } -GenericCommand::ResponseLine *JoinGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *JoinGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -180,17 +180,17 @@ GenericCommand::ResponseLine *JoinGenericCommand::trigger(const Jupiter::Readabl else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); if (parameters.isEmpty()) - return new GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join [password]"_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join [password]"_jrs, GenericCommand::DisplayType::PublicError); if (parameters.wordCount(WHITESPACE) == 1) server->joinChannel(parameters); else server->joinChannel(Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE), Jupiter::ReferenceString::gotoWord(parameters, 1, WHITESPACE)); - return new GenericCommand::ResponseLine("Request to join channel has been sent."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Request to join channel has been sent."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &JoinGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -210,7 +210,7 @@ PartGenericCommand::PartGenericCommand() this->addTrigger("Part"_jrs); } -GenericCommand::ResponseLine *PartGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *PartGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -218,17 +218,17 @@ GenericCommand::ResponseLine *PartGenericCommand::trigger(const Jupiter::Readabl else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); if (parameters.isEmpty()) - return new GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part [message]"_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part [message]"_jrs, GenericCommand::DisplayType::PublicError); if (parameters.wordCount(WHITESPACE) == 1) server->partChannel(parameters); else server->partChannel(Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE), Jupiter::ReferenceString::gotoWord(parameters, 1, WHITESPACE)); - return new GenericCommand::ResponseLine("Part command successfuly sent."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Part command successfuly sent."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &PartGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -248,7 +248,7 @@ DebugInfoGenericCommand::DebugInfoGenericCommand() this->addTrigger("debuginfo"_jrs); } -GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -256,26 +256,26 @@ GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(const Jupiter::Re else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); Jupiter::IRC::Client::Channel *chan; Jupiter::IRC::Client::User *user; - GenericCommand::ResponseLine *ret = new GenericCommand::ResponseLine("Prefixes: "_jrs + server->getPrefixes(), GenericCommand::DisplayType::PublicSuccess); - GenericCommand::ResponseLine *line = new GenericCommand::ResponseLine("Prefix Modes: "_jrs + server->getPrefixModes(), GenericCommand::DisplayType::PublicSuccess); + Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine("Prefixes: "_jrs + server->getPrefixes(), GenericCommand::DisplayType::PublicSuccess); + Jupiter::GenericCommand::ResponseLine *line = new Jupiter::GenericCommand::ResponseLine("Prefix Modes: "_jrs + server->getPrefixModes(), GenericCommand::DisplayType::PublicSuccess); ret->next = line; - line->next = new GenericCommand::ResponseLine(Jupiter::StringS::Format("Outputting data for %u channels...", server->getChannelCount()), GenericCommand::DisplayType::PublicSuccess); + line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("Outputting data for %u channels...", server->getChannelCount()), GenericCommand::DisplayType::PublicSuccess); line = line->next; for (unsigned int index = 0; index < server->getChannelCount(); ++index) { chan = server->getChannel(index); if (chan != nullptr) { - line->next = new GenericCommand::ResponseLine(Jupiter::StringS::Format("Channel %.*s - Type: %d", chan->getName().size(), chan->getName().ptr(), chan->getType()), GenericCommand::DisplayType::PublicSuccess); + line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("Channel %.*s - Type: %d", chan->getName().size(), chan->getName().ptr(), chan->getType()), GenericCommand::DisplayType::PublicSuccess); line = line->next; for (unsigned int j = 0; j != chan->getUserCount(); ++j) { user = chan->getUser(j)->getUser(); - line->next = new GenericCommand::ResponseLine(Jupiter::StringS::Format("User %.*s!%.*s@%.*s (prefix: %c) of channel %.*s (of %u shared)", user->getNickname().size(), user->getNickname().ptr(), user->getUsername().size(), user->getUsername().ptr(), user->getHostname().size(), user->getHostname().ptr(), chan->getUserPrefix(j) ? chan->getUserPrefix(j) : ' ', chan->getName().size(), chan->getName().ptr(), user->getChannelCount()), GenericCommand::DisplayType::PublicSuccess); + line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("User %.*s!%.*s@%.*s (prefix: %c) of channel %.*s (of %u shared)", user->getNickname().size(), user->getNickname().ptr(), user->getUsername().size(), user->getUsername().ptr(), user->getHostname().size(), user->getHostname().ptr(), chan->getUserPrefix(j) ? chan->getUserPrefix(j) : ' ', chan->getName().size(), chan->getName().ptr(), user->getChannelCount()), GenericCommand::DisplayType::PublicSuccess); line = line->next; } } @@ -300,7 +300,7 @@ ExitGenericCommand::ExitGenericCommand() this->addTrigger("exit"_jrs); } -GenericCommand::ResponseLine *ExitGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *ExitGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { exit(0); } @@ -323,7 +323,7 @@ IRCConnectGenericCommand::IRCConnectGenericCommand() this->addTrigger("IRCReconnect"_jrs); } -GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { if (parameters.isEmpty()) { @@ -333,20 +333,20 @@ GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(const Jupiter::R else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); server->disconnect("Connect command used; reconnecting..."_jrs, false); - return new GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); } IRC_Bot *server = serverManager->getServer(parameters); if (server != nullptr) { server->disconnect("Connect command used; reconnecting..."_jrs, false); - return new GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); } if (serverManager->addServer(parameters)) - return new GenericCommand::ResponseLine("Connection successfully established; server added to server list."_jrs, GenericCommand::DisplayType::PublicSuccess); - return new GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Connection successfully established; server added to server list."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."_jrs, GenericCommand::DisplayType::PublicError); } const Jupiter::ReadableString &IRCConnectGenericCommand::getHelp(const Jupiter::ReadableString &) @@ -366,7 +366,7 @@ IRCDisconnectGenericCommand::IRCDisconnectGenericCommand() this->addTrigger("IRCDisconnect"_jrs); } -GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { IRC_Bot *server; if (IRCCommand::selected_server != nullptr) @@ -374,10 +374,10 @@ GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(const Jupiter else if (IRCCommand::active_server != nullptr) server = IRCCommand::active_server; else - return new GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); server->disconnect("Disconnect command used."_jrs, true); - return new GenericCommand::ResponseLine("Disconnected from server."_jrs, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Disconnected from server."_jrs, GenericCommand::DisplayType::PublicSuccess); } const Jupiter::ReadableString &IRCDisconnectGenericCommand::getHelp(const Jupiter::ReadableString &) diff --git a/FunCommands/FunCommands.cpp b/FunCommands/FunCommands.cpp index 87da1c9..df1d5da 100644 --- a/FunCommands/FunCommands.cpp +++ b/FunCommands/FunCommands.cpp @@ -157,29 +157,29 @@ ResolveGenericCommand::ResolveGenericCommand() this->addTrigger("resolve"_jrs); } -GenericCommand::ResponseLine *ResolveGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *ResolveGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { unsigned int count = parameters.wordCount(WHITESPACE); if (count <= 1) - return new GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve
"_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve
"_jrs, GenericCommand::DisplayType::PrivateError); Jupiter::ReferenceString command = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); if (command.equalsi("hostname"_jrs) || command.equalsi("host"_jrs)) { Jupiter::ReferenceString resolved = Jupiter::Socket::resolveHostname(Jupiter::CStringS::gotoWord(parameters, 1, WHITESPACE).c_str(), 0); if (resolved.isEmpty()) - return new GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); - return new GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); } else if (command.equalsi("ip"_jrs)) { Jupiter::ReferenceString resolved = Jupiter::Socket::resolveAddress(Jupiter::CStringS::gotoWord(parameters, 1, WHITESPACE).c_str(), 0); if (resolved.isEmpty()) - return new GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); - return new GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); + return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); } - return new GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."_jrs, GenericCommand::DisplayType::PrivateError); } const Jupiter::ReadableString &ResolveGenericCommand::getHelp(const Jupiter::ReadableString ¶meters) diff --git a/Jupiter b/Jupiter index 1b697ec..427ddec 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 1b697ec73adfc406e4ad5244aae8d24978fa36d8 +Subproject commit 427ddecf8d89d64fbe90cbcd8eba3aaa7931939a diff --git a/PluginManager/PluginManager.cpp b/PluginManager/PluginManager.cpp index 5631f30..06eff2a 100644 --- a/PluginManager/PluginManager.cpp +++ b/PluginManager/PluginManager.cpp @@ -31,15 +31,15 @@ PluginGenericCommand::PluginGenericCommand() this->addTrigger(STRING_LITERAL_AS_REFERENCE("modules")); } -GenericCommand::ResponseLine *PluginGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *PluginGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { - GenericCommand::ResponseLine *ret = new GenericCommand::ResponseLine(); + Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine(); if (parameters.isEmpty() || parameters.matchi("list*")) { - GenericCommand::ResponseLine *line = ret->set(Jupiter::String::Format("There are %u plugins loaded:", Jupiter::plugins->size()), GenericCommand::DisplayType::PublicSuccess); + Jupiter::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++) { - line->next = new GenericCommand::ResponseLine(Jupiter::plugins->get(i)->getName(), GenericCommand::DisplayType::PublicSuccess); + line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::plugins->get(i)->getName(), GenericCommand::DisplayType::PublicSuccess); line = line->next; } return ret; diff --git a/PluginManager/PluginManager.h b/PluginManager/PluginManager.h index d9a248c..b6b2870 100644 --- a/PluginManager/PluginManager.h +++ b/PluginManager/PluginManager.h @@ -20,7 +20,7 @@ #define _PLUGINMANAGER_H_HEADER #include "Jupiter/Plugin.h" -#include "Generic_Command.h" +#include "Jupiter/GenericCommand.h" #include "Console_Command.h" #include "IRC_Command.h" @@ -30,4 +30,4 @@ class PluginManager : public Jupiter::Plugin GENERIC_GENERIC_COMMAND(PluginGenericCommand) -#endif // _PLUGINMANAGER_H_HEADER \ No newline at end of file +#endif // _PLUGINMANAGER_H_HEADER diff --git a/Release/Bot.lib b/Release/Bot.lib index 414cb5c7cb2f8a66ff0e903a623a67e77237749e..b8e6a5828781112406c4af8044736ab2b8c179ee 100644 GIT binary patch delta 3033 zcma)8YfPI}7=8-f28BVPtlb8TGANf8Mq7HJbd>vOxhZT;7!$U|cwMGHG*RQkA8O1* zrh7FpCPp;I#CXeW;t%76{n6;=T%s|WXw*N(%;?l;VzRjTobS+&4}KU)o}Tu+&wD-Z zc@OWLv7LLy_C(djj(9K@4a-u-GvD43^%{SN8~|>=JKZbA882l4Z z=*iRQyT|~Denzj*bxtG6?+Wc-X@nl4VWD@+tDul#RTXwWs}UPy zh6)3pXp9^H6!yHNG1SL061$m!!pN5jaxm`|xg6dvSHtP-nS8rVmh1&G)moK3;rPQ@ z>1fkuYJP?yv6$u1BO&w9lRWje{J^;u;7Thi6lDTkKm!x`n-yPf1Ky4>Ij)X4P!a=P zB*#I;^FzRW+*{z@1-8IX8Q>`KMKADf4=}~`7-PS!opyu3%fw;=m@n=GDndYc2k$AJ* zl)9fVfdeDJOM7^V4AjZ}FZr7-J`V>9upO1yfmYOFCpKXlTF{0<)SwRas6sWo2%r-Y z_z^-o!f1pW9&Eu@G@%(A5knLW=s*JHsDKMT1QACPHst+>eLFT|q8Mc;f^&_tk`;Fw z{)fX->{{zoE>(BS%{%Uw!+kEfP?M4-Z?oLv?UZt-H#<|?ZI{KZzHCuLy-ogVtdciw zsLy`dIA)W%=BK1Epi~M@1=4a$AS%b)ZuveClGj?i*^4c|{95o zO?tMaWvS4?)tB8K8M9^2Mu%(?NNic1D{faL9$)FcLyl2fKJI_@SoXU3&o&E34kn!W zYX6Qz{+j*8PQCv^XQgG|BVQ+7iZ7RvgR5pdlI(I7ar^q60E=&z->bLELT{1GrYfwo z*SlQBidIKj9_$cXsY|}=@>w}g_iN4$a`H9DEhl>m*4sLnauq6DUh?enYAS9T8S}{1 z6`{IX8>F&(uPMxUt$-x~lJ%ynzZsSV^HnY6jX@g`PE@i==4K^nB;6N4_1@W&_kLmg9r{ zR!wV3Hp^o}t0l>}Wjw8Ya@wLqZcm#&@0|4;hr-E&Qf$DfR-ar=SLX~{#ZHPPK>6{E zDPPL?ja+J|UM8PsOsCFaZI?rWH-(D9q8{nKwm=q#&8AQ(eK4#Kyoo%QI`A^5SFQ}3 z)%1>NI~+p1XCb?J7ImnOv=w#&oEhqnu_;`Mkq_YTR_N#Li5N z>zl$6%JFBHnw>53z)XQ0pIp7Wq`f!pa;om;B<75?qxC7q2qFt&;tv66Qp~L0W=BTvG z8TSAwYr<6(d2XMk@de}1w##XcPkxG4Sk&pJ8VihlAF*;4fQYW8XS0_FDdU6S^L}3tA6!iw-n|jEs#-on*tU76 zHC<)Fdi)I}nb#}0*CTEFb&`{`(8v(quOG4Ms}K*bTu;8hXp&#{A2z*HzjR91dmn|( zs@|8wqgDgT2RTNRisP5hrf$y}=$Y2_;k(aQ$}T_n{PO&CZBDFozn#|c&5_bVN^$v= zwZbaC#}8=A7%8o!oNm~&{y4oO9tq578sBR^bBb0czedX0sOFI_&FEI=^Up_{t$xMP zVrg|w4I>XVRDyE-LG!gxQQUEZHa|*Xh~|H5tmS*S{wR$Lt&TFRYE>4im+@KCJ?$I4 zuk5!QCK}}Itl2K=EH}*QQu03@M5K0ZC|4^rFdkkJ)>9aj7v_>V;recl(fD+ePnPFQ S-%9`PL)y5H`f+*kQ1ibxFWGkh literal 24762 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 Qr_tUMOm^0pO(C@V|KQA(Z2$lO diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index d74fa81fff1d1fc552ecbe0528ade02f05985fc3..a1024aa71305ea6db1329783b9aa38db67e35c10 100644 GIT binary patch delta 12748 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 delta 12748 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 diff --git a/RenX.Ladder/RenX_Ladder.cpp b/RenX.Ladder/RenX_Ladder.cpp index 0e04b0b..a14d128 100644 --- a/RenX.Ladder/RenX_Ladder.cpp +++ b/RenX.Ladder/RenX_Ladder.cpp @@ -88,13 +88,13 @@ LadderGenericCommand::LadderGenericCommand() this->addTrigger("rank"_jrs); } -GenericCommand::ResponseLine *LadderGenericCommand::trigger(const Jupiter::ReadableString ¶meters) +Jupiter::GenericCommand::ResponseLine *LadderGenericCommand::trigger(const Jupiter::ReadableString ¶meters) { if (parameters.isEmpty()) - return new GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder "_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder "_jrs, GenericCommand::DisplayType::PrivateError); if (RenX::default_ladder_database == nullptr) - return new GenericCommand::ResponseLine("Error: No default ladder database specified."_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: No default ladder database specified."_jrs, GenericCommand::DisplayType::PrivateError); RenX::LadderDatabase::Entry *entry; size_t rank; @@ -102,27 +102,27 @@ GenericCommand::ResponseLine *LadderGenericCommand::trigger(const Jupiter::Reada { rank = parameters.asUnsignedInt(10); if (rank == 0) - return new GenericCommand::ResponseLine("Error: Invalid parameters"_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Invalid parameters"_jrs, GenericCommand::DisplayType::PrivateError); entry = RenX::default_ladder_database->getPlayerEntryByIndex(rank - 1); if (entry == nullptr) - return new GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); - return new GenericCommand::ResponseLine(FormatLadderResponse(entry, rank), GenericCommand::DisplayType::PublicSuccess); + return new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(entry, rank), GenericCommand::DisplayType::PublicSuccess); } Jupiter::SLList> list = RenX::default_ladder_database->getPlayerEntriesAndIndexByPartName(parameters, pluginInstance.getMaxLadderCommandPartNameOutput()); if (list.size() == 0) - return new GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); + return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); std::pair *pair = list.remove(0); - GenericCommand::ResponseLine *response_head = new GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(pair->first), pair->second + 1), GenericCommand::DisplayType::PrivateSuccess); - GenericCommand::ResponseLine *response_end = response_head; + Jupiter::GenericCommand::ResponseLine *response_head = new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(pair->first), pair->second + 1), GenericCommand::DisplayType::PrivateSuccess); + Jupiter::GenericCommand::ResponseLine *response_end = response_head; delete pair; while (list.size() != 0) { pair = list.remove(0); - response_end->next = new GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(pair->first), pair->second + 1), GenericCommand::DisplayType::PrivateSuccess); + response_end->next = new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(pair->first), pair->second + 1), GenericCommand::DisplayType::PrivateSuccess); response_end = response_end->next; delete pair; } @@ -169,8 +169,8 @@ void LadderGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, } else { - GenericCommand::ResponseLine *response = LadderGenericCommand_instance.trigger(parameters); - GenericCommand::ResponseLine *ptr; + Jupiter::GenericCommand::ResponseLine *response = LadderGenericCommand_instance.trigger(parameters); + Jupiter::GenericCommand::ResponseLine *ptr; while (response != nullptr) { source->sendMessage(player, response->response);