void RoomHandler::HandlePermsChanged (const QString& nick, QXmppMucItem::Affiliation aff, QXmppMucItem::Role role, const QString& reason) { RoomParticipantEntry_ptr entry = GetParticipantEntry (nick); if (aff == QXmppMucItem::OutcastAffiliation || role == QXmppMucItem::NoRole) { Account_->handleEntryRemoved (entry.get ()); if (aff == QXmppMucItem::OutcastAffiliation) MakeBanMessage (nick, reason); else MakeKickMessage (nick, reason); Nick2Entry_.remove (nick); return; } entry->SetAffiliation (aff); entry->SetRole (role); MakePermsChangedMessage (nick, aff, role, reason); }
void ChannelHandler::KickParticipant (const QString& nick, const QString& target, const QString& msg) { if (Nick2Entry_.contains (target)) MakeKickMessage (target, msg, nick); RemoveUserFromChannel (target); }
void RoomHandler::handleParticipantRemoved (const QString& jid) { const QXmppPresence& pres = Room_->participantPresence (jid); QString nick; ClientConnection::Split (jid, 0, &nick); const bool us = Room_->nickName () == nick; RoomParticipantEntry_ptr entry = GetParticipantEntry (nick); const QXmppMucItem& item = pres.mucItem (); if (!item.nick ().isEmpty () && item.nick () != nick) { entry->SetEntryName (item.nick ()); Nick2Entry_ [item.nick ()] = Nick2Entry_ [nick]; MakeNickChangeMessage (nick, item.nick ()); Nick2Entry_.remove (nick); PendingNickChanges_ << item.nick (); return; } else if (pres.mucStatusCodes ().contains (301)) !us ? MakeBanMessage (nick, item.reason ()) : static_cast<void> (QMetaObject::invokeMethod (CLEntry_, "beenBanned", Qt::QueuedConnection, Q_ARG (QString, item.reason ()))); else if (pres.mucStatusCodes ().contains (307)) !us ? MakeKickMessage (nick, item.reason ()) : static_cast<void> (QMetaObject::invokeMethod (CLEntry_, "beenKicked", Qt::QueuedConnection, Q_ARG (QString, item.reason ()))); else MakeLeaveMessage (pres, nick); if (us) { Leave (QString (), false); return; } if (entry->HasUnreadMsgs ()) entry->SetStatus (EntryStatus (SOffline, item.reason ()), QString ()); else RemoveEntry (entry.get ()); }