SparrowBot/ircbot/message.cpp
2016-10-14 14:19:43 +02:00

67 lines
1.8 KiB
C++

#include "message.h"
#include <QStringList>
#include <vector>
#include <QRegExp>
Message::Message(QString str)
{
if(str.startsWith("PING"))
{
command = "PING";
nick = str.split(':')[1];
args = nick;
target = nick;
}
else
{
/* Regex parsing (not working yet) *//*
QRegExp commandAndTargetRegex(" ([^ ]+) ");
QRegExp nameRegex(":([^ ]+)![^ ]+ ");
QRegExp nameRegex2(":([^ ]+) ");
QRegExp argsRegex(":[^ ]+ [^:]+:(.*)");
int pos = commandAndTargetRegex.indexIn(str);
command = commandAndTargetRegex.cap(1);
pos = commandAndTargetRegex.indexIn(str, pos);
target = commandAndTargetRegex.cap(1);
if(commandAndTargetRegex.indexIn(str, pos) != -1)
target2 = commandAndTargetRegex.cap(1);
if(nameRegex.indexIn(str) == -1)
{
nameRegex2.indexIn(str);
nick = nameRegex2.cap(1);
}
else
nick = nameRegex.cap(1);
argsRegex.indexIn(str);
args = argsRegex.cap(1);
*/
/* manual parsing */
// remove the first char, which is ':'
str = str.remove(0, 1);
// the interesting infos are separated by spaces
QStringList list = str.split(' ');
// source of the message (creates the user if he is new)
QString temp = list.takeFirst();
nick = temp.left(temp.indexOf('!'));
// command issued by the source
command = list.takeFirst();
// target of the command
target = list.takeFirst();
if(!list.empty())
target2 = list.takeFirst();
// locate the mid ':' separator
int mid = str.indexOf(':', temp.length()+1);
// the arguments are after the separator
args = str.right(str.size()-(mid+1));
}
}
Message::~Message()
{
}