added regis module

This commit is contained in:
Anselme 2015-05-31 00:43:20 +02:00
parent 0014f08700
commit 6ff62f34b3
8 changed files with 115 additions and 14 deletions

View File

@ -9,4 +9,8 @@ release:LIBS += ../ircbot/release/libircbot.a
INCLUDEPATH += ../ircbot INCLUDEPATH += ../ircbot
SOURCES = main.cpp SOURCES = main.cpp \
regismodule.cpp
HEADERS += \
regismodule.h

View File

@ -2,6 +2,7 @@
#include "module.h" #include "module.h"
#include "message.h" #include "message.h"
#include "basemodule.h" #include "basemodule.h"
#include "regismodule.h"
class CustomModule : public Module class CustomModule : public Module
{ {
@ -12,8 +13,7 @@ public :
{ {
if(msg.args.compare("plop ?") == 0) if(msg.args.compare("plop ?") == 0)
{ {
answer = say("coucou"); answer = say("coucou " + msg.nick);
return true; return true;
} }
return false; return false;
@ -29,5 +29,6 @@ int main(int argc, char *argv[])
{ {
BotApp app = BotApp(argc, argv); BotApp app = BotApp(argc, argv);
app.addModule(new CustomModule()); app.addModule(new CustomModule());
app.addModule(new RegisModule());
return app.exec(); return app.exec();
} }

53
app/regismodule.cpp Normal file
View File

@ -0,0 +1,53 @@
#include "regismodule.h"
#include "message.h"
#include <time.h>
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";
}

19
app/regismodule.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef REGISMODULE_H
#define REGISMODULE_H
#include "module.h"
#include <vector>
#include <QString>
class RegisModule : public Module
{
std::vector<QString> noms;
std::vector<QString> verbes;
std::vector<QString> adjectifs;
public:
RegisModule();
virtual bool messageHandler(Message msg);
virtual QString getName();
};
#endif // REGISMODULE_H

View File

@ -4,7 +4,12 @@
BaseModule::BaseModule() : Module(), status(OFFLINE) BaseModule::BaseModule() : Module(), status(OFFLINE)
{ {
users = new UserList();
}
BaseModule::~BaseModule()
{
delete(users);
} }
bool BaseModule::messageHandler(Message msg) bool BaseModule::messageHandler(Message msg)
@ -41,7 +46,7 @@ bool BaseModule::messageHandler(Message msg)
bool BaseModule::onChanHandler(Message msg) bool BaseModule::onChanHandler(Message msg)
{ {
bool ret = false; bool ret = false;
User* src = users.getFromNick(msg.nick); User* src = users->getFromNick(msg.nick);
// si la ligne est un message // si la ligne est un message
if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0) 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) else if(msg.args.compare("!list") == 0)
{ {
QString str = "Online users : "; QString str = "Online users : ";
for(User* u : users) for(User* u : *users)
{ {
if(u->isOp()) if(u->isOp())
str.append("@"); str.append("@");
@ -124,9 +129,9 @@ bool BaseModule::onChanHandler(Message msg)
else if(msg.command.compare("NICK", Qt::CaseInsensitive) == 0) else if(msg.command.compare("NICK", Qt::CaseInsensitive) == 0)
src->rename(msg.args); src->rename(msg.args);
else if(msg.command.compare("QUIT", Qt::CaseInsensitive) == 0) else if(msg.command.compare("QUIT", Qt::CaseInsensitive) == 0)
users.remove(src); users->remove(src);
else if(msg.command.compare("PART", Qt::CaseInsensitive) == 0) else if(msg.command.compare("PART", Qt::CaseInsensitive) == 0)
users.remove(src); users->remove(src);
else if(msg.command.compare("KICK", Qt::CaseInsensitive) == 0) else if(msg.command.compare("KICK", Qt::CaseInsensitive) == 0)
{ {
if(getNick().compare(msg.target2) == 0) if(getNick().compare(msg.target2) == 0)
@ -134,13 +139,13 @@ bool BaseModule::onChanHandler(Message msg)
answer += quit("i've been kicked :("); answer += quit("i've been kicked :(");
ret = true; ret = true;
} }
users.remove(users.getFromNick(msg.target2)); users->remove(users->getFromNick(msg.target2));
} }
else if(msg.command.compare("JOIN", Qt::CaseInsensitive) == 0 else if(msg.command.compare("JOIN", Qt::CaseInsensitive) == 0
&& msg.args.contains(getChan()) && msg.args.contains(getChan())
&& getNick().compare(msg.nick) != 0) && getNick().compare(msg.nick) != 0)
{ {
users.getOrAdd(msg.nick); users->getOrAdd(msg.nick);
answer += whois(msg.nick); answer += whois(msg.nick);
ret = true; ret = true;
} }
@ -153,7 +158,7 @@ bool BaseModule::onChanHandler(Message msg)
QStringList names = msg.args.split(' '); QStringList names = msg.args.split(' ');
for(QString s : names) for(QString s : names)
{ {
User* u = users.getOrAdd(s); User* u = users->getOrAdd(s);
answer += whois(u->getNick()); answer += whois(u->getNick());
ret = true; 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 // 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) 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(' '); QStringList chanList = msg.args.split(' ');
for(QString s : chanList) for(QString s : chanList)
{ {
@ -176,6 +181,11 @@ bool BaseModule::onChanHandler(Message msg)
return ret; return ret;
} }
UserList* BaseModule::getUserList()
{
return users;
}
QString BaseModule::getName() QString BaseModule::getName()
{ {
return "base"; return "base";

View File

@ -6,15 +6,17 @@
class BaseModule : public Module class BaseModule : public Module
{ {
UserList users; UserList* users;
enum{OFFLINE, ONLINE, ON_CHAN}; enum{OFFLINE, ONLINE, ON_CHAN};
int status; int status;
bool onChanHandler(Message msg);
public: public:
BaseModule(); BaseModule();
~BaseModule();
UserList* getUserList();
bool messageHandler(Message msg); bool messageHandler(Message msg);
bool onChanHandler(Message msg);
QString getName(); QString getName();
}; };

View File

@ -1,4 +1,6 @@
#include "module.h" #include "module.h"
#include "user.h"
#include "basemodule.h"
QString Module::getAnswer() QString Module::getAnswer()
{ {
@ -32,6 +34,14 @@ int Module::getNbModules()
return modules->size(); 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) Module* Module::getModule(int index)
{ {
if(modules == NULL) if(modules == NULL)

View File

@ -4,6 +4,7 @@
#include <QString> #include <QString>
#include <vector> #include <vector>
class UserList;
class Message; class Message;
class Module class Module
@ -21,6 +22,7 @@ protected:
QString getChan(); QString getChan();
int getNbModules(); int getNbModules();
Module* getModule(int index); Module* getModule(int index);
UserList* getUsers();
QString pong(QString target); QString pong(QString target);
QString join(QString theChan); QString join(QString theChan);