23 #include "ircnetworkadapter.h"
24 #include "irc/configuration/chatnetworkscfg.h"
25 #include "irc/configuration/ircconfig.h"
26 #include "irc/entities/ircuserprefix.h"
27 #include "irc/ops/ircdelayedoperationban.h"
28 #include "irc/ircchanneladapter.h"
29 #include "irc/ircglobal.h"
30 #include "irc/ircisupportparser.h"
31 #include "irc/ircmessageclass.h"
32 #include "irc/ircprivadapter.h"
33 #include "irc/ircrequestparser.h"
34 #include "irc/ircresponseparser.h"
35 #include "irc/ircuserinfo.h"
36 #include "irc/ircuserlist.h"
42 this->connectionInfo = connectionInfo;
43 this->bIsJoining =
false;
44 this->bEmitAllIRCMessages =
false;
49 ircClient.connectSocketSignals(pIrcSocketSignalsAdapter);
51 QObject::connect(&ircClient, SIGNAL( ircServerResponse(
const QString&) ),
52 this, SLOT( ircServerResponse(
const QString&) ) );
55 QObject::connect(&ircRequestParser, SIGNAL( echoPrivmsg(
const QString&,
const QString&) ),
56 this, SLOT( echoPrivmsg(
const QString&,
const QString&) ) );
58 QObject::connect(&ircRequestParser, SIGNAL( query(
const QString&) ),
62 QObject::connect(ircResponseParser, SIGNAL( helloClient(
const QString&) ),
63 this, SLOT( helloClient(
const QString&) ) );
65 QObject::connect(ircResponseParser, SIGNAL(iSupportReceived(QString)),
66 SLOT(appendISupportLine(QString)));
68 QObject::connect(ircResponseParser, SIGNAL( kick(
const QString&,
const QString&,
const QString&,
const QString&) ),
69 this, SLOT( kick(
const QString&,
const QString&,
const QString&,
const QString&) ) );
71 QObject::connect(ircResponseParser, SIGNAL( kill(
const QString&,
const QString&) ),
72 this, SLOT( kill(
const QString&,
const QString&) ) );
74 QObject::connect(ircResponseParser, SIGNAL( modeInfo(
const QString&,
const QString&,
const QString&) ),
75 this, SLOT( modeInfo(
const QString&,
const QString&,
const QString&) ) );
77 QObject::connect(ircResponseParser, SIGNAL( namesListReceived(
const QString&,
const QStringList&) ),
78 this, SLOT( namesListReceived(
const QString&,
const QStringList&) ) );
80 QObject::connect(ircResponseParser, SIGNAL( namesListEndReceived(
const QString&) ),
81 this, SLOT( namesListEndReceived(
const QString&) ) );
83 QObject::connect(ircResponseParser, SIGNAL( nicknameInUse(
const QString&) ),
84 this, SLOT( nicknameInUse(
const QString&) ) );
86 QObject::connect(ircResponseParser, SIGNAL( noSuchNickname(
const QString&) ),
87 this, SLOT( noSuchNickname(
const QString&) ) );
89 QObject::connect(ircResponseParser, SIGNAL ( parseError(
const QString&) ),
90 this, SLOT( parseError(
const QString&) ) );
94 QObject::connect(ircResponseParser, SIGNAL(
print(
const QString&,
const QString&)),
95 this, SLOT(
print(
const QString&,
const QString&) ), Qt::DirectConnection);
96 QObject::connect(ircResponseParser,
97 SIGNAL(printWithClass(
const QString&,
const QString&,
const IRCMessageClass&)),
98 this, SLOT(printWithClass(
const QString&,
const QString&,
const IRCMessageClass&)),
99 Qt::DirectConnection);
100 QObject::connect(ircResponseParser, SIGNAL(printToNetworksCurrentChatBox(QString,
IRCMessageClass)),
103 QObject::connect(ircResponseParser, SIGNAL ( privMsgReceived(
const QString&,
const QString&,
const QString&) ),
104 this, SLOT( privMsgReceived(
const QString&,
const QString&,
const QString&) ) );
105 QObject::connect(ircResponseParser, SIGNAL ( privMsgLiteralReceived(QString, QString,
IRCMessageClass) ),
108 QObject::connect(ircResponseParser, SIGNAL ( sendPongMessage(
const QString&) ),
109 this, SLOT( sendPong(
const QString&) ) );
111 QObject::connect(ircResponseParser, SIGNAL ( userChangesNickname(
const QString&,
const QString&) ),
112 this, SLOT( userChangesNickname(
const QString&,
const QString&) ) );
114 QObject::connect(ircResponseParser, SIGNAL(userIdleTime(QString,
int)),
115 this, SLOT(userIdleTime(QString,
int)));
117 QObject::connect(ircResponseParser, SIGNAL ( userJoinsChannel(
const QString&,
const QString&,
const QString&) ),
118 this, SLOT( userJoinsChannel(
const QString&,
const QString&,
const QString&) ) );
120 QObject::connect(ircResponseParser,
121 SIGNAL(userModeChanged(
const QString&,
const QString&,
const QList<char>&,
const QList<char>&)),
123 SLOT(userModeChanged(
const QString&,
const QString&,
const QList<char>&,
const QList<char>&)));
125 QObject::connect(ircResponseParser, SIGNAL(userNetworkJoinDateTime(QString, QDateTime)),
126 this, SLOT(userNetworkJoinDateTime(QString, QDateTime)));
128 QObject::connect(ircResponseParser, SIGNAL ( userPartsChannel(
const QString&,
const QString&,
const QString&) ),
129 this, SLOT( userPartsChannel(
const QString&,
const QString&,
const QString&) ) );
131 QObject::connect(ircResponseParser, SIGNAL ( userQuitsNetwork(
const QString&,
const QString&) ),
132 this, SLOT( userQuitsNetwork(
const QString&,
const QString&) ) );
134 QObject::connect(ircResponseParser, SIGNAL ( whoIsUser(
const QString&,
const QString&,
const QString&,
const QString&) ),
135 this, SLOT( whoIsUser(
const QString&,
const QString&,
const QString&,
const QString&) ) );
138 IRCNetworkAdapter::~IRCNetworkAdapter()
140 disconnect(gIRCConfig.personal.quitMessage);
142 killAllChatWindows();
143 delete this->ircResponseParser;
144 delete this->ircISupportParser;
145 delete this->pIrcSocketSignalsAdapter;
148 void IRCNetworkAdapter::appendISupportLine(
const QString &line)
150 print(line, QString());
151 ircISupportParser->appendLine(line);
152 ircISupportParser->parse();
158 op->setReason(reason);
162 QList<IRCAdapterBase*> IRCNetworkAdapter::childrenAdapters()
164 QList<IRCAdapterBase*> result;
172 void IRCNetworkAdapter::connect()
180 chatWindows.remove(pAdapter->recipient().toLower());
183 void IRCNetworkAdapter::disconnect(
const QString& farewellMessage)
185 sendMessage(
"/quit " + farewellMessage);
186 ircClient.disconnect();
196 if (!ircClient.isConnected())
198 pOrigin->emitError(tr(
"You are not connected to the network."));
202 IRCRequestParser::IRCRequestParseResult result = ircRequestParser.
parse(pOrigin, message);
203 QString parsedMessage = ircRequestParser.output();
207 case IRCRequestParser::ErrorInputInsufficientParameters:
208 pOrigin->emitError(tr(
"Insufficient parameters."));
211 case IRCRequestParser::ErrorInputNotPrependedWithSlash:
212 emit error(tr(
"This is a server window. All commands must be prepended with a '/' character."));
215 case IRCRequestParser::ErrorMessageEmpty:
216 pOrigin->emitError(tr(
"Attempted to send empty message."));
219 case IRCRequestParser::ErrorMessageTooLong:
220 pOrigin->emitError(tr(
"Command is too long."));
223 case IRCRequestParser::ErrorChatWindowOnly:
224 pOrigin->emitError(tr(
"Not a chat window."));
227 case IRCRequestParser::Ok:
228 ircClient.sendMessage(parsedMessage);
231 case IRCRequestParser::QuitCommand:
232 ircClient.sendMessage(parsedMessage);
233 emit messageWithClass(tr(
"Quit"), IRCMessageClass::NetworkAction);
238 void IRCNetworkAdapter::echoPrivmsg(
const QString& recipient,
const QString& content)
242 if (hasRecipient(recipient))
244 const QString& sender = this->myNickname();
245 privMsgReceived(recipient, sender, content);
249 IRCChatAdapter* IRCNetworkAdapter::getChatAdapter(
const QString& recipient)
253 if (recipient.isEmpty())
255 emit error(
"Doomseeker error: getChatAdapter() received empty recipient.");
259 QString recipientLowercase = recipient.toLower();
260 if (hasRecipient(recipientLowercase))
262 return chatWindows[recipientLowercase];
268 const IRCChatAdapter* IRCNetworkAdapter::getChatAdapter(
const QString& recipient)
const
272 if (recipient.isEmpty())
277 QString recipientLowercase = recipient.toLower();
278 if (hasRecipient(recipientLowercase))
280 return chatWindows[recipientLowercase];
286 IRCChatAdapter* IRCNetworkAdapter::getOrCreateNewChatAdapter(
const QString& recipient)
290 if (recipient.isEmpty())
292 emit error(
"Doomseeker error: getOrCreateNewChatAdapter() received empty recipient.");
296 QString recipientLowercase = recipient.toLower();
298 if (hasRecipient(recipientLowercase))
300 return chatWindows[recipientLowercase];
304 Log::instance << QString(
"IRCNetworkAdapter::getOrCreateNewChatAdapter() Creating new adapter for recipient: %1").arg(recipientLowercase);
307 if (IRCGlobal::isChannelName(recipient))
316 chatWindows.insert(recipientLowercase, pAdapter);
322 bool IRCNetworkAdapter::hasRecipient(
const QString& recipient)
const
324 QString recipientLowercase = recipient.toLower();
325 return (chatWindows.find(recipientLowercase) != chatWindows.end());
328 void IRCNetworkAdapter::helloClient(
const QString& nickname)
333 connectionInfo.
nick = nickname;
336 gLog << tr(
"IRC: Successfuly registered on network %1 [%2:%3]").arg(network.
description(), network.
address()).arg(network.
port());
338 this->bIsJoining =
false;
340 if (!network.nickservPassword().isEmpty())
342 QString messageNickserv = network.nickservCommand();
343 messageNickserv = messageNickserv.arg(network.nickservPassword());
345 this->sendMessage(messageNickserv);
349 if (!command.trimmed().isEmpty())
351 this->sendMessage(command);
357 if (IRCGlobal::isChannelName(channel))
367 const PatternList &IRCNetworkAdapter::ignoredUsersPatterns()
const
372 void IRCNetworkAdapter::ircServerResponse(
const QString& message)
376 if (this->bEmitAllIRCMessages || !result.
wasParsed())
378 emit this->message(message.trimmed().replace(
"\n",
"\\n"));
381 if (!result.isValid())
383 emit this->error(tr(
"Invalid parse result for mesage: %1").arg(message));
389 if (
this == pAdapter)
394 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
397 if (pChatWindow == pAdapter)
406 bool IRCNetworkAdapter::isMyNickname(
const QString& nickname)
const
409 return (myUserInfo.isSameNickname(nickname));
414 if (IRCGlobal::isChannelName(channel))
417 if (pChannelAdapter != NULL)
426 void IRCNetworkAdapter::kick(
const QString& channel,
const QString& byWhom,
const QString& whoIsKicked,
const QString& reason)
428 if (hasRecipient(channel))
432 if (isMyNickname(whoIsKicked))
434 this->emitMessageWithClass(tr(
"You have been kicked from channel %1 by %2 (Reason: %3)").arg(channel, byWhom, reason), IRCMessageClass::ChannelAction);
435 killChatWindow(channel);
439 pAdapter->emitMessageWithClass(tr(
"%1 was kicked by %2 (%3)").arg(whoIsKicked, byWhom, reason), IRCMessageClass::ChannelAction);
445 void IRCNetworkAdapter::kill(
const QString& victim,
const QString& comment)
447 emit message(QString(
"Connection for user %1 was killed. (%2)").arg(victim, comment));
453 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
456 pAdapter->
userLeaves(victim, comment, IRCChatAdapter::NetworkKill);
460 void IRCNetworkAdapter::killAllChatWindows()
462 QList<IRCChatAdapter*> pWindows = chatWindows.values();
474 void IRCNetworkAdapter::killChatWindow(
const QString& recipient)
476 if (hasRecipient(recipient))
479 chatWindows.remove(recipient.toLower());
488 void IRCNetworkAdapter::modeInfo(
const QString& channel,
const QString& whoSetThis,
const QString& modeParams)
491 pAdapter->emitMessageWithClass(tr(
"%1 sets mode: %2").arg(whoSetThis, modeParams), IRCMessageClass::ChannelAction);
494 void IRCNetworkAdapter::namesListReceived(
const QString& channel,
const QStringList& names)
496 if (this->hasRecipient(channel))
503 void IRCNetworkAdapter::namesListEndReceived(
const QString& channel)
505 if (this->hasRecipient(channel))
512 void IRCNetworkAdapter::nicknameInUse(
const QString& nickname)
514 emit messageToNetworksCurrentChatBox(tr(
"Nickname %1 is already taken.").arg(nickname), IRCMessageClass::Error);
515 if (this->bIsJoining)
519 if (this->connectionInfo.
nick.compare(altNick, Qt::CaseInsensitive) == 0)
521 emit messageWithClass(tr(
"Both nickname and alternate nickname are taken on this network."), IRCMessageClass::Error);
523 else if (altNick.isEmpty())
525 emit messageWithClass(tr(
"No alternate nickname specified."), IRCMessageClass::Error);
529 this->connectionInfo.
nick = altNick;
531 emit messageWithClass(tr(
"Using alternate nickname %1 to join.").arg(altNick), IRCMessageClass::NetworkAction);
532 QString message = QString(
"/nick %1").arg(altNick);
533 sendMessage(message);
538 void IRCNetworkAdapter::noSuchNickname(
const QString& nickname)
540 emit messageToNetworksCurrentChatBox(tr(
"User %1 is not logged in.").arg(nickname), IRCMessageClass::Error);
545 if (!isConnected() || recipientName.isEmpty())
550 bool bStandardRoutine = !IRCGlobal::isChannelName(recipientName)
551 || hasRecipient(recipientName);
553 if (bStandardRoutine)
555 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(recipientName);
556 pAdapter->emitFocusRequest();
558 else if (IRCGlobal::isChannelName(recipientName))
560 this->sendMessage(
"/join " + recipientName);
564 void IRCNetworkAdapter::parseError(
const QString& error)
566 emit this->error(tr(
"IRC parse error: %1").arg(error));
574 void IRCNetworkAdapter::printWithClass(
const QString& printWhat,
579 if (!printWhere.isEmpty())
582 if (pAdapterCandidate != NULL)
584 pAdapter = pAdapterCandidate;
590 if (pAdapter == NULL)
592 this->emitMessageWithClass(tr(
"FROM %1: %2").arg(printWhere, printWhat), msgClass);
599 if ( pAdapter ==
this && this->bEmitAllIRCMessages )
604 pAdapter->emitMessageWithClass(printWhat, msgClass);
608 void IRCNetworkAdapter::printToCurrentChatBox(
const QString& printWhat,
const IRCMessageClass& msgClass)
610 emit messageToNetworksCurrentChatBox(printWhat, msgClass);
613 void IRCNetworkAdapter::privMsgReceived(
const QString& recipient,
const QString& sender,
const QString& content)
615 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(recipient);
619 void IRCNetworkAdapter::printMsgLiteral(
const QString& recipient,
const QString& content,
622 this->getOrCreateNewChatAdapter(recipient);
623 printWithClass(content, recipient, msgClass);
626 void IRCNetworkAdapter::reloadNetworkEntityFromConfig()
630 if (entity.isValid())
632 setNetworkEntity(entity);
646 void IRCNetworkAdapter::sendCtcp(
const QString &nickname,
const QString &command)
648 QString msg = QString(
"/PRIVMSG %1 %2%3%2").arg(nickname).arg(QChar(0x1)).arg(command);
652 void IRCNetworkAdapter::sendPong(
const QString& toWhom)
654 QString message = QString(
"/PONG %1").arg(toWhom);
655 sendMessage(message);
660 QString cleanNickname =
userPrefixes().cleanNickname(nickname);
662 QString flagPrefixed;
665 flagPrefixed =
"+" + flag.trimmed();
669 flagPrefixed =
"-" + flag.trimmed();
672 QString message = QString(
"/mode %1 %2 %3").arg(channel, flagPrefixed, cleanNickname);
673 this->sendMessage(message);
681 void IRCNetworkAdapter::userChangesNickname(
const QString& oldNickname,
const QString& newNickname)
683 if (isMyNickname(oldNickname))
685 emit messageToNetworksCurrentChatBox(tr(
"Updated own nickname to %1.").arg(newNickname),
686 IRCMessageClass::NetworkAction);
687 connectionInfo.
nick = newNickname;
692 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
700 if (hasRecipient(oldNickname))
702 QString oldNicknameLowercase = oldNickname.toLower();
703 QString newNicknameLowercase = newNickname.toLower();
706 chatWindows.remove(oldNicknameLowercase);
707 chatWindows.insert(newNicknameLowercase, pAdapter);
711 void IRCNetworkAdapter::userJoinsChannel(
const QString& channel,
const QString& nickname,
const QString& fullSignature)
713 if (!isMyNickname(nickname))
715 if (hasRecipient(channel))
718 pChannel->
userJoins(nickname, fullSignature);
724 pChannel->emitFocusRequest();
728 void IRCNetworkAdapter::userIdleTime(
const QString &nick,
int secondsIdle)
730 QString msg = tr(
"Last activity of user %1 was %2 ago.").arg(
732 emit messageToNetworksCurrentChatBox(msg, IRCMessageClass::NetworkAction);
735 void IRCNetworkAdapter::userModeChanged(
const QString& channel,
const QString& nickname,
736 const QList<char> &addedFlags,
const QList<char> &removedFlags)
738 if (hasRecipient(channel))
740 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(channel);
745 void IRCNetworkAdapter::userNetworkJoinDateTime(
const QString &nick,
const QDateTime &timeOfJoin)
747 QString msg = tr(
"%1 joined the network on %2").arg(nick,
748 timeOfJoin.toString(
"yyyy-MM-dd HH:mm:ss"));
749 emit messageToNetworksCurrentChatBox(msg, IRCMessageClass::NetworkAction);
752 void IRCNetworkAdapter::userPartsChannel(
const QString& channel,
const QString& nickname,
const QString& farewellMessage)
754 if (hasRecipient(channel))
758 if (isMyNickname(nickname))
760 emit messageWithClass(tr(
"You left channel %1.").arg(channel), IRCMessageClass::ChannelAction);
761 killChatWindow(channel);
765 pChannel->
userLeaves(nickname, farewellMessage, IRCChatAdapter::ChannelPart);
772 return ircISupportParser->userPrefixes();
775 void IRCNetworkAdapter::userQuitsNetwork(
const QString& nickname,
const QString& farewellMessage)
781 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
784 pAdapter->
userLeaves(nickname, farewellMessage, IRCChatAdapter::NetworkQuit);
788 void IRCNetworkAdapter::userPing(
const QString &nickname, qint64 ping)
790 qint64 delta = QDateTime::currentMSecsSinceEpoch() - ping;
791 emit messageToNetworksCurrentChatBox(
792 tr(
"Ping to user %1: %2ms").arg(nickname).arg(delta),
793 IRCMessageClass::Ctcp);
796 void IRCNetworkAdapter::whoIsUser(
const QString& nickname,
const QString& user,
const QString& hostName,
const QString& realName)
798 emit messageToNetworksCurrentChatBox(
799 QString(
"%1 %2 %3 %4").arg(nickname, user, hostName, realName),
800 IRCMessageClass::NetworkAction);
805 void IRCSocketSignalsAdapter::connected()
807 pParent->bIsJoining =
true;
808 pParent->emitMessageWithClass(tr(
"Connected. Sending registration messages."), IRCMessageClass::NetworkAction);
812 QString messagePass =
"/PASS %1";
813 QString messageNick =
"/NICK %1";
814 QString messageUser =
"/USER %1 %2 %3 :%4";
820 pParent->sendMessage(messagePass.arg(network.
password()));
823 pParent->sendMessage(messageNick.arg(connectionInfo.
nick));
824 pParent->sendMessage(messageUser.arg(connectionInfo.
nick).arg(connectionInfo.
nick).arg(connectionInfo.
nick).arg(connectionInfo.
realName));
827 void IRCSocketSignalsAdapter::disconnected()
829 pParent->killAllChatWindows();
831 emit pParent->message(
"Disconnected");
834 void IRCSocketSignalsAdapter::errorReceived(QAbstractSocket::SocketError error)
836 emit pParent->error(pSocket->errorString());
839 void IRCSocketSignalsAdapter::infoMessage(
const QString& message)
842 emit pParent->message(message);
845 void IRCSocketSignalsAdapter::hostLookupError(QHostInfo::HostInfoError errorValue)
849 case QHostInfo::HostNotFound:
850 emit pParent->error(
"Host lookup error: host not found.");
854 emit pParent->error(
"Unknown host lookup error.");
void setNetwork(IRCNetworkAdapter *pNetwork)
Sets IRCNetworkAdapter for this chat window. This adapter is not detached from the old network...
void emitCachedNameListUpdated()
Emits cached list of names. This should be called when end of names list message is received for this...
Class type that is used for conversations within a channel.
void userJoins(const QString &nickname, const QString &fullSignature)
Use this to register the fact that user has joined the chat.
unsigned short port() const
Port of the server or network to connect to.
void openNewAdapter(const QString &recipientName)
Opens a new chat adapter for specified recipient.
void print(const QString &printWhat, const QString &printWhere)
static Log instance
Global instance of the logger.
void removeNameFromCachedList(const QString &name)
Removes a name from the sortecd cachedNames list.
static QString formatTime(float seconds)
Formats a numerical time value into a string.
void appendNamesToCachedList(const QStringList &names)
Appends a list of names to cachedNames list. This ensures that no duplicate names are found on the li...
QString title() const
Gets title for this adapter.
void banUser(const QString &nickname, const QString &reason, const QString &channel)
Bans specified user from a channel.
Provides an unified communication interface between a client and IRC network entities.
IRCResponseParseResult parse(const QString &message)
Parses the message received from the network.
void doSendMessage(const QString &message, IRCAdapterBase *pOrigin)
Implemented to support direct communication between client and server.
const QStringList & autojoinChannels() const
List of channels to which a /join command will be issued automatically when a connection with this ne...
Struct containing information about client's connection to the IRC server.
virtual void emitChatMessage(const QString &sender, const QString &content)
Emits message() signal formatting it to present sender's message.
const QString & description() const
A short, human-readable description for the network. (Preferably a single word).
IRCNetworkEntity networkEntity
Information about the network to which we will connect.
Handles chatting through IRC.
IRCNetworkAdapter * network()
The idea of the adapter system is that each adapter is either a network or is a child of a network...
virtual void userModeChanges(const QString &nickname, const QList< char > &addedFlags, const QList< char > &removedFlags)=0
Use this to register the fact that user MODE flags have changed.
IRCRequestParseResult parse(IRCAdapterBase *pAdapter, QString input)
Parses input string and returns it through output string. Additional information is passed through re...
void titleChange()
Can be called when the variable returned by title() might have changed and the application should be ...
void userLeaves(const QString &nickname, const QString &farewellMessage, IRCQuitType quitType)
Use this to register the fact that user has left the chat.
bool isOperator(const QString &nickname, const QString &channel) const
Checks if user is an operator on a given channel.
bool wasParsed() const
true if response message was parsed, false if IRCResponseParser ignored the response.
virtual void userChangesNickname(const QString &oldNickname, const QString &newNickname)=0
Use this to register the fact that user has changed his/hers nickname.
Normal has no representation in string, ie. it represents a global style for the widget.
Holds information flags about given nickname.
void detachChatWindow(const IRCChatAdapter *pAdapter)
Detaches the specified IRCChatAdapter instance from this network without deleting it...
const IRCUserPrefix & userPrefixes() const
All allowed modes with their nickname prefixes for this network.
Result info generated by the IRCResponseParser.
Class type that is used for private conversations with other users directly.
void setChannelMode(const QString &channel, const QString &nickname, const QString &flag, bool bSet)
Sets channel flags.
One-to-one association of visible prefixes to user mode.
Data structure that describes and defines a connection to an IRC network or server.
const QStringList & autojoinCommands() const
List of commands executed on network join.
QString realName
User's real name. Optional.
bool isOperator(const QString &nickname) const
Checks if user is an operator on this channel.
void newChatWindowIsOpened(IRCChatAdapter *pWindow)
Signal emitted when a new chat (priv or channel) is opened from this network.
const QString & password() const
Password for the server or network. Ignored if empty.
virtual void userLeaves(const QString &nickname, const QString &farewellMessage, IRCQuitType quitType)=0
Use this to register the fact that user has left the chat.
bool isAdapterRelated(const IRCAdapterBase *pAdapter) const
Checks if pAdapter equals this or is one of chat windows of this network.
QString alternateNick
Alternate nickname in case if ' nick ' is taken when connecting.
const QString & address() const
Address of the server or network to connect to.
QString nick
Original nickname. This variable will always store the current nickname of the client.