Add configurable chat consecutive interval value
This commit is contained in:
parent
5d399f1203
commit
725d587566
@ -63,6 +63,9 @@ The current server configuration xml looks like this:
|
||||
<!-- If this value is set to false, the server will ignore chat messages from all players. -->
|
||||
<chat value="true" />
|
||||
|
||||
<!-- If client sends more than chat-consecutive-interval / 2 chats within this value (read in seconds), it will be ignore, negative value to disable. -->
|
||||
<chat-consecutive-interval value="8" />
|
||||
|
||||
<!-- Allow players to vote for which track to play. If this value is set to false, the server will randomly pick the next track to play. -->
|
||||
<track-voting value="true" />
|
||||
|
||||
|
@ -699,18 +699,28 @@ void ServerLobby::handleChat(Event* event)
|
||||
event->getPeer()->updateLastActivity();
|
||||
const bool sender_in_game = event->getPeer()->isWaitingForGame();
|
||||
|
||||
int last_message = event->getPeer()->getLastMessage();
|
||||
int elipsed_time = StkTime::getMonoTimeMs() - last_message;
|
||||
int64_t last_message = event->getPeer()->getLastMessage();
|
||||
int64_t elapsed_time = (int64_t)StkTime::getMonoTimeMs() - last_message;
|
||||
|
||||
// Increment consecutive_messages if last message is less than 5s ago
|
||||
if (elipsed_time < 5000)
|
||||
// Read ServerConfig for formula and details
|
||||
if (ServerConfig::m_chat_consecutive_interval > 0 &&
|
||||
elapsed_time < ServerConfig::m_chat_consecutive_interval * 1000)
|
||||
event->getPeer()->updateConsecutiveMessages(true);
|
||||
else
|
||||
event->getPeer()->updateConsecutiveMessages(false);
|
||||
|
||||
// Ignore message if there is already 3 consecutive messages
|
||||
if (event->getPeer()->getConsecutiveMessages() >= 3)
|
||||
if (ServerConfig::m_chat_consecutive_interval > 0 &&
|
||||
event->getPeer()->getConsecutiveMessages() >
|
||||
ServerConfig::m_chat_consecutive_interval / 2)
|
||||
{
|
||||
NetworkString* chat = getNetworkString();
|
||||
chat->setSynchronous(true);
|
||||
core::stringw warn = "Spam detected";
|
||||
chat->addUInt8(LE_CHAT).encodeString16(warn);
|
||||
event->getPeer()->sendPacket(chat, true/*reliable*/);
|
||||
delete chat;
|
||||
return;
|
||||
}
|
||||
|
||||
core::stringw message;
|
||||
event->data().decodeString16(&message, 360/*max_len*/);
|
||||
|
@ -149,6 +149,12 @@ namespace ServerConfig
|
||||
"If this value is set to false, the server will ignore chat messages "
|
||||
"from all players."));
|
||||
|
||||
SERVER_CFG_PREFIX IntServerConfigParam m_chat_consecutive_interval
|
||||
SERVER_CFG_DEFAULT(IntServerConfigParam(8, "chat-consecutive-interval",
|
||||
"If client sends more than chat-consecutive-interval / 2 chats within "
|
||||
"this value (read in seconds), it will be ignore, negative value to "
|
||||
"disable."));
|
||||
|
||||
SERVER_CFG_PREFIX BoolServerConfigParam m_track_voting
|
||||
SERVER_CFG_DEFAULT(BoolServerConfigParam(true, "track-voting",
|
||||
"Allow players to vote for which track to play. If this value is set "
|
||||
|
@ -281,19 +281,18 @@ public:
|
||||
void updateLastMessage()
|
||||
{ m_last_message.store((int64_t)StkTime::getMonoTimeMs()); }
|
||||
// ------------------------------------------------------------------------
|
||||
int getLastMessage()
|
||||
int64_t getLastMessage() const
|
||||
{ return m_last_message; }
|
||||
// ------------------------------------------------------------------------
|
||||
void updateConsecutiveMessages(bool tooFast)
|
||||
void updateConsecutiveMessages(bool too_fast)
|
||||
{
|
||||
if (tooFast)
|
||||
if (too_fast)
|
||||
m_consecutive_messages++;
|
||||
else
|
||||
m_consecutive_messages = 0;
|
||||
}
|
||||
// ------------------------------------------------------------------------
|
||||
int getConsecutiveMessages()
|
||||
{ return m_consecutive_messages; }
|
||||
int getConsecutiveMessages() const { return m_consecutive_messages; }
|
||||
}; // STKPeer
|
||||
|
||||
#endif // STK_PEER_HPP
|
||||
|
Loading…
Reference in New Issue
Block a user