1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#include "irc.h"
irc::irc(QObject *parent) : QObject(parent)
{
}
void irc::setup(QString srv, int p, QString c, QString n)
{
server = srv;
port = p;
channel = c;
name = n;
qDebug() << "irc::setup()";
/* 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 ", "");
qDebug() << "message for me";
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)
{
qDebug() << "reconnection not needed";
pinged = false;
}
else
{
qDebug() << "reconnection needed";
name = name + "_";
discon();
con();
}
}
|