diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 71a545cd55..e9e69cf645 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -26,7 +26,7 @@ var/emag = 0 // When it is emagged. var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. var/auth = 0 // Are they authenticated? - var/optioncount = 7 + var/optioncount = 8 // Custom Message Properties var/customsender = "System Administrator" var/obj/item/device/pda/customrecepient = null @@ -122,6 +122,7 @@ dat += "
[++i]. Clear Request Console Logs
" dat += "
[++i]. Set Custom Key
" dat += "
[++i]. Send Admin Message
" + dat += "
[++i]. Modify Spam Filter
" else for(var/n = ++i; n <= optioncount; n++) dat += "
[n]. ---------------
" @@ -240,6 +241,18 @@ [rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]"} dat += "" + //Spam filter modification + if(5) + dat += "
Back - Refresh

" + var/index = 0 + for(var/token in src.linkedServer.spamfilter) + index++ + if(index > 3000) + break + dat += "
[index] [token]
" + dat += "
" + dat += "Add token
" + dat += "" message = defaultmsg @@ -485,6 +498,26 @@ //usr << href_list["select"] + if(href_list["spam"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 5 + + if(href_list["addtoken"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + src.linkedServer.spamfilter += input(usr,"Enter text you want to be filtered out","Token creation") as text|null + + if(href_list["deltoken"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + var/tokennum = text2num(href_list["deltoken"]) + src.linkedServer.spamfilter.Cut(tokennum,tokennum+1) + if (href_list["back"]) src.screen = 0 diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 25d52122ce..4ca1596dd8 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -917,7 +917,11 @@ var/global/list/obj/item/device/pda/PDAs = list() if(useTC != 2) // Does our recipient have a broadcaster on their level? U << "ERROR: Cannot reach recipient." return - useMS.send_pda_message("[P.owner]","[owner]","[t]") + var/send_result = useMS.send_pda_message("[P.owner]","[owner]","[t]") + if (send_result) + U << "ERROR: Messaging server rejected your message." + return + tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) for(var/mob/M in player_list) diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index f610b0d2f9..23ea50dd7b 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -1,10 +1,10 @@ /datum/event/pda_spam endWhen = 6000 - var/time_failed = 0 + var/last_spam_time = 0 var/obj/machinery/message_server/useMS /datum/event/pda_spam/setup() - time_failed = world.time + last_spam_time = world.time for (var/obj/machinery/message_server/MS in message_servers) if(MS.active) useMS = MS @@ -20,7 +20,6 @@ break if(useMS) - time_failed = world.time if(prob(2)) // /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") var/obj/item/device/pda/P @@ -86,7 +85,10 @@ "You have won tickets to the newest romantic comedy 16 RULES OF LOVE!",\ "You have won tickets to the newest thriller THE CULT OF THE SLEEPING ONE!") - useMS.send_pda_message("[P.owner]", sender, message) + if (useMS.send_pda_message("[P.owner]", sender, message)) //Message been filtered by spam filter. + return + + last_spam_time = world.time if (prob(50)) //Give the AI an increased chance to intercept the message for(var/mob/living/silicon/ai/ai in mob_list) @@ -111,6 +113,6 @@ if(L) L << "\icon[P] Message from [sender] (Unknown / spam?), \"[message]\" (Unable to Reply)" - else if(world.time > time_failed + 1200) + else if(world.time > last_spam_time + 1200) //if there's no server active for two minutes, give up kill() diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 6ccf529e76..dd9f2f660c 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -1,3 +1,5 @@ +#define MESSAGE_SERVER_SPAM_REJECT 1 + var/global/list/obj/machinery/message_server/message_servers = list() /datum/data_pda_msg @@ -59,6 +61,9 @@ var/global/list/obj/machinery/message_server/message_servers = list() var/active = 1 var/decryptkey = "password" + var/list/spamfilter = list() + var/const/errorcode_spam_rejected = MESSAGE_SERVER_SPAM_REJECT + /obj/machinery/message_server/New() message_servers += src decryptkey = GenerateKey() @@ -90,6 +95,9 @@ var/global/list/obj/machinery/message_server/message_servers = list() /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") pda_msgs += new/datum/data_pda_msg(recipient,sender,message) + for (var/token in spamfilter) + if (findtextEx(message,token)) + return errorcode_spam_rejected /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)