diff --git a/app/app.pro b/app/app.pro index 6b2b873..a31df58 100644 --- a/app/app.pro +++ b/app/app.pro @@ -9,4 +9,8 @@ release:LIBS += ../ircbot/release/libircbot.a INCLUDEPATH += ../ircbot -SOURCES = main.cpp +SOURCES = main.cpp \ + regismodule.cpp + +HEADERS += \ + regismodule.h diff --git a/app/main.cpp b/app/main.cpp index 2291914..9e00c85 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -2,6 +2,7 @@ #include "module.h" #include "message.h" #include "basemodule.h" +#include "regismodule.h" class CustomModule : public Module { @@ -12,8 +13,7 @@ public : { if(msg.args.compare("plop ?") == 0) { - answer = say("coucou"); - + answer = say("coucou " + msg.nick); return true; } return false; @@ -29,5 +29,6 @@ int main(int argc, char *argv[]) { BotApp app = BotApp(argc, argv); app.addModule(new CustomModule()); + app.addModule(new RegisModule()); return app.exec(); } diff --git a/app/regismodule.cpp b/app/regismodule.cpp new file mode 100644 index 0000000..7d94900 --- /dev/null +++ b/app/regismodule.cpp @@ -0,0 +1,53 @@ +#include "regismodule.h" +#include "message.h" +#include + +RegisModule::RegisModule() +{ + std::srand(time(NULL)); + noms.push_back("Le chat"); + noms.push_back("La passoire"); + noms.push_back("Le canapé"); + noms.push_back("L'ivrogne"); + noms.push_back("Robert"); + noms.push_back("Le policier"); + noms.push_back("une pastèque"); + noms.push_back("un ordinateur"); + noms.push_back("une voiture"); + noms.push_back("le chien"); + verbes.push_back("troue"); + verbes.push_back("aime"); + verbes.push_back("jette"); + verbes.push_back("saute au dessus de"); + verbes.push_back("tourne autour de"); + verbes.push_back("s'assied sur"); + verbes.push_back("pense à"); + verbes.push_back("vient de trouver"); + verbes.push_back("se frotte à"); + adjectifs.push_back("noir"); + adjectifs.push_back("ivre"); + adjectifs.push_back("en mauvais état"); + adjectifs.push_back("blanc"); + adjectifs.push_back("durci"); + adjectifs.push_back("en fer"); + adjectifs.push_back("rugueux"); +} + +bool RegisModule::messageHandler(Message msg) +{ + if(msg.args.contains("régis")) + { + int nom1 = std::rand() % noms.size(); + int nom2 = std::rand() % noms.size(); + int adjectif = std::rand() % adjectifs.size(); + int verbe = std::rand() % verbes.size(); + answer = say(noms[nom1] + " " + adjectifs[adjectif] + " " + verbes[verbe] + " " + noms[nom2] + "."); + return true; + } + return false; +} + +QString RegisModule::getName() +{ + return "regis"; +} diff --git a/app/regismodule.h b/app/regismodule.h new file mode 100644 index 0000000..ee74ca6 --- /dev/null +++ b/app/regismodule.h @@ -0,0 +1,19 @@ +#ifndef REGISMODULE_H +#define REGISMODULE_H + +#include "module.h" +#include +#include + +class RegisModule : public Module +{ + std::vector noms; + std::vector verbes; + std::vector adjectifs; +public: + RegisModule(); + virtual bool messageHandler(Message msg); + virtual QString getName(); +}; + +#endif // REGISMODULE_H diff --git a/ircbot/basemodule.cpp b/ircbot/basemodule.cpp index 2f893a7..1a3e425 100644 --- a/ircbot/basemodule.cpp +++ b/ircbot/basemodule.cpp @@ -4,7 +4,12 @@ BaseModule::BaseModule() : Module(), status(OFFLINE) { + users = new UserList(); +} +BaseModule::~BaseModule() +{ + delete(users); } bool BaseModule::messageHandler(Message msg) @@ -41,7 +46,7 @@ bool BaseModule::messageHandler(Message msg) bool BaseModule::onChanHandler(Message msg) { bool ret = false; - User* src = users.getFromNick(msg.nick); + User* src = users->getFromNick(msg.nick); // si la ligne est un message if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0) @@ -57,7 +62,7 @@ bool BaseModule::onChanHandler(Message msg) else if(msg.args.compare("!list") == 0) { QString str = "Online users : "; - for(User* u : users) + for(User* u : *users) { if(u->isOp()) str.append("@"); @@ -124,9 +129,9 @@ bool BaseModule::onChanHandler(Message msg) else if(msg.command.compare("NICK", Qt::CaseInsensitive) == 0) src->rename(msg.args); else if(msg.command.compare("QUIT", Qt::CaseInsensitive) == 0) - users.remove(src); + users->remove(src); else if(msg.command.compare("PART", Qt::CaseInsensitive) == 0) - users.remove(src); + users->remove(src); else if(msg.command.compare("KICK", Qt::CaseInsensitive) == 0) { if(getNick().compare(msg.target2) == 0) @@ -134,13 +139,13 @@ bool BaseModule::onChanHandler(Message msg) answer += quit("i've been kicked :("); ret = true; } - users.remove(users.getFromNick(msg.target2)); + users->remove(users->getFromNick(msg.target2)); } else if(msg.command.compare("JOIN", Qt::CaseInsensitive) == 0 && msg.args.contains(getChan()) && getNick().compare(msg.nick) != 0) { - users.getOrAdd(msg.nick); + users->getOrAdd(msg.nick); answer += whois(msg.nick); ret = true; } @@ -153,7 +158,7 @@ bool BaseModule::onChanHandler(Message msg) QStringList names = msg.args.split(' '); for(QString s : names) { - User* u = users.getOrAdd(s); + User* u = users->getOrAdd(s); answer += whois(u->getNick()); ret = true; } @@ -162,7 +167,7 @@ bool BaseModule::onChanHandler(Message msg) // 319 = code de la ligne de réponse au whois qui indique les chans d'un user, et son statut dessus else if(msg.command.compare(QString("319"), Qt::CaseInsensitive) == 0) { - User* u = users.getOrAdd(msg.target2); + User* u = users->getOrAdd(msg.target2); QStringList chanList = msg.args.split(' '); for(QString s : chanList) { @@ -176,6 +181,11 @@ bool BaseModule::onChanHandler(Message msg) return ret; } +UserList* BaseModule::getUserList() +{ + return users; +} + QString BaseModule::getName() { return "base"; diff --git a/ircbot/basemodule.h b/ircbot/basemodule.h index c16a1e8..129c55c 100644 --- a/ircbot/basemodule.h +++ b/ircbot/basemodule.h @@ -6,15 +6,17 @@ class BaseModule : public Module { - UserList users; + UserList* users; enum{OFFLINE, ONLINE, ON_CHAN}; int status; + + bool onChanHandler(Message msg); public: BaseModule(); - + ~BaseModule(); + UserList* getUserList(); bool messageHandler(Message msg); - bool onChanHandler(Message msg); QString getName(); }; diff --git a/ircbot/module.cpp b/ircbot/module.cpp index c160619..9931aa3 100644 --- a/ircbot/module.cpp +++ b/ircbot/module.cpp @@ -1,4 +1,6 @@ #include "module.h" +#include "user.h" +#include "basemodule.h" QString Module::getAnswer() { @@ -32,6 +34,14 @@ int Module::getNbModules() return modules->size(); } +UserList* Module::getUsers() +{ + if(modules == NULL) + return NULL; + BaseModule* base = (BaseModule*)(modules->at(0)); + return base->getUserList(); +} + Module* Module::getModule(int index) { if(modules == NULL) diff --git a/ircbot/module.h b/ircbot/module.h index aab0348..551249d 100644 --- a/ircbot/module.h +++ b/ircbot/module.h @@ -4,6 +4,7 @@ #include #include +class UserList; class Message; class Module @@ -21,6 +22,7 @@ protected: QString getChan(); int getNbModules(); Module* getModule(int index); + UserList* getUsers(); QString pong(QString target); QString join(QString theChan);