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.
This commit is contained in:
UristMcKerman
2014-05-29 16:05:00 +04:00
parent c78605b1a4
commit e37a70089b
5 changed files with 26 additions and 12 deletions

View File

@@ -249,7 +249,7 @@
index++
if(index > 3000)
break
dat += "<dd>[index]&#09; <a href='?src=\ref[src];deltoken=[index]'>[token]</a><br></dd>"
dat += "<dd>[index]&#09; <a href='?src=\ref[src];deltoken=[index]'>\[[token]\]</a><br></dd>"
dat += "<hr>"
if (linkedServer.spamfilter.len < linkedServer.spamfilter_limit)
dat += "<a href='?src=\ref[src];addtoken=1'>Add token</a><br>"

View File

@@ -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]")))

View File

@@ -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)

View File

@@ -113,6 +113,6 @@
if(L)
L << "\icon[P] <b>Message from [sender] (Unknown / spam?), </b>\"[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()

View File

@@ -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 = "<font color=\"red\">[message]</font>" //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"