From e37a70089b4d6b8cbecabfd02d13ed5af53c13f1 Mon Sep 17 00:00:00 2001 From: UristMcKerman Date: Thu, 29 May 2014 16:05:00 +0400 Subject: [PATCH] Tweaks for spam #2 Added brackets surrounding tokens to make whitespace and empty tokens removable. Slightly modified ion storm behavior. Increased duration required to stop spam to 5 minutes. Added ability to expand spam filter limit with installation of message monitor circuits. People will see why their message been discarded. Discarded messages will be highlighted with red color in message log. --- code/game/machinery/computer/message.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/modules/events/ion_storm.dm | 9 +++++---- code/modules/events/money_spam.dm | 4 ++-- code/modules/research/message_server.dm | 21 +++++++++++++++++---- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index fceea1d7f5..0e9290f519 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -249,7 +249,7 @@ index++ if(index > 3000) break - dat += "
[index] [token]
" + dat += "
[index] \[[token]\]
" dat += "
" if (linkedServer.spamfilter.len < linkedServer.spamfilter_limit) dat += "Add token
" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 4ca1596dd8..bc402a7a39 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -919,7 +919,7 @@ var/global/list/obj/item/device/pda/PDAs = list() return var/send_result = useMS.send_pda_message("[P.owner]","[owner]","[t]") if (send_result) - U << "ERROR: Messaging server rejected your message." + U << "ERROR: Messaging server rejected your message. Reason: contains '[send_result]'." return tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index aca79f9e9a..86c4cb12b2 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -50,11 +50,12 @@ if(message_servers) for (var/obj/machinery/message_server/MS in message_servers) + MS.spamfilter.Cut() var/i - for (i = 1, i <= MS.spamfilter.len, i++) - MS.spamfilter[i] = pick("kitty","HONK","revolution","malfunction","liberty","freedom","drugs", \ - "admininstreation","ponies","heresy","meow","Pun Pun","monkey","Ian","moron","pizza","message","spam",\ - "diector", "Hello", "Hi!"," ","nuke") + for (i = 1, i <= MS.spamfilter_limit, i++) + MS.spamfilter += pick("kitty","HONK","rev","malf","liberty","freedom","drugs", "Exodus", \ + "admin","ponies","heresy","meow","Pun Pun","monkey","Ian","moron","pizza","message","spam",\ + "diector", "Hello", "Hi!"," ","nuke","crate","dwarf","xeno") /datum/event/ionstorm/tick() if(botEmagChance) diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 9a74edce3b..6dfc883739 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -113,6 +113,6 @@ if(L) L << "\icon[P] Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)" - else if(world.time > last_spam_time + 1200) - //if there's no server active for two minutes, give up + else if(world.time > last_spam_time + 3000) + //if there's no spam managed to get to receiver for five minutes, give up kill() diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 1bde23eb59..cf5044edbb 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -1,4 +1,5 @@ #define MESSAGE_SERVER_SPAM_REJECT 1 +#define MESSAGE_SERVER_DEFAULT_SPAM_LIMIT 10 var/global/list/obj/machinery/message_server/message_servers = list() @@ -65,8 +66,7 @@ var/global/list/obj/machinery/message_server/message_servers = list() var/list/spamfilter = list("You have won", "your prize", "male enhancement", "shitcurity", \ "are happy to inform you", "account number", "enter your PIN") //Messages having theese tokens will be rejected by server. Case sensitive - var/spamfilter_limit = 10 //Maximal amount of tokens - var/const/errorcode_spam_rejected = MESSAGE_SERVER_SPAM_REJECT + var/spamfilter_limit = MESSAGE_SERVER_DEFAULT_SPAM_LIMIT //Maximal amount of tokens /obj/machinery/message_server/New() message_servers += src @@ -98,10 +98,13 @@ var/global/list/obj/machinery/message_server/message_servers = list() return /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") - pda_msgs += new/datum/data_pda_msg(recipient,sender,message) + var/result for (var/token in spamfilter) if (findtextEx(message,token)) - return errorcode_spam_rejected + message = "[message]" //Rejected messages will be indicated by red color. + result = token //Token caused rejection (if there are multiple, last will be chosen>. + pda_msgs += new/datum/data_pda_msg(recipient,sender,message) + return result /obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1) rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth) @@ -114,6 +117,16 @@ var/global/list/obj/machinery/message_server/message_servers = list() return +/obj/machinery/message_server/attackby(obj/item/weapon/O as obj, mob/living/user as mob) + if (active && !(stat & (BROKEN|NOPOWER)) && (spamfilter_limit < MESSAGE_SERVER_DEFAULT_SPAM_LIMIT*2) && \ + istype(O,/obj/item/weapon/circuitboard/message_monitor)) + spamfilter_limit += round(MESSAGE_SERVER_DEFAULT_SPAM_LIMIT / 2) + user.drop_item() + del(O) + user << "You install additional memory and processors into message server. Its filtering capabilities been enhanced." + else + ..(O, user) + /obj/machinery/message_server/update_icon() if((stat & (BROKEN|NOPOWER))) icon_state = "server-nopower"