changed structure of the application to be more easily exportable
This commit is contained in:
		
							parent
							
								
									a61b2ba603
								
							
						
					
					
						commit
						a0aca93799
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -4,3 +4,4 @@ release/*
 | 
				
			|||||||
*.user
 | 
					*.user
 | 
				
			||||||
*.Debug
 | 
					*.Debug
 | 
				
			||||||
*.Release
 | 
					*.Release
 | 
				
			||||||
 | 
					Makefile
 | 
				
			||||||
 | 
				
			|||||||
@ -10,19 +10,20 @@ TARGET = SparrowBot
 | 
				
			|||||||
TEMPLATE = app
 | 
					TEMPLATE = app
 | 
				
			||||||
CONFIG += c++11
 | 
					CONFIG += c++11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOURCES += main.cpp\
 | 
					SOURCES += mainwindow.cpp \
 | 
				
			||||||
        mainwindow.cpp \
 | 
					 | 
				
			||||||
    sparrowbot.cpp \
 | 
					 | 
				
			||||||
    socketirc.cpp \
 | 
					    socketirc.cpp \
 | 
				
			||||||
    message.cpp \
 | 
					    message.cpp \
 | 
				
			||||||
    user.cpp \
 | 
					    user.cpp \
 | 
				
			||||||
    prompt.cpp
 | 
					    prompt.cpp \
 | 
				
			||||||
 | 
					    ircbot.cpp \
 | 
				
			||||||
 | 
					    botapp.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HEADERS += mainwindow.h \
 | 
					HEADERS += mainwindow.h \
 | 
				
			||||||
    sparrowbot.h \
 | 
					 | 
				
			||||||
    socketirc.h \
 | 
					    socketirc.h \
 | 
				
			||||||
    message.h \
 | 
					    message.h \
 | 
				
			||||||
    user.h \
 | 
					    user.h \
 | 
				
			||||||
    prompt.h
 | 
					    prompt.h \
 | 
				
			||||||
 | 
					    ircbot.h \
 | 
				
			||||||
 | 
					    botapp.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FORMS    += mainwindow.ui
 | 
					FORMS    += mainwindow.ui
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								botapp.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								botapp.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					#include "botapp.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BotApp::BotApp(int argc, char** argv) :
 | 
				
			||||||
 | 
					    nogui(false),
 | 
				
			||||||
 | 
					    server("irc.freenode.net"),
 | 
				
			||||||
 | 
					    port(6667),
 | 
				
			||||||
 | 
					    nick("SparrowBotDebug"),
 | 
				
			||||||
 | 
					    chan("epicsparrow")
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // parsing arguments
 | 
				
			||||||
 | 
					    for(int i=1; i<argc; ++i)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        QString str = QString(argv[i]);
 | 
				
			||||||
 | 
					        if(str.compare("-nogui") == 0)
 | 
				
			||||||
 | 
					            nogui = true;
 | 
				
			||||||
 | 
					        else if(str.contains('='))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            QStringList argList = str.split('=');
 | 
				
			||||||
 | 
					            if(argList.size() == 2)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                QString key = argList.at(0);
 | 
				
			||||||
 | 
					                if(key.compare("server") == 0)
 | 
				
			||||||
 | 
					                    server = argList.at(1);
 | 
				
			||||||
 | 
					                else if(key.compare("port") == 0)
 | 
				
			||||||
 | 
					                    port = argList.at(1).toInt();
 | 
				
			||||||
 | 
					                else if(key.compare("nick") == 0)
 | 
				
			||||||
 | 
					                    nick = argList.at(1);
 | 
				
			||||||
 | 
					                else if(key.compare("chan") == 0)
 | 
				
			||||||
 | 
					                    chan = argList.at(1);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sock = new SocketIRC(server, port);
 | 
				
			||||||
 | 
					    bot = new IRCBot(nick, chan);
 | 
				
			||||||
 | 
					    if(nogui)
 | 
				
			||||||
 | 
					        coreApp = new QCoreApplication(argc, argv);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        coreApp = new QApplication(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QObject::connect(sock, SIGNAL(receivedMsg(QString)), bot, SLOT(receiveMsg(QString)));
 | 
				
			||||||
 | 
					    QObject::connect(bot, SIGNAL(sendMsg(QString)), sock, SLOT(sendMsg(QString)));
 | 
				
			||||||
 | 
					    QObject::connect(coreApp, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BotApp::~BotApp()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    delete(sock);
 | 
				
			||||||
 | 
					    delete(bot);
 | 
				
			||||||
 | 
					    if(!nogui)
 | 
				
			||||||
 | 
					        delete(window);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int BotApp::exec()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(!nogui)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        window = new MainWindow();
 | 
				
			||||||
 | 
					        QObject::connect(sock, SIGNAL(receivedMsg(QString)), window->getConsole(), SLOT(append(QString)));
 | 
				
			||||||
 | 
					        QObject::connect(bot, SIGNAL(sendMsg(QString)), window->getConsole(), SLOT(append(QString)));
 | 
				
			||||||
 | 
					        QObject::connect(window->getPrompt(), SIGNAL(sendMsg(QString)), sock, SLOT(sendMsg(QString)));
 | 
				
			||||||
 | 
					        QObject::connect(window->getPrompt(), SIGNAL(returnPressed()), window->getPrompt(), SLOT(confirmationPerformed()));
 | 
				
			||||||
 | 
					        window->show();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return sock->connectToServer(coreApp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    BotApp app = BotApp(argc, argv);
 | 
				
			||||||
 | 
					    return app.exec();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								botapp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								botapp.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					#ifndef BOTAPP_H
 | 
				
			||||||
 | 
					#define BOTAPP_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mainwindow.h"
 | 
				
			||||||
 | 
					#include "socketirc.h"
 | 
				
			||||||
 | 
					#include "ircbot.h"
 | 
				
			||||||
 | 
					#include <QApplication>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BotApp
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    bool nogui = false;
 | 
				
			||||||
 | 
					    QString server = "irc.freenode.net";
 | 
				
			||||||
 | 
					    int port = 6667;
 | 
				
			||||||
 | 
					    QString nick = "SparrowBotDebug";
 | 
				
			||||||
 | 
					    QString chan = "epicsparrow";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SocketIRC* sock;
 | 
				
			||||||
 | 
					    IRCBot* bot;
 | 
				
			||||||
 | 
					    QCoreApplication* coreApp;
 | 
				
			||||||
 | 
					    MainWindow* window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    BotApp(int argc, char** argv);
 | 
				
			||||||
 | 
					    ~BotApp();
 | 
				
			||||||
 | 
					    int exec();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // BOTAPP_H
 | 
				
			||||||
@ -1,11 +1,11 @@
 | 
				
			|||||||
#include "sparrowbot.h"
 | 
					#include "ircbot.h"
 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <QStringList>
 | 
					#include <QStringList>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SparrowBot::receiveMsg(QString str)
 | 
					void IRCBot::receiveMsg(QString str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Message msg = Message(str, &users);
 | 
					    Message msg = Message(str, &users);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,7 +31,7 @@ void SparrowBot::receiveMsg(QString str)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SparrowBot::handleMessage(Message msg)
 | 
					void IRCBot::handleMessage(Message msg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // si la ligne est un message
 | 
					    // si la ligne est un message
 | 
				
			||||||
    if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0)
 | 
					    if(msg.command.compare(QString("PRIVMSG"), Qt::CaseInsensitive) == 0)
 | 
				
			||||||
@ -105,42 +105,42 @@ void SparrowBot::handleMessage(Message msg)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::pong(QString target)
 | 
					QString IRCBot::pong(QString target)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("PONG :%1").arg(target);
 | 
					    return QString("PONG :%1").arg(target);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::join(QString theChan)
 | 
					QString IRCBot::join(QString theChan)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("JOIN #%1").arg(theChan);
 | 
					    return QString("JOIN #%1").arg(theChan);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::whois(QString nick)
 | 
					QString IRCBot::whois(QString nick)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("WHOIS %1").arg(nick);
 | 
					    return QString("WHOIS %1").arg(nick);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::say(QString str)
 | 
					QString IRCBot::say(QString str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("PRIVMSG #%1 :%2").arg(chan).arg(str);
 | 
					    return QString("PRIVMSG #%1 :%2").arg(chan).arg(str);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::privateSay(QString str, QString target)
 | 
					QString IRCBot::privateSay(QString str, QString target)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("PRIVMSG %1 :%2").arg(target).arg(str);
 | 
					    return QString("PRIVMSG %1 :%2").arg(target).arg(str);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::action(QString str)
 | 
					QString IRCBot::action(QString str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("PRIVMSG #%1 :\001ACTION %2\001").arg(chan).arg(str);
 | 
					    return QString("PRIVMSG #%1 :\001ACTION %2\001").arg(chan).arg(str);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString SparrowBot::quit(QString str)
 | 
					QString IRCBot::quit(QString str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return QString("QUIT :%1").arg(str);
 | 
					    return QString("QUIT :%1").arg(str);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SparrowBot::disconnect()
 | 
					void IRCBot::disconnect()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    emit sendMsg(quit("I'll be back"));
 | 
					    emit sendMsg(quit("I'll be back"));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,11 +1,11 @@
 | 
				
			|||||||
#ifndef SPARROWBOT_H
 | 
					#ifndef IRCBOT_H
 | 
				
			||||||
#define SPARROWBOT_H
 | 
					#define IRCBOT_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "user.h"
 | 
					#include "user.h"
 | 
				
			||||||
#include "message.h"
 | 
					#include "message.h"
 | 
				
			||||||
#include <QObject>
 | 
					#include <QObject>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SparrowBot : public QObject
 | 
					class IRCBot : public QObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -17,11 +17,12 @@ class SparrowBot : public QObject
 | 
				
			|||||||
    UserList users;
 | 
					    UserList users;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    SparrowBot(QString nick_, QString chan_) : nick(nick_), chan(chan_), status(OFFLINE) {}
 | 
					    IRCBot(QString nick_, QString chan_) : nick(nick_), chan(chan_), status(OFFLINE) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void handleMessage(Message msg);
 | 
					    void handleMessage(Message msg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
    // IRC commands
 | 
					    // IRC commands
 | 
				
			||||||
    QString pong(QString target);
 | 
					    QString pong(QString target);
 | 
				
			||||||
    QString join(QString theChan);
 | 
					    QString join(QString theChan);
 | 
				
			||||||
@ -39,4 +40,4 @@ signals:
 | 
				
			|||||||
    void sendMsg(QString msg);
 | 
					    void sendMsg(QString msg);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // SPARROWBOT_H
 | 
					#endif // IRCBOT_H
 | 
				
			||||||
							
								
								
									
										75
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								main.cpp
									
									
									
									
									
								
							@ -1,75 +0,0 @@
 | 
				
			|||||||
#include "mainwindow.h"
 | 
					 | 
				
			||||||
#include "socketirc.h"
 | 
					 | 
				
			||||||
#include "sparrowbot.h"
 | 
					 | 
				
			||||||
#include <QApplication>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int main(int argc, char *argv[])
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    bool nogui = false;
 | 
					 | 
				
			||||||
    QString server = "irc.freenode.net";
 | 
					 | 
				
			||||||
    int port = 6667;
 | 
					 | 
				
			||||||
    QString nick = "SparrowBotDebug";
 | 
					 | 
				
			||||||
    QString chan = "epicsparrow";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // parsing arguments
 | 
					 | 
				
			||||||
    for(int i=1; i<argc; ++i)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        QString str = QString(argv[i]);
 | 
					 | 
				
			||||||
        if(str.compare("-nogui") == 0)
 | 
					 | 
				
			||||||
            nogui = true;
 | 
					 | 
				
			||||||
        else if(str.contains('='))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            QStringList argList = str.split('=');
 | 
					 | 
				
			||||||
            if(argList.size() == 2)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                QString key = argList.at(0);
 | 
					 | 
				
			||||||
                if(key.compare("server") == 0)
 | 
					 | 
				
			||||||
                    server = argList.at(1);
 | 
					 | 
				
			||||||
                else if(key.compare("port") == 0)
 | 
					 | 
				
			||||||
                    port = argList.at(1).toInt();
 | 
					 | 
				
			||||||
                else if(key.compare("nick") == 0)
 | 
					 | 
				
			||||||
                    nick = argList.at(1);
 | 
					 | 
				
			||||||
                else if(key.compare("chan") == 0)
 | 
					 | 
				
			||||||
                    chan = argList.at(1);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // create the socket
 | 
					 | 
				
			||||||
    SocketIRC sock(server, port);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // create the bot
 | 
					 | 
				
			||||||
    SparrowBot* bot = new SparrowBot(nick, chan);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // connect the bot to the socket
 | 
					 | 
				
			||||||
    QObject::connect(&sock, SIGNAL(receivedMsg(QString)), bot, SLOT(receiveMsg(QString)));
 | 
					 | 
				
			||||||
    QObject::connect(bot, SIGNAL(sendMsg(QString)), &sock, SLOT(sendMsg(QString)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // set up UI
 | 
					 | 
				
			||||||
    if(!nogui)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        QApplication app(argc, argv);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // init window
 | 
					 | 
				
			||||||
        MainWindow w;
 | 
					 | 
				
			||||||
        QObject::connect(&sock, SIGNAL(receivedMsg(QString)), w.getConsole(), SLOT(append(QString)));
 | 
					 | 
				
			||||||
        QObject::connect(bot, SIGNAL(sendMsg(QString)), w.getConsole(), SLOT(append(QString)));
 | 
					 | 
				
			||||||
        QObject::connect(w.getPrompt(), SIGNAL(sendMsg(QString)), &sock, SLOT(sendMsg(QString)));
 | 
					 | 
				
			||||||
        QObject::connect(w.getPrompt(), SIGNAL(returnPressed()), w.getPrompt(), SLOT(confirmationPerformed()));
 | 
					 | 
				
			||||||
        w.show();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        QObject::connect(&app, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sock.connectToServer(&app);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        QCoreApplication coreApp(argc, argv);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        QObject::connect(&coreApp, SIGNAL(aboutToQuit()), bot, SLOT(disconnect()));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sock.connectToServer(&coreApp);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    delete(bot);
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -20,7 +20,7 @@ void SocketIRC::sendMsg(QString msg)
 | 
				
			|||||||
    sock.flush();
 | 
					    sock.flush();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SocketIRC::connectToServer(QCoreApplication* app_)
 | 
					int SocketIRC::connectToServer(QCoreApplication* app_)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    app = app_;
 | 
					    app = app_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -34,9 +34,9 @@ void SocketIRC::connectToServer(QCoreApplication* app_)
 | 
				
			|||||||
        if(app != NULL)
 | 
					        if(app != NULL)
 | 
				
			||||||
            app->exit();
 | 
					            app->exit();
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            exit(0);
 | 
					            return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    app->exec();
 | 
					    return app->exec();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SocketIRC::readMsg()
 | 
					void SocketIRC::readMsg()
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ public:
 | 
				
			|||||||
    SocketIRC(QString server_, int port_);
 | 
					    SocketIRC(QString server_, int port_);
 | 
				
			||||||
    void setServer(QString server_);
 | 
					    void setServer(QString server_);
 | 
				
			||||||
    void setPort(int port_);
 | 
					    void setPort(int port_);
 | 
				
			||||||
    void connectToServer(QCoreApplication* app_);
 | 
					    int connectToServer(QCoreApplication* app_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user