summaryrefslogtreecommitdiff
path: root/qt/RGBController/irc.cpp
blob: 4365e19fec1143108f9ecc88b7aac87fd44652bd (plain)
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
#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()));
	contest = new QTimer(this);
	connect(contest, SIGNAL(timeout()), this, SLOT(testcon()));
	/* connect */
	con();
}

void irc::read()
{
	QString line = socket->readLine();
	if (line.contains("PING :"))
	{
		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()
{
	socket->connectToHost(server, port);
	buf = "NICK " + name + "\r\n";
	socket->write(buf.toUtf8());
	buf = "USER " + name + " 8 * :" + name + "\r\n";
	socket->write(buf.toUtf8());
	contest->start(60000);
}

void irc::discon()
{
	socket->write("QUIT :elegant quit \r\n");
	socket->close();
	contest->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::testcon()
{
	qDebug() << socket->state();
	if (socket->state() == QAbstractSocket::UnconnectedState)
	{
		qDebug() << "reconnect needed";
		discon();
		name = name + "_";
		con();
	}
}