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. -->
|
<!-- If this value is set to false, the server will ignore chat messages from all players. -->
|
||||||
<chat value="true" />
|
<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. -->
|
<!-- 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" />
|
<track-voting value="true" />
|
||||||
|
|
||||||
|
@ -699,19 +699,29 @@ void ServerLobby::handleChat(Event* event)
|
|||||||
event->getPeer()->updateLastActivity();
|
event->getPeer()->updateLastActivity();
|
||||||
const bool sender_in_game = event->getPeer()->isWaitingForGame();
|
const bool sender_in_game = event->getPeer()->isWaitingForGame();
|
||||||
|
|
||||||
int last_message = event->getPeer()->getLastMessage();
|
int64_t last_message = event->getPeer()->getLastMessage();
|
||||||
int elipsed_time = StkTime::getMonoTimeMs() - last_message;
|
int64_t elapsed_time = (int64_t)StkTime::getMonoTimeMs() - last_message;
|
||||||
|
|
||||||
// Increment consecutive_messages if last message is less than 5s ago
|
// Read ServerConfig for formula and details
|
||||||
if (elipsed_time < 5000)
|
if (ServerConfig::m_chat_consecutive_interval > 0 &&
|
||||||
|
elapsed_time < ServerConfig::m_chat_consecutive_interval * 1000)
|
||||||
event->getPeer()->updateConsecutiveMessages(true);
|
event->getPeer()->updateConsecutiveMessages(true);
|
||||||
else
|
else
|
||||||
event->getPeer()->updateConsecutiveMessages(false);
|
event->getPeer()->updateConsecutiveMessages(false);
|
||||||
|
|
||||||
// Ignore message if there is already 3 consecutive messages
|
if (ServerConfig::m_chat_consecutive_interval > 0 &&
|
||||||
if (event->getPeer()->getConsecutiveMessages() >= 3)
|
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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
core::stringw message;
|
core::stringw message;
|
||||||
event->data().decodeString16(&message, 360/*max_len*/);
|
event->data().decodeString16(&message, 360/*max_len*/);
|
||||||
if (message.size() > 0)
|
if (message.size() > 0)
|
||||||
|
@ -149,6 +149,12 @@ namespace ServerConfig
|
|||||||
"If this value is set to false, the server will ignore chat messages "
|
"If this value is set to false, the server will ignore chat messages "
|
||||||
"from all players."));
|
"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_PREFIX BoolServerConfigParam m_track_voting
|
||||||
SERVER_CFG_DEFAULT(BoolServerConfigParam(true, "track-voting",
|
SERVER_CFG_DEFAULT(BoolServerConfigParam(true, "track-voting",
|
||||||
"Allow players to vote for which track to play. If this value is set "
|
"Allow players to vote for which track to play. If this value is set "
|
||||||
|
@ -281,19 +281,18 @@ public:
|
|||||||
void updateLastMessage()
|
void updateLastMessage()
|
||||||
{ m_last_message.store((int64_t)StkTime::getMonoTimeMs()); }
|
{ m_last_message.store((int64_t)StkTime::getMonoTimeMs()); }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
int getLastMessage()
|
int64_t getLastMessage() const
|
||||||
{ return m_last_message; }
|
{ return m_last_message; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void updateConsecutiveMessages(bool tooFast)
|
void updateConsecutiveMessages(bool too_fast)
|
||||||
{
|
{
|
||||||
if (tooFast)
|
if (too_fast)
|
||||||
m_consecutive_messages++;
|
m_consecutive_messages++;
|
||||||
else
|
else
|
||||||
m_consecutive_messages = 0;
|
m_consecutive_messages = 0;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
int getConsecutiveMessages()
|
int getConsecutiveMessages() const { return m_consecutive_messages; }
|
||||||
{ return m_consecutive_messages; }
|
|
||||||
}; // STKPeer
|
}; // STKPeer
|
||||||
|
|
||||||
#endif // STK_PEER_HPP
|
#endif // STK_PEER_HPP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user