From a9caac567461214bedd3ddabf658d74e8a35945b Mon Sep 17 00:00:00 2001 From: Anselme Date: Fri, 29 May 2015 21:06:36 +0200 Subject: [PATCH] added module management to base module --- basemodule.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ ircbot.cpp | 1 + ircbot.h | 1 + module.cpp | 19 +++++++++++++++++++ module.h | 14 ++++++++++---- 5 files changed, 82 insertions(+), 4 deletions(-) diff --git a/basemodule.cpp b/basemodule.cpp index 7158a73..b67b9cd 100644 --- a/basemodule.cpp +++ b/basemodule.cpp @@ -67,6 +67,57 @@ bool BaseModule::onChanHandler(Message msg) answer += say(str); ret = true; } + + // affiche l'aide + else if(msg.args.compare("!help") == 0) + { + QString str = "Available commands : !help !list"; + if(src != NULL && src->isOp()) + str += " !update !module"; + answer += privateSay(str, msg.nick); + ret = true; + } + + // gère les modules + else if(msg.args.startsWith("!module") && src != NULL && src->isOp()) + { + QStringList list = msg.args.split(' '); + QString command = list.size() < 2 ? "" : list[1]; + if(command.compare("list") == 0) + { + QString str = "Available modules : "; + for(int i=0; igetName() + (m->isEnabled() ? "[ON] " : "[OFF] "); + } + answer += say(str); + ret = true; + } + else if(list.size() > 2 && (command.compare("disable") == 0 || command.compare("enable") == 0)) + { + bool newStatus = command.compare("enable") == 0; + for(int i=2; igetName().compare(list[i]) == 0) + { + if(m->isEnabled() != newStatus) + answer += say((newStatus ? "enabled module " : "disabled module ") + list[i]); + m->setEnabled(newStatus); + } + else + answer += say("no module named " + list[i]); + } + ret = true; + } + else + { + answer += say("usage : !module (list | enable/disable )"); + ret = true; + } + } } // renommage diff --git a/ircbot.cpp b/ircbot.cpp index abe3f8a..90591ea 100644 --- a/ircbot.cpp +++ b/ircbot.cpp @@ -23,6 +23,7 @@ void IRCBot::addModule(Module* module) modules.push_back(module); module->setChan(chan); module->setNick(nick); + module->setModuleList(&modules); } void IRCBot::disconnect() diff --git a/ircbot.h b/ircbot.h index 8bcaea4..1996906 100644 --- a/ircbot.h +++ b/ircbot.h @@ -22,6 +22,7 @@ public: public: void addModule(Module* module); + BaseModule* getBaseModule(); public slots: void receiveMsg(QString msg); diff --git a/module.cpp b/module.cpp index 804039b..c160619 100644 --- a/module.cpp +++ b/module.cpp @@ -25,6 +25,20 @@ QString Module::getChan() return chan; } +int Module::getNbModules() +{ + if(modules == NULL) + return 0; + return modules->size(); +} + +Module* Module::getModule(int index) +{ + if(modules == NULL) + return NULL; + return modules->at(index); +} + void Module::setNick(QString nick_) { nick = nick_; @@ -35,6 +49,11 @@ void Module::setChan(QString chan_) chan = chan_; } +void Module::setModuleList(std::vector* modList) +{ + modules = modList; +} + // IRC COMMANDS QString Module::pong(QString target) diff --git a/module.h b/module.h index fbfa40b..aab0348 100644 --- a/module.h +++ b/module.h @@ -2,6 +2,7 @@ #define MODULE_H #include +#include class Message; @@ -11,10 +12,16 @@ private: bool enabled; QString nick; QString chan; + std::vector* modules; protected: QString answer; + QString getNick(); + QString getChan(); + int getNbModules(); + Module* getModule(int index); + QString pong(QString target); QString join(QString theChan); QString privateSay(QString str, QString target); @@ -24,7 +31,7 @@ protected: QString quit(QString str); public: - Module() : enabled(true) {} + Module() : enabled(true), modules(NULL) {} virtual bool messageHandler(Message msg) = 0; virtual QString getName() = 0; @@ -32,11 +39,10 @@ public: QString getAnswer(); bool isEnabled(); void setEnabled(bool newStatus); - QString getNick(); - QString getChan(); void setNick(QString nick_); void setChan(QString chan_); - // TODO: add serialization methods + void setModuleList(std::vector* modList); + //TODO: add serialization methods }; #endif // MODULE_H