diff --git a/cockatrice/src/chatview.cpp b/cockatrice/src/chatview.cpp index 3fad3c82..6acb9a86 100644 --- a/cockatrice/src/chatview.cpp +++ b/cockatrice/src/chatview.cpp @@ -343,6 +343,23 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use cursor.setCharFormat(defaultFormat); break; } + else if (isModeratorSendingGlobal(userLevel, fullMentionUpToSpaceOrEnd)) + { + // Moderator Sending Global Message + mentionFormat.setBackground(QBrush(getCustomMentionColor())); + mentionFormat.setForeground(settingsCache->getChatMentionForeground() ? QBrush(Qt::white) : QBrush(Qt::black)); + cursor.insertText("@" + fullMentionUpToSpaceOrEnd, mentionFormat); + message = message.mid(fullMentionUpToSpaceOrEnd.size() + 1); + QApplication::alert(this); + if (settingsCache->getShowMentionPopup() && shouldShowSystemPopup()) + { + QString ref = sender.left(sender.length() - 2); + showSystemPopup(ref); + } + + cursor.setCharFormat(defaultFormat); + break; + } else if (fullMentionUpToSpaceOrEnd.right(1).indexOf(notALetterOrNumber) == -1 || fullMentionUpToSpaceOrEnd.size() < 2) { cursor.insertText("@" + mentionIntact, defaultFormat); @@ -368,6 +385,19 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use verticalScrollBar()->setValue(verticalScrollBar()->maximum()); } +bool ChatView::isModeratorSendingGlobal(QFlags userLevelFlag, QString message) +{ + int userLevel = QString::number(userLevelFlag).toInt(); + + QStringList getAttentionList; + getAttentionList << "/all"; // Send a message to all users + + if (getAttentionList.contains(message) && (userLevel & ServerInfo_User::IsModerator || userLevel & ServerInfo_User::IsAdmin)) + return true; + + return false; +} + void ChatView::actMessageClicked() { emit messageClickedSignal(); } diff --git a/cockatrice/src/chatview.h b/cockatrice/src/chatview.h index 578da3b8..17d73d72 100644 --- a/cockatrice/src/chatview.h +++ b/cockatrice/src/chatview.h @@ -43,6 +43,7 @@ private: QColor getCustomMentionColor(); bool shouldShowSystemPopup(); void showSystemPopup(QString &sender); + bool isModeratorSendingGlobal(QFlags userLevelFlag, QString message); private slots: void openLink(const QUrl &link); void actMessageClicked(); diff --git a/common/pb/serverinfo_user.proto b/common/pb/serverinfo_user.proto index e7176e00..faf030c7 100644 --- a/common/pb/serverinfo_user.proto +++ b/common/pb/serverinfo_user.proto @@ -1,25 +1,25 @@ message ServerInfo_User { - enum UserLevelFlag { - IsNothing = 0; - IsUser = 1; - IsRegistered = 2; - IsModerator = 4; - IsAdmin = 8; - }; - enum Gender { - GenderUnknown = -1; - Male = 0; - Female = 1; - }; - optional string name = 1; - optional uint32 user_level = 2; - optional string address = 3; - optional string real_name = 4; - optional Gender gender = 5 [default = GenderUnknown]; - optional string country = 6; - optional bytes avatar_bmp = 7; - optional sint32 id = 8 [default = -1]; - optional sint32 server_id = 9 [default = -1]; - optional uint64 session_id = 10; + enum UserLevelFlag { + IsNothing = 0; + IsUser = 1; + IsRegistered = 2; + IsModerator = 4; + IsAdmin = 8; + }; + enum Gender { + GenderUnknown = -1; + Male = 0; + Female = 1; + }; + optional string name = 1; + optional uint32 user_level = 2; + optional string address = 3; + optional string real_name = 4; + optional Gender gender = 5 [default = GenderUnknown]; + optional string country = 6; + optional bytes avatar_bmp = 7; + optional sint32 id = 8 [default = -1]; + optional sint32 server_id = 9 [default = -1]; + optional uint64 session_id = 10; optional uint64 accountage_secs = 11; }