Adds chatroom logging (both admin and IC).

This commit is contained in:
tkdrg
2014-10-29 01:20:53 -03:00
parent 4d79788e24
commit 3a862deb6b
5 changed files with 189 additions and 66 deletions
+5 -1
View File
@@ -70,4 +70,8 @@
/proc/log_pda(text)
if (config.log_pda)
diary << "\[[time_stamp()]]PDA: [text]"
diary << "\[[time_stamp()]]PDA: [text]"
/proc/log_chat(text)
if (config.log_pda) //reusing this for now, can change if needed
diary << "\[[time_stamp()]]CHAT: [text]"
+35
View File
@@ -114,8 +114,10 @@
else
dat += "<dd><A href='?src=\ref[src];view=1'>&#09;[++i]. View Message Logs </a><br></dd>"
dat += "<dd><A href='?src=\ref[src];viewr=1'>&#09;[++i]. View Request Console Logs </a></br></dd>"
dat += "<dd><A href='?src=\ref[src];viewc=1'>&#09;[++i]. View Chatroom Logs </a></br></dd>"
dat += "<dd><A href='?src=\ref[src];clear=1'>&#09;[++i]. Clear Message 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];clearc=1'>&#09;[++i]. Clear Chatroom 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];msg=1'>&#09;[++i]. Send Admin Message</a><br></dd>"
else
@@ -236,6 +238,24 @@
<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>"
//Chatroom Logs
if(5)
var/index = 0
//var/sender = "Anon"
//var/channel = "ss13"
//var/message = "Blank"
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
dat += "<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Channel</th><th width='15%'>Nick</th><th width='300px' word-wrap: break-word>Message</th></tr>"
for(var/datum/data_chat_msg/msg in src.linkedServer.chat_msgs)
index++
if(index > 3000)
break
// Del - Channel - Sender - Message
// X - #ss13 - bigdik - hi asl
dat += "<tr><td width = '5%'><center><A href='?src=\ref[src];delete=\ref[msg]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[msg.channel]</td><td width='15%'>[msg.sender]</td><td width='300px'>[msg.message]</td></tr>"
dat += "</table>"
message = defaultmsg
//user << browse(dat, "window=message;size=700x700")
//onclose(user, "message")
@@ -321,6 +341,14 @@
if(auth)
src.linkedServer.rc_msgs = list()
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
//Clears the chatroom logs - KEY REQUIRED
if (href_list["clearc"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
else
if(auth)
src.linkedServer.chat_msgs = list()
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
//Change the password - KEY REQUIRED
if (href_list["pass"])
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
@@ -464,6 +492,13 @@
else
if(auth)
src.screen = 4
//Chatroom Logs - KEY REQUIRED
if(href_list["viewc"])
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
message = noserver
else
if(auth)
src.screen = 5
//usr << href_list["select"]
+37 -44
View File
@@ -44,7 +44,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
var/datum/chatroom/chat_channel = "" //name of our current NTRC channel, without the #
var/chat_channel = "#ss13" //name of our current NTRC channel
var/datum/event/ntrc_event //our ntrc event trigger
var/nick = "" //our NTRC nick
var/list/ntrclog = list() //NTRC message log
@@ -430,21 +430,16 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "<br>"
if (5)
if(!nick)
if(!nick) //first time join
nick = copytext(sanitize(owner), 1, 9)
dat += "<h4><img src=pda_chatroom.png> Space Station 13 Nanotrasen Relay Chat Network</h4>"
var/datum/chatroom/C = chatchannels[chat_channel]
C.parse_msg(src, nick, "/join [chat_channel]")
dat += "<h4><img src=pda_chatroom.png> SS13 Nanotrasen Relay Chat Network</h4>"
if(!chat_channel)
dat += "<a href='byond://?src=\ref[src];choice=Set Nick'><img src=pda_status.png>[strip_html_properly(nick)]</a>"
dat += "<h4><img src=pda_menu.png> Detected Channels</h4>"
for(var/C in chatchannels)
dat += "<li><a href='byond://?src=\ref[src];choice=Set Channel;C=[C]'>#[html_encode(C)]</a></li>"
else
dat += "<a href='byond://?src=\ref[src];choice=Set Nick'>[strip_html_properly(nick)]</a> | "
dat += "<a href='byond://?src=\ref[src];choice=Set Channel'>#[strip_html_properly(chat_channel)]</a> | "
dat += "<a href='byond://?src=\ref[src];choice=NTRC Message'>Write message</a><br>"
dat += "<a href='byond://?src=\ref[src];choice=Set Nick'>[nick]</a> | "
dat += "<a href='byond://?src=\ref[src];choice=Set Channel'>[chat_channel]</a> | "
dat += "<a href='byond://?src=\ref[src];choice=NTRC Message'>Write message</a><br>"
if(chat_channel)
dat += ntrclog[chat_channel]
else//Else it links to the cart menu proc. Although, it really uses menu hub 4--menu 4 doesn't really exist as it simply redirects to hub.
@@ -513,6 +508,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
mode = 3
if("4")//Redirects to hub
mode = 0
if("5")//Chatroom
mode = 5
//MAIN FUNCTIONS===================================
@@ -619,28 +616,22 @@ var/global/list/obj/item/device/pda/PDAs = list()
//CHATROOM FUNCTIONS====================================
if("Set Nick")
var/t = input(U, "Please enter nickname", name, null) as text
var/t = stripped_input(U, "Please enter nickname", name, null) as text
nick = copytext(sanitize(t), 1, 9)
if("Set Channel")
var/t = href_list["C"]
if(!t)
if(chat_channel)
var/datum/chatroom/C = chatchannels[chat_channel]
C.events.clearEvent("msg_chat", ntrc_event)
chat_channel = ""
else
chat_channel = t
var/t = stripped_input(U, "Please enter channel", name, (chat_channel)) as text
if(t && t in chatchannels)
ntrclog[chat_channel] = "<hr>" + ntrclog[chat_channel]
var/datum/chatroom/C = chatchannels[chat_channel]
var/ret = C.parse_msg(src,nick,"/join")
if(findtextEx(ret,"ERR_",1,5))
ntrclog[chat_channel] = "[ret]<br>" + ntrclog[chat_channel]
else
ntrc_event = ret
chat_channel = t
var/ret = C.parse_msg(src, nick, "/join [chat_channel]")
if(ret == "ERR_AUTH")
ntrclog[chat_channel] = "Please use /auth password to authenticate and then join again." + ntrclog[chat_channel]
if("NTRC Message")
var/t = input(U, "Please enter message", name, null) as text
t = strip_html_properly(t)
var/t = msg_input(U) as text
var/datum/chatroom/C = chatchannels[chat_channel]
if(C)
var/ret = C.parse_msg(src,nick,t)
@@ -710,8 +701,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
else//Cartridge menu linking
mode = text2num(href_list["choice"])
cartridge.mode = mode
cartridge.unlock()
if(cartridge)
cartridge.mode = mode
cartridge.unlock()
else//If not in range, can't interact or not using the pda.
U.unset_machine()
U << browse(null, "window=pda")
@@ -743,40 +735,39 @@ var/global/list/obj/item/device/pda/PDAs = list()
id.loc = get_turf(src)
id = null
/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P)
/obj/item/device/pda/proc/msg_input(var/mob/living/U = usr)
var/t = input(U, "Please enter message", name, null) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if (!t || !istype(P))
if (!t || toff)
return
if (!in_range(src, U) && loc != U)
return
if (isnull(P)||P.toff || toff)
if(!can_use(U))
return
if(emped)
t = Gibberish(t, 100)
return t
/obj/item/device/pda/proc/create_message(var/mob/living/U = usr, var/obj/item/device/pda/P)
var/t = msg_input(U)
if (last_text && world.time < last_text + 5)
return
if(!can_use(U))
if (isnull(P) || P.toff || !istype(P))
return
last_text = world.time
// check if telecomms I/O route 1459 is stable
//var/telecomms_intact = telecomms_process(P.owner, owner, t)
var/obj/machinery/message_server/useMS = null
if(message_servers)
for (var/obj/machinery/message_server/MS in message_servers)
//PDAs are now dependant on the Message Server.
if(MS.active)
useMS = MS
break
var/datum/signal/signal = src.telecomms_process()
if(emped)
t = Gibberish(t, 100)
var/useTC = 0
if(signal)
if(signal.data["done"])
@@ -1126,6 +1117,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
ntrclog[C] = msg + ntrclog[C]
else
ntrclog[channel] = msg + ntrclog[channel]
if (!silent)
loc.audible_message("\icon[src] *[ttone]*", null, 3)
/proc/get_viewable_pdas()
. = list()
+91 -21
View File
@@ -5,29 +5,35 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
//channel.parse_msg
/datum/chatroom
var/name = "ss13"
var/name = "#ss13"
var/channelpassword = ""
var/operator = ""
var/topic = "Welcome to #ss13! The best NTRC channel in this sector of the galaxy!" // topic message for the chatroom
var/list/operators = list() // chat operators
var/list/logs = list() // chat logs
var/list/muted = list() // muted users
var/list/auth = list()
var/list/pass = list()
var/list/banned = list() // banned users
var/list/auth = list() // authenticated clients
var/list/pass = list() // user passwords
var/list/users = list() // current users
var/datum/events/events = new ()
var/list/datum/event/evlist = list()
/datum/chatroom/New()
channelpassword = rand()
//parse_msg() is the exposed interface
//parse_msg() is the exposed interface chat
//clients should interact with parse_msg() and parse_msg() only
/datum/chatroom/proc/parse_msg(client,nick,message)
if(!check_server(client))
var/obj/machinery/message_server/MS = check_server(client)
if(!MS)
return "ERR_TCOM"
if(!nick || length(nick) > 8)
return "ERR_NICK"
MS.send_chat_message(nick,name,message)
if(findtext(message,"/",1,2))
return handle_command(client,nick,copytext(message,2))
@@ -43,7 +49,7 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
for (var/obj/machinery/message_server/MS in message_servers)
var/turf/T = get_turf(MS)
if(MS.active && (T.z == CT.z))
return 1
return MS
return 0
/datum/chatroom/proc/handle_command(client,nick,command) //command parser
@@ -56,22 +62,36 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
return "ERR_AUTH"
switch(cmd[1]) //argument-less commmands
if("join")
return channel_join(client,nick)
if("topic")
if(cmd.len == 1)
return get_topic(client)
else
return set_topic(client,nick,cmd[2])
if("part")
return channel_part(client,nick)
if("del")
return delete_channel(client,nick)
if("who")
return get_who(client, nick)
if(cmd.len == 1)
return "ERR_ARGS"
switch(cmd[1]) //commands with 1 arg
if("op")
if("join")
return channel_join(client,nick,cmd[2])
if("opself")
return operator_auth(client,nick,cmd[2])
if("op")
return make_op(client,nick,cmd[2])
if("deop")
return deop(client,nick,cmd[2])
if("ban")
return ban(client,nick,cmd[2])
if("unban")
return unban(client,nick,cmd[2])
if("kick")
return kick(client,nick,cmd[2])
if("register")
return register_auth(client,nick,cmd[2])
if("mute")
@@ -88,7 +108,8 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
return "ERR_MUTE"
if(!message)
return "ERR_BLNK"
logs += "[strip_html_properly(nick)]> [strip_html_properly(message)]<"
logs += "[strip_html_properly(nick)]> [strip_html_properly(message)]"
log_chat("[usr]/([usr.ckey]) as [nick] sent to [name]: [message]")
events.fireEvent("msg_chat",name,nick,message)
return 1
@@ -111,25 +132,69 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
return 1
/datum/chatroom/proc/delete_channel(client,nick) //delete
if(nick == operator)
if(nick in operators)
for(var/event in events.events)
events.clearEvent("msg_chat",event)
qdel(src)
return 1
return 0
/datum/chatroom/proc/channel_join(client,nick) //join
get_topic(client,nick)
return events.addEvent("msg_chat",client,"msg_chat")
/datum/chatroom/proc/channel_join(client,nick,channel) //join
if(channel == name)
if(nick in banned || nick in users)
return 0
users += nick
get_topic(client,nick)
evlist[nick] = events.addEvent("msg_chat",client,"msg_chat")
return 1
else
channel_part(client,nick)
var/datum/chatroom/C = chatchannels[channel]
return C.parse_msg(client,nick,"/join [channel]")
/datum/chatroom/proc/operator_auth(client,nick,pass) //op
/datum/chatroom/proc/channel_part(client,nick) //part
users -= nick
events.clearEvent("msg_chat",evlist[nick])
return 1
/datum/chatroom/proc/operator_auth(client,nick,pass) //opself
if(pass == channelpassword)
operator += nick
operators += nick
return 1
return 0
/datum/chatroom/proc/make_op(client,nick,target) //op
if(nick in operators)
operators += target
return 1
return 0
/datum/chatroom/proc/deop(client,nick,target) //deop
if(nick in operators)
operators -= target
return 1
return 0
/datum/chatroom/proc/ban(client,nick,target) //ban
if(nick in operators)
banned += target
return 1
return 0
/datum/chatroom/proc/unban(client,nick,target) //unban
if(nick in operators)
banned -= target
return 1
return 0
/datum/chatroom/proc/kick(client,nick,target) //kick
if(nick in operators)
channel_part(null,nick)
return 1
return 0
/datum/chatroom/proc/set_topic(client,nick,newtopic) //topic
if(operator == nick)
if(nick in operators)
topic = strip_html_properly(newtopic)
return 1
return 0
@@ -138,13 +203,18 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
call(client,"msg_chat")(name,"NTbot",topic)
return 1
/datum/chatroom/proc/get_who(client,nick) //who
for(var/user in users)
call(client,"msg_chat")(name,"NTbot",user)
return 1
/datum/chatroom/proc/get_log(client,nick,lines) //log
for(var/i=0;i<lines;i++)
call(client,"msg_chat")(name,"NTbot",logs[logs.len-i])
return 1
/datum/chatroom/proc/mute_nick(client,nick,target) //mute
if(operator == nick)
if(nick in operators)
muted += target
return 1
return 0
@@ -154,11 +224,11 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
chatchannels[target] = new /datum/chatroom()
var/datum/chatroom/C = chatchannels[target]
C.name = target
C.operator = nick
C.operators += nick
return 1
/datum/chatroom/proc/new_pass(client,nick,target) //pass
if(operator == nick)
if(nick in operators)
channelpassword = target
return 1
return 0
+21
View File
@@ -1,5 +1,18 @@
var/global/list/obj/machinery/message_server/message_servers = list()
/datum/data_chat_msg
var/sender = "Anon"
var/channel = "ss13"
var/message = "Blank"
/datum/data_chat_msg/New(var/param_sen = "", var/param_chan = "", var/param_msg = "")
if(param_sen)
sender = param_sen
if(param_chan)
channel = param_chan
if(param_msg)
message = param_msg
/datum/data_pda_msg
var/recipient = "Unspecified" //name of the person
var/sender = "Unspecified" //name of the sender
@@ -54,6 +67,7 @@ var/global/list/obj/machinery/message_server/message_servers = list()
idle_power_usage = 10
active_power_usage = 100
var/list/datum/data_chat_msg/chat_msgs = list()
var/list/datum/data_pda_msg/pda_msgs = list()
var/list/datum/data_rc_msg/rc_msgs = list()
var/active = 1
@@ -88,6 +102,9 @@ var/global/list/obj/machinery/message_server/message_servers = list()
update_icon()
return
/obj/machinery/message_server/proc/send_chat_message(var/sender = "", var/channel = "", var/message = "")
chat_msgs += new/datum/data_chat_msg(sender,channel,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)
@@ -238,10 +255,13 @@ var/obj/machinery/blackbox_recorder/blackbox
/obj/machinery/blackbox_recorder/proc/round_end_data_gathering()
var/chat_msg_amt = 0
var/pda_msg_amt = 0
var/rc_msg_amt = 0
for(var/obj/machinery/message_server/MS in world)
if(MS.chat_msgs.len > chat_msg_amt)
chat_msg_amt = MS.chat_msgs.len
if(MS.pda_msgs.len > pda_msg_amt)
pda_msg_amt = MS.pda_msgs.len
if(MS.rc_msgs.len > rc_msg_amt)
@@ -260,6 +280,7 @@ var/obj/machinery/blackbox_recorder/blackbox
feedback_add_details("radio_usage","SRV-[msg_service.len]")
feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
feedback_add_details("radio_usage","OTH-[messages.len]")
feedback_add_details("radio_usage","CHA-[chat_msg_amt]")
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
feedback_add_details("radio_usage","RC-[rc_msg_amt]")