added module management to base module

This commit is contained in:
Anselme 2015-05-29 21:06:36 +02:00
parent 4aac5b2bb4
commit a9caac5674
5 changed files with 82 additions and 4 deletions

View File

@ -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; i<getNbModules(); ++i)
{
Module* m = getModule(i);
str += m->getName() + (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; i<list.size(); ++i)
for(int j=1; j<getNbModules(); ++j)
{
Module* m = getModule(j);
if(m->getName().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 <targets>)");
ret = true;
}
}
}
// renommage

View File

@ -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()

View File

@ -22,6 +22,7 @@ public:
public:
void addModule(Module* module);
BaseModule* getBaseModule();
public slots:
void receiveMsg(QString msg);

View File

@ -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<Module*>* modList)
{
modules = modList;
}
// IRC COMMANDS
QString Module::pong(QString target)

View File

@ -2,6 +2,7 @@
#define MODULE_H
#include <QString>
#include <vector>
class Message;
@ -11,10 +12,16 @@ private:
bool enabled;
QString nick;
QString chan;
std::vector<Module*>* 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<Module*>* modList);
//TODO: add serialization methods
};
#endif // MODULE_H