[Messages] Exclude Moderator/Admin from non-buddy ignore filter

Moderator and Admin messages should not be filtered out when the
'Ignore private messages from non-buddies' setting is enabled, to
ensure that important warnings from server staff reach users.
This commit is contained in:
kongwu666 2026-06-04 17:05:28 +08:00
parent 849d652547
commit 3c5a891b45

View file

@ -1012,10 +1012,6 @@ void TabSupervisor::processUserMessageEvent(const Event_UserMessage &event)
tab = messageTabs.value(QString::fromStdString(event.receiver_name())); tab = messageTabs.value(QString::fromStdString(event.receiver_name()));
} }
if (!tab) { if (!tab) {
if (SettingsCache::instance().getIgnoreNonBuddyUserMessages() && !userListManager->isUserBuddy(senderName)) {
// When he is not a buddy and the settings are set to block non friend messages
return;
}
const ServerInfo_User *onlineUserInfo = userListManager->getOnlineUser(senderName); const ServerInfo_User *onlineUserInfo = userListManager->getOnlineUser(senderName);
if (onlineUserInfo) { if (onlineUserInfo) {
auto userLevel = UserLevelFlags(onlineUserInfo->user_level()); auto userLevel = UserLevelFlags(onlineUserInfo->user_level());
@ -1023,6 +1019,12 @@ void TabSupervisor::processUserMessageEvent(const Event_UserMessage &event)
!userLevel.testFlag(ServerInfo_User::IsRegistered)) { !userLevel.testFlag(ServerInfo_User::IsRegistered)) {
// Flags are additive, so reg/mod/admin are all IsRegistered // Flags are additive, so reg/mod/admin are all IsRegistered
return; return;
} else if (SettingsCache::instance().getIgnoreNonBuddyUserMessages() &&
!userListManager->isUserBuddy(senderName) && !userLevel.testFlag(ServerInfo_User::IsModerator) &&
!userLevel.testFlag(ServerInfo_User::IsAdmin)) {
// Ignore private messages from non-buddies
// Moderator/Admin messages are exempt to ensure warnings reach users
return;
} }
} }
tab = addMessageTab(QString::fromStdString(event.sender_name()), false); tab = addMessageTab(QString::fromStdString(event.sender_name()), false);