fixed major bug
This commit is contained in:
		
							parent
							
								
									49ba5d82df
								
							
						
					
					
						commit
						2f6c2be025
					
				
							
								
								
									
										2
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.cpp
									
									
									
									
									
								
							@ -7,7 +7,7 @@ int main(int argc, char *argv[])
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    // set up the socket
 | 
					    // set up the socket
 | 
				
			||||||
    SocketIRC sock;
 | 
					    SocketIRC sock;
 | 
				
			||||||
    sock.setServer("irc.freenode.net");
 | 
					    sock.setServer("localhost");
 | 
				
			||||||
    sock.setPort(6667);
 | 
					    sock.setPort(6667);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // set up the bot
 | 
					    // set up the bot
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								message.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								message.cpp
									
									
									
									
									
								
							@ -5,14 +5,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Message::Message(QString str, UserList users)
 | 
					Message::Message(QString str, UserList* users)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(str.startsWith("PING"))
 | 
					    if(str.startsWith("PING"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        command = "PING";
 | 
					        command = "PING";
 | 
				
			||||||
        target = "PING";
 | 
					        target = "PING";
 | 
				
			||||||
        src = NULL;
 | 
					        src = NULL;
 | 
				
			||||||
        args = str.split(':')[1];
 | 
					        nick = str.split(':')[1];
 | 
				
			||||||
 | 
					        args = nick;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -25,8 +26,9 @@ Message::Message(QString str, UserList users)
 | 
				
			|||||||
        // 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 (creates the user if he is new)
 | 
					        // source of the message (creates the user if he is new)
 | 
				
			||||||
        QString nick = list.takeFirst();
 | 
					        QString temp = list.takeFirst();
 | 
				
			||||||
        src = users.getOrAdd(nick.left(nick.indexOf('!')));
 | 
					        nick = temp.left(temp.indexOf('!'));
 | 
				
			||||||
 | 
					        src = users->getFromNick(nick);
 | 
				
			||||||
        // command issued by the source
 | 
					        // command issued by the source
 | 
				
			||||||
        command = list.takeFirst();
 | 
					        command = list.takeFirst();
 | 
				
			||||||
        // target of the command
 | 
					        // target of the command
 | 
				
			||||||
 | 
				
			|||||||
@ -10,11 +10,12 @@ class Message
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    User* src;
 | 
					    User* src;
 | 
				
			||||||
 | 
					    QString nick;
 | 
				
			||||||
    QString command;
 | 
					    QString command;
 | 
				
			||||||
    QString target;
 | 
					    QString target;
 | 
				
			||||||
    QString target2;
 | 
					    QString target2;
 | 
				
			||||||
    QString args;
 | 
					    QString args;
 | 
				
			||||||
    Message(QString str, UserList users);
 | 
					    Message(QString str, UserList* users);
 | 
				
			||||||
    ~Message();
 | 
					    ~Message();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,23 +7,25 @@ using namespace std;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void SparrowBot::receiveMsg(QString str)
 | 
					void SparrowBot::receiveMsg(QString str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Message msg = Message(str, users);
 | 
					    Message msg = Message(str, &users);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(status)
 | 
					    switch(status)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    case OFFLINE :
 | 
					    case OFFLINE :
 | 
				
			||||||
        status = ONLINE;
 | 
					        status = ONLINE;
 | 
				
			||||||
        sendMsg(QString("NICK %1\r\nUSER %2 0 * %3\r\n").arg(nick).arg(nick).arg(nick));
 | 
					        emit sendMsg(QString("NICK %1\r\nUSER %2 0 * %3\r\n").arg(nick).arg(nick).arg(nick));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case ONLINE :
 | 
					    case ONLINE :
 | 
				
			||||||
        if(str.contains("PING"))
 | 
					        if(str.contains("PING"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            status = ON_CHAN;
 | 
					            status = ON_CHAN;
 | 
				
			||||||
            sendMsg(QString("PONG :%1\r\n").arg(msg.args));
 | 
					            emit sendMsg(QString("PONG :%1\r\n").arg(msg.nick));
 | 
				
			||||||
            sendMsg("JOIN #" + chan + "\r\n");
 | 
					            emit sendMsg("JOIN #" + chan + "\r\n");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case ON_CHAN :
 | 
					    case ON_CHAN :
 | 
				
			||||||
 | 
					        if(str.contains("PING"))
 | 
				
			||||||
 | 
					            emit sendMsg(QString("PONG :%1\r\n").arg(msg.nick));
 | 
				
			||||||
        handleMessage(msg);
 | 
					        handleMessage(msg);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -79,7 +81,10 @@ void SparrowBot::handleMessage(Message msg)
 | 
				
			|||||||
        users.remove(msg.src);
 | 
					        users.remove(msg.src);
 | 
				
			||||||
    else if(msg.command.compare("JOIN", Qt::CaseInsensitive) == 0
 | 
					    else if(msg.command.compare("JOIN", Qt::CaseInsensitive) == 0
 | 
				
			||||||
            && msg.args.contains(chan))
 | 
					            && msg.args.contains(chan))
 | 
				
			||||||
        emit sendMsg(QString("WHOIS %1\r\n").arg(msg.src->getNick()));
 | 
					    {
 | 
				
			||||||
 | 
					        users.getOrAdd(msg.nick);
 | 
				
			||||||
 | 
					        emit sendMsg(QString("WHOIS %1\r\n").arg(msg.nick));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 353 = code de la ligne qui liste les nicks connectés
 | 
					    // 353 = code de la ligne qui liste les nicks connectés
 | 
				
			||||||
    // on les parse et on effectue un WHOIS sur chaque nick
 | 
					    // on les parse et on effectue un WHOIS sur chaque nick
 | 
				
			||||||
@ -89,9 +94,8 @@ 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 = new User(s);
 | 
					            users.getOrAdd(s);
 | 
				
			||||||
            users.push_back(u);
 | 
					            emit sendMsg(QString("WHOIS %1\r\n").arg(s));
 | 
				
			||||||
            emit sendMsg(QString("WHOIS %1\r\n").arg(u->getNick()));
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user