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)
251 if (recipient.isEmpty())
253 emit error(
"Doomseeker error: getChatAdapter() received empty recipient.");
257 QString recipientLowercase = recipient.toLower();
258 if (hasRecipient(recipientLowercase))
260 return chatWindows[recipientLowercase];
266 const IRCChatAdapter* IRCNetworkAdapter::getChatAdapter(
const QString& recipient)
const 268 if (recipient.isEmpty())
273 QString recipientLowercase = recipient.toLower();
274 if (hasRecipient(recipientLowercase))
276 return chatWindows[recipientLowercase];
282 IRCChatAdapter* IRCNetworkAdapter::getOrCreateNewChatAdapter(
const QString& recipient)
286 if (recipient.isEmpty())
288 emit error(
"Doomseeker error: getOrCreateNewChatAdapter() received empty recipient.");
292 QString recipientLowercase = recipient.toLower();
294 if (hasRecipient(recipientLowercase))
296 return chatWindows[recipientLowercase];
300 Log::instance << QString(
"IRCNetworkAdapter::getOrCreateNewChatAdapter() Creating new adapter for recipient: %1").arg(recipientLowercase);
303 if (IRCGlobal::isChannelName(recipient))
312 chatWindows.insert(recipientLowercase, pAdapter);
318 bool IRCNetworkAdapter::hasRecipient(
const QString& recipient)
const 320 QString recipientLowercase = recipient.toLower();
321 return (chatWindows.find(recipientLowercase) != chatWindows.end());
324 void IRCNetworkAdapter::helloClient(
const QString& nickname)
329 connectionInfo.
nick = nickname;
332 gLog << tr(
"IRC: Successfuly registered on network %1 [%2:%3]").arg(network.
description(), network.
address()).arg(network.
port());
334 this->bIsJoining =
false;
336 if (!network.nickservPassword().isEmpty())
338 QString messageNickserv = network.nickservCommand();
339 messageNickserv = messageNickserv.arg(network.nickservPassword());
341 this->sendMessage(messageNickserv);
345 if (!command.trimmed().isEmpty())
347 this->sendMessage(command);
353 if (IRCGlobal::isChannelName(channel))
363 const PatternList &IRCNetworkAdapter::ignoredUsersPatterns()
const 368 void IRCNetworkAdapter::ircServerResponse(
const QString& message)
372 if (this->bEmitAllIRCMessages || !result.
wasParsed())
374 emit this->message(message.trimmed().replace(
"\n",
"\\n"));
377 if (!result.isValid())
379 emit this->error(tr(
"Invalid parse result for mesage: %1").arg(message));
385 if (
this == pAdapter)
390 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
393 if (pChatWindow == pAdapter)
402 bool IRCNetworkAdapter::isMyNickname(
const QString& nickname)
const 410 if (IRCGlobal::isChannelName(channel))
413 if (pChannelAdapter != NULL)
422 void IRCNetworkAdapter::kick(
const QString& channel,
const QString& byWhom,
const QString& whoIsKicked,
const QString& reason)
424 if (hasRecipient(channel))
428 if (isMyNickname(whoIsKicked))
430 this->emitMessageWithClass(tr(
"You have been kicked from channel %1 by %2 (Reason: %3)").arg(channel, byWhom, reason), IRCMessageClass::ChannelAction);
431 killChatWindow(channel);
435 pAdapter->emitMessageWithClass(tr(
"%1 was kicked by %2 (%3)").arg(whoIsKicked, byWhom, reason), IRCMessageClass::ChannelAction);
441 void IRCNetworkAdapter::kill(
const QString& victim,
const QString& comment)
443 emit message(QString(
"Connection for user %1 was killed. (%2)").arg(victim, comment));
449 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
452 pAdapter->
userLeaves(victim, comment, IRCChatAdapter::NetworkKill);
456 void IRCNetworkAdapter::killAllChatWindows()
458 QList<IRCChatAdapter*> pWindows = chatWindows.values();
470 void IRCNetworkAdapter::killChatWindow(
const QString& recipient)
472 if (hasRecipient(recipient))
475 chatWindows.remove(recipient.toLower());
484 void IRCNetworkAdapter::modeInfo(
const QString& channel,
const QString& whoSetThis,
const QString& modeParams)
487 pAdapter->emitMessageWithClass(tr(
"%1 sets mode: %2").arg(whoSetThis, modeParams), IRCMessageClass::ChannelAction);
490 void IRCNetworkAdapter::namesListReceived(
const QString& channel,
const QStringList& names)
492 if (this->hasRecipient(channel))
499 void IRCNetworkAdapter::namesListEndReceived(
const QString& channel)
501 if (this->hasRecipient(channel))
508 void IRCNetworkAdapter::nicknameInUse(
const QString& nickname)
510 emit messageToNetworksCurrentChatBox(tr(
"Nickname %1 is already taken.").arg(nickname), IRCMessageClass::Error);
511 if (this->bIsJoining)
515 if (this->connectionInfo.
nick.compare(altNick, Qt::CaseInsensitive) == 0)
517 emit messageWithClass(tr(
"Both nickname and alternate nickname are taken on this network."), IRCMessageClass::Error);
519 else if (altNick.isEmpty())
521 emit messageWithClass(tr(
"No alternate nickname specified."), IRCMessageClass::Error);
525 this->connectionInfo.
nick = altNick;
527 emit messageWithClass(tr(
"Using alternate nickname %1 to join.").arg(altNick), IRCMessageClass::NetworkAction);
528 QString message = QString(
"/nick %1").arg(altNick);
529 sendMessage(message);
534 void IRCNetworkAdapter::noSuchNickname(
const QString& nickname)
536 emit messageToNetworksCurrentChatBox(tr(
"User %1 is not logged in.").arg(nickname), IRCMessageClass::Error);
541 if (!isConnected() || recipientName.isEmpty())
546 bool bStandardRoutine = !IRCGlobal::isChannelName(recipientName)
547 || hasRecipient(recipientName);
549 if (bStandardRoutine)
551 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(recipientName);
552 pAdapter->emitFocusRequest();
554 else if (IRCGlobal::isChannelName(recipientName))
556 this->sendMessage(
"/join " + recipientName);
560 void IRCNetworkAdapter::parseError(
const QString& error)
562 emit this->error(tr(
"IRC parse error: %1").arg(error));
570 void IRCNetworkAdapter::printWithClass(
const QString& printWhat,
575 if (!printWhere.isEmpty())
578 if (pAdapterCandidate != NULL)
580 pAdapter = pAdapterCandidate;
586 if (pAdapter == NULL)
588 this->emitMessageWithClass(tr(
"FROM %1: %2").arg(printWhere, printWhat), msgClass);
595 if ( pAdapter ==
this && this->bEmitAllIRCMessages )
600 pAdapter->emitMessageWithClass(printWhat, msgClass);
604 void IRCNetworkAdapter::printToCurrentChatBox(
const QString& printWhat,
const IRCMessageClass& msgClass)
606 emit messageToNetworksCurrentChatBox(printWhat, msgClass);
609 void IRCNetworkAdapter::privMsgReceived(
const QString& recipient,
const QString& sender,
const QString& content)
611 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(recipient);
615 void IRCNetworkAdapter::printMsgLiteral(
const QString& recipient,
const QString& content,
618 this->getOrCreateNewChatAdapter(recipient);
619 printWithClass(content, recipient, msgClass);
622 void IRCNetworkAdapter::reloadNetworkEntityFromConfig()
626 if (entity.isValid())
628 setNetworkEntity(entity);
642 void IRCNetworkAdapter::sendCtcp(
const QString &nickname,
const QString &command)
644 QString msg = QString(
"/PRIVMSG %1 %2%3%2").arg(nickname).arg(QChar(0x1)).arg(command);
648 void IRCNetworkAdapter::sendPong(
const QString& toWhom)
650 QString message = QString(
"/PONG %1").arg(toWhom);
651 sendMessage(message);
656 QString cleanNickname =
userPrefixes().cleanNickname(nickname);
658 QString flagPrefixed;
661 flagPrefixed =
"+" + flag.trimmed();
665 flagPrefixed =
"-" + flag.trimmed();
668 QString message = QString(
"/mode %1 %2 %3").arg(channel, flagPrefixed, cleanNickname);
669 this->sendMessage(message);
677 void IRCNetworkAdapter::userChangesNickname(
const QString& oldNickname,
const QString& newNickname)
679 if (isMyNickname(oldNickname))
681 emit messageToNetworksCurrentChatBox(tr(
"Updated own nickname to %1.").arg(newNickname),
682 IRCMessageClass::NetworkAction);
683 connectionInfo.
nick = newNickname;
688 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
696 if (hasRecipient(oldNickname))
698 QString oldNicknameLowercase = oldNickname.toLower();
699 QString newNicknameLowercase = newNickname.toLower();
702 chatWindows.remove(oldNicknameLowercase);
703 chatWindows.insert(newNicknameLowercase, pAdapter);
707 void IRCNetworkAdapter::userJoinsChannel(
const QString& channel,
const QString& nickname,
const QString& fullSignature)
709 if (!isMyNickname(nickname))
711 if (hasRecipient(channel))
714 pChannel->
userJoins(nickname, fullSignature);
720 pChannel->emitFocusRequest();
724 void IRCNetworkAdapter::userIdleTime(
const QString &nick,
int secondsIdle)
726 QString msg = tr(
"Last activity of user %1 was %2 ago.").arg(
728 emit messageToNetworksCurrentChatBox(msg, IRCMessageClass::NetworkAction);
731 void IRCNetworkAdapter::userModeChanged(
const QString& channel,
const QString& nickname,
732 const QList<char> &addedFlags,
const QList<char> &removedFlags)
734 if (hasRecipient(channel))
736 IRCChatAdapter* pAdapter = this->getOrCreateNewChatAdapter(channel);
741 void IRCNetworkAdapter::userNetworkJoinDateTime(
const QString &nick,
const QDateTime &timeOfJoin)
743 QString msg = tr(
"%1 joined the network on %2").arg(nick,
744 timeOfJoin.toString(
"yyyy-MM-dd HH:mm:ss"));
745 emit messageToNetworksCurrentChatBox(msg, IRCMessageClass::NetworkAction);
748 void IRCNetworkAdapter::userPartsChannel(
const QString& channel,
const QString& nickname,
const QString& farewellMessage)
750 if (hasRecipient(channel))
754 if (isMyNickname(nickname))
756 emit messageWithClass(tr(
"You left channel %1.").arg(channel), IRCMessageClass::ChannelAction);
757 killChatWindow(channel);
761 pChannel->
userLeaves(nickname, farewellMessage, IRCChatAdapter::ChannelPart);
768 return ircISupportParser->userPrefixes();
771 void IRCNetworkAdapter::userQuitsNetwork(
const QString& nickname,
const QString& farewellMessage)
777 QList<IRCChatAdapter*> adaptersList = chatWindows.values();
780 pAdapter->
userLeaves(nickname, farewellMessage, IRCChatAdapter::NetworkQuit);
784 void IRCNetworkAdapter::userPing(
const QString &nickname, qint64 ping)
786 qint64 delta = QDateTime::currentMSecsSinceEpoch() - ping;
787 emit messageToNetworksCurrentChatBox(
788 tr(
"Ping to user %1: %2ms").arg(nickname).arg(delta),
789 IRCMessageClass::Ctcp);
792 void IRCNetworkAdapter::whoIsUser(
const QString& nickname,
const QString& user,
const QString& hostName,
const QString& realName)
794 emit messageToNetworksCurrentChatBox(
795 QString(
"%1 %2 %3 %4").arg(nickname, user, hostName, realName),
796 IRCMessageClass::NetworkAction);
801 void IRCSocketSignalsAdapter::connected()
803 pParent->bIsJoining =
true;
804 pParent->emitMessageWithClass(tr(
"Connected. Sending registration messages."), IRCMessageClass::NetworkAction);
808 QString messagePass =
"/PASS %1";
809 QString messageNick =
"/NICK %1";
810 QString messageUser =
"/USER %1 %2 %3 :%4";
816 pParent->sendMessage(messagePass.arg(network.
password()));
819 pParent->sendMessage(messageNick.arg(connectionInfo.
nick));
820 pParent->sendMessage(messageUser.arg(connectionInfo.
nick).arg(connectionInfo.
nick).arg(connectionInfo.
nick).arg(connectionInfo.
realName));
823 void IRCSocketSignalsAdapter::disconnected()
825 pParent->killAllChatWindows();
826 gLog << tr(
"IRC: Disconnected from network %1").arg(pParent->connectionInfo.networkEntity.description());
827 emit pParent->message(
"Disconnected");
830 void IRCSocketSignalsAdapter::errorReceived(QAbstractSocket::SocketError error)
832 emit pParent->error(pSocket->errorString());
835 void IRCSocketSignalsAdapter::infoMessage(
const QString& message)
838 emit pParent->message(message);
841 void IRCSocketSignalsAdapter::hostLookupError(QHostInfo::HostInfoError errorValue)
845 case QHostInfo::HostNotFound:
846 emit pParent->error(
"Host lookup error: host not found.");
850 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 isSameNickname(const IRCUserInfo &otherUser) const
Check if this user and user specified as parameter are the same user.
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.