the bot now recognises ops

This commit is contained in:
Anselme 2015-05-21 19:50:54 +02:00
parent 1644739ff7
commit b86a0c1845
6 changed files with 44 additions and 17 deletions

View File

@ -5,13 +5,13 @@
using namespace std; using namespace std;
Message::Message(QString str) Message::Message(QString str, UserList users)
{ {
if(str.startsWith("PING")) if(str.startsWith("PING"))
{ {
command = "PING"; command = "PING";
target = "PING"; target = "PING";
src = str.right(str.size()-(str.indexOf(':')+1)); src = NULL;
args = str; args = str;
} }
else else
@ -25,7 +25,8 @@ Message::Message(QString str)
// the interesting infos before the separator are separated by spaces // the interesting infos before the separator are separated by spaces
QStringList list = str.split(' '); QStringList list = str.split(' ');
// source of the message // source of the message
src = list.takeFirst(); QString nick = list.takeFirst();
src = users.getFromNick(nick.left(nick.indexOf('!')));
// command issued by the source // command issued by the source
command = list.takeFirst(); command = list.takeFirst();
// target of the command // target of the command

View File

@ -3,15 +3,17 @@
#include <string> #include <string>
#include <QString> #include <QString>
#include <vector>
#include "user.h"
class Message class Message
{ {
public: public:
QString src; User* src;
QString command; QString command;
QString target; QString target;
QString args; QString args;
Message(QString str); Message(QString str, UserList users);
~Message(); ~Message();
}; };

View File

@ -24,7 +24,7 @@ void SparrowBot::receiveMsg(QString msg)
sendRawMessage("JOIN #" + chan + "\r\n"); sendRawMessage("JOIN #" + chan + "\r\n");
break; break;
case ON_CHAN : case ON_CHAN :
handleMessage(Message(msg)); handleMessage(Message(msg, users));
break; break;
} }
} }
@ -40,18 +40,18 @@ void SparrowBot::forceStatus(int newStatus)
else else
{ {
status = OFFLINE; status = OFFLINE;
users.clear();
} }
} }
void SparrowBot::handleMessage(Message msg) void SparrowBot::handleMessage(Message msg)
{ {
//char* str = msg.args.toStdString().c_str();
if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0) if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0)
{ {
// message // message
if(msg.args.compare("!update") == 0) if(msg.args.compare("!update") == 0 && msg.src != NULL && msg.src->isOp())
{ {
sendRawMessage("QUIT :i'll be back\r\n"); sendRawMessage("QUIT :i'll be back\r\n");
exit(0); exit(0);
@ -59,8 +59,13 @@ void SparrowBot::handleMessage(Message msg)
if(msg.args.compare("!list") == 0) if(msg.args.compare("!list") == 0)
{ {
string str = "Online users : "; string str = "Online users : ";
for(User u : users) for(User* u : users)
str += u.getNick().toStdString() + " "; str += u->getNick().toStdString() + " ";
say(str);
str = "Online ops : ";
for(User* u : users)
if(u->isOp())
str += u->getNick().toStdString() + " ";
say(str); say(str);
} }
} }
@ -71,9 +76,9 @@ void SparrowBot::handleMessage(Message msg)
QStringList names = msg.args.split(' '); QStringList names = msg.args.split(' ');
for(QString s : names) for(QString s : names)
{ {
User u = User(s); User* u = new User(s);
users.push_back(u); users.push_back(u);
sendRawMessage("WHOIS "+u.getNick().toStdString()+"\r\n"); sendRawMessage("WHOIS "+u->getNick().toStdString()+"\r\n");
} }
} }
} }

View File

@ -4,7 +4,6 @@
#include "user.h" #include "user.h"
#include "message.h" #include "message.h"
#include <QObject> #include <QObject>
#include <vector>
class SparrowBot : public QObject class SparrowBot : public QObject
{ {
@ -16,7 +15,7 @@ class SparrowBot : public QObject
std::string chan; std::string chan;
int status; int status;
std::vector<User> users; UserList users;
public: public:
SparrowBot() : nick("SparrowBot"), chan("epicsparrow"), status(OFFLINE) {} SparrowBot() : nick("SparrowBot"), chan("epicsparrow"), status(OFFLINE) {}
SparrowBot(std::string nick_, std::string chan_) : nick(nick_), chan(chan_), status(OFFLINE) {} SparrowBot(std::string nick_, std::string chan_) : nick(nick_), chan(chan_), status(OFFLINE) {}

View File

@ -2,8 +2,8 @@
User::User(QString str) User::User(QString str)
{ {
isOp = (str.at(0) == '@'); op = (str.at(0) == '@');
if(isOp) if(op)
str = str.remove(0, 1); str = str.remove(0, 1);
nick = str; nick = str;
} }
@ -13,3 +13,15 @@ QString User::getNick()
return nick; return nick;
} }
bool User::isOp()
{
return op;
}
User* UserList::getFromNick(QString nick)
{
for(User* u : *this)
if(nick.compare(u->getNick()) == 0)
return u;
return NULL;
}

10
user.h
View File

@ -2,15 +2,23 @@
#define USER_H #define USER_H
#include <QString> #include <QString>
#include <vector>
class User class User
{ {
QString nick; QString nick;
bool isOp; bool op;
public: public:
User(QString str); User(QString str);
QString getNick(); QString getNick();
bool isOp();
};
class UserList : public std::vector<User*>
{
public:
User* getFromNick(QString nick);
}; };
#endif // USER_H #endif // USER_H