diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 7c0968857..00c3d89b4 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -406,7 +406,11 @@ void Server_ProtocolHandler::pingClockTimeout() if (timeRunning - lastDataReceived > server->getMaxPlayerInactivityTime()) prepareDestroy(); - if (!userInfo || QString::fromStdString(userInfo->privlevel()).toLower() == "none") { + // PrivLevel users, Moderators, and Admins are not subject to the server idle timeout policy + const bool hasPrivLevel = userInfo && QString::fromStdString(userInfo->privlevel()).toLower() != "none"; + const bool isModOrAdmin = + userInfo && (userInfo->user_level() & (ServerInfo_User::IsModerator | ServerInfo_User::IsAdmin)); + if (!hasPrivLevel && !isModOrAdmin) { if ((server->getIdleClientTimeout() > 0) && (idleClientWarningSent)) { if (timeRunning - lastActionReceived > server->getIdleClientTimeout()) { prepareDestroy();