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
SOURCES = main.cpp
SOURCES = main.cpp \
regismodule.cpp
HEADERS += \
regismodule.h

View File

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

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)
{
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";

View File

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

View File

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

View File

@ -4,6 +4,7 @@
#include <QString>
#include <vector>
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);