diff options
Diffstat (limited to 'qt/consoleserver/irc.cpp')
-rw-r--r-- | qt/consoleserver/irc.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/qt/consoleserver/irc.cpp b/qt/consoleserver/irc.cpp new file mode 100644 index 0000000..3a2ed79 --- /dev/null +++ b/qt/consoleserver/irc.cpp @@ -0,0 +1,114 @@ +#include "irc.h" + +irc::irc(QObject *parent) : QObject(parent) +{ + qDebug() << "irc loaded but not started"; +} + +void irc::setup(QString srv, int p, QString c, QString n) +{ + qDebug() << "irc started"; + server = srv; + port = p; + channel = c; + name = n; + /* setup socket, connect signal/slot */ + socket = new QTcpSocket(this); + connect(socket, SIGNAL(readyRead()), this, SLOT(read())); + pingcheck = new QTimer(this); + connect(pingcheck, SIGNAL(timeout()), this, SLOT(pingcheckfunc())); + /* connect */ + con(); +} + +void irc::read() +{ + QString line = socket->readLine(); + if (line.contains("PING :")) + { + pinged = true; + QString sline = "PONG :" + line.split(":")[1]; + socket->write(sline.toLatin1()); + } + QString tmp = name + " MODE " + name + " :+"; + if (line.contains(tmp)) + { + buf = "JOIN " + channel + "\r\n"; + socket->write(buf.toUtf8()); + } + if (line.contains("!")) /* most likely a message to handle */ + handle(line); + if(socket->canReadLine()) + read(); +} + +void irc::con() +{ + pinged = false; + socket->connectToHost(server, port); + buf = "NICK " + name + "\r\n"; + socket->write(buf.toUtf8()); + buf = "USER " + name + " 8 * :" + name + "\r\n"; + socket->write(buf.toUtf8()); + pingcheck->start(300000); +} + +void irc::discon() +{ + socket->write("QUIT :elegant quit \r\n"); + socket->close(); + pingcheck->stop(); +} + +void irc::handle(QString str) +{ + /* :Scruffy!Scruff@i.am.huskehhh.com PRIVMSG #csgo :You a vim faggot? */ + if (str.contains("PRIVMSG")) + { + + QString usr = str.split("!")[0].replace(":", ""); + QString msg = str.split("PRIVMSG")[1].split(":")[1]; + if (usr == "daniel_j") + { + if (msg.contains("!send")) + { + + msg.remove(QRegExp("[\\n\\t\\r]")); + msg.replace("!send ", ""); + if (msg.contains(";")) + { + QStringList tmp = msg.split(";"); + for (int x = 0; x < tmp.size(); x++) + { + emit sendcmd(tmp.at(x)); + } + } + else + { + emit sendcmd(msg); + } + } + } + } +} + +void irc::sendmsg(QString msg) +{ + buf = "PRIVMSG " + channel + " :" + msg + " \r\n"; + socket->write(buf.toUtf8()); +} + +void irc::pingcheckfunc() +{ + if (pinged) + { + pinged = false; + } + else + { + qDebug() << "reconnection needed"; + name = name + "_"; + discon(); + con(); + } +} |