Added spam filter

Added spam filter functionality to message server and message server
monitor.
This commit is contained in:
UristMcKerman
2014-05-28 17:12:18 +04:00
parent bf3e3db0d7
commit 0a0ce28f68
4 changed files with 54 additions and 7 deletions

View File

@@ -26,7 +26,7 @@
var/emag = 0 // When it is emagged. var/emag = 0 // When it is emagged.
var/message = "<span class='notice'>System bootup complete. Please select an option.</span>" // The message that shows on the main menu. var/message = "<span class='notice'>System bootup complete. Please select an option.</span>" // The message that shows on the main menu.
var/auth = 0 // Are they authenticated? var/auth = 0 // Are they authenticated?
var/optioncount = 7 var/optioncount = 8
// Custom Message Properties // Custom Message Properties
var/customsender = "System Administrator" var/customsender = "System Administrator"
var/obj/item/device/pda/customrecepient = null var/obj/item/device/pda/customrecepient = null
@@ -122,6 +122,7 @@
dat += "<dd><A href='?src=\ref[src];clearr=1'>&#09;[++i]. Clear Request Console Logs</a><br></dd>" dat += "<dd><A href='?src=\ref[src];clearr=1'>&#09;[++i]. Clear Request Console Logs</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];pass=1'>&#09;[++i]. Set Custom Key</a><br></dd>" dat += "<dd><A href='?src=\ref[src];pass=1'>&#09;[++i]. Set Custom Key</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>" dat += "<dd><A href='?src=\ref[src];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>"
dat += "<dd><A href='?src=\ref[src];spam=1'>&#09;[++i]. Modify Spam Filter</a><br></dd>"
else else
for(var/n = ++i; n <= optioncount; n++) for(var/n = ++i; n <= optioncount; n++)
dat += "<dd><font color='blue'>&#09;[n]. ---------------</font><br></dd>" dat += "<dd><font color='blue'>&#09;[n]. ---------------</font><br></dd>"
@@ -240,6 +241,18 @@
<td width='15%'>[rc.rec_dpt]</td><td width='300px'>[rc.message]</td><td width='15%'>[rc.stamp]</td><td width='15%'>[rc.id_auth]</td><td width='15%'>[rc.priority]</td></tr>"} <td width='15%'>[rc.rec_dpt]</td><td width='300px'>[rc.message]</td><td width='15%'>[rc.stamp]</td><td width='15%'>[rc.id_auth]</td><td width='15%'>[rc.priority]</td></tr>"}
dat += "</table>" dat += "</table>"
//Spam filter modification
if(5)
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
var/index = 0
for(var/token in src.linkedServer.spamfilter)
index++
if(index > 3000)
break
dat += "<dd>[index]&#09; <a href='?src=\ref[src];deltoken=[index]'>[token]</a><br></dd>"
dat += "<hr>"
dat += "<a href='?src=\ref[src];addtoken=1'>Add token</a><br>"
dat += "</body>" dat += "</body>"
message = defaultmsg message = defaultmsg
@@ -485,6 +498,26 @@
//usr << href_list["select"] //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"]) if (href_list["back"])
src.screen = 0 src.screen = 0

View File

@@ -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? if(useTC != 2) // Does our recipient have a broadcaster on their level?
U << "ERROR: Cannot reach recipient." U << "ERROR: Cannot reach recipient."
return 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]"))) 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]"))) P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
for(var/mob/M in player_list) for(var/mob/M in player_list)

View File

@@ -1,10 +1,10 @@
/datum/event/pda_spam /datum/event/pda_spam
endWhen = 6000 endWhen = 6000
var/time_failed = 0 var/last_spam_time = 0
var/obj/machinery/message_server/useMS var/obj/machinery/message_server/useMS
/datum/event/pda_spam/setup() /datum/event/pda_spam/setup()
time_failed = world.time last_spam_time = world.time
for (var/obj/machinery/message_server/MS in message_servers) for (var/obj/machinery/message_server/MS in message_servers)
if(MS.active) if(MS.active)
useMS = MS useMS = MS
@@ -20,7 +20,6 @@
break break
if(useMS) if(useMS)
time_failed = world.time
if(prob(2)) if(prob(2))
// /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") // /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "")
var/obj/item/device/pda/P 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 romantic comedy 16 RULES OF LOVE!",\
"You have won tickets to the newest thriller THE CULT OF THE SLEEPING ONE!") "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 if (prob(50)) //Give the AI an increased chance to intercept the message
for(var/mob/living/silicon/ai/ai in mob_list) for(var/mob/living/silicon/ai/ai in mob_list)
@@ -111,6 +113,6 @@
if(L) if(L)
L << "\icon[P] <b>Message from [sender] (Unknown / spam?), </b>\"[message]\" (Unable to Reply)" L << "\icon[P] <b>Message from [sender] (Unknown / spam?), </b>\"[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 //if there's no server active for two minutes, give up
kill() kill()

View File

@@ -1,3 +1,5 @@
#define MESSAGE_SERVER_SPAM_REJECT 1
var/global/list/obj/machinery/message_server/message_servers = list() var/global/list/obj/machinery/message_server/message_servers = list()
/datum/data_pda_msg /datum/data_pda_msg
@@ -59,6 +61,9 @@ var/global/list/obj/machinery/message_server/message_servers = list()
var/active = 1 var/active = 1
var/decryptkey = "password" var/decryptkey = "password"
var/list/spamfilter = list()
var/const/errorcode_spam_rejected = MESSAGE_SERVER_SPAM_REJECT
/obj/machinery/message_server/New() /obj/machinery/message_server/New()
message_servers += src message_servers += src
decryptkey = GenerateKey() 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 = "") /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "")
pda_msgs += new/datum/data_pda_msg(recipient,sender,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) /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) rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth)