mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 15:42:35 +00:00
* Fixes the chat client and services. * oh how we love you * lemme talk to 'em... * a * m * lilas * bro --------- Co-authored-by: Matt Atlas <liermattia@gmail.com>
178 lines
5.3 KiB
Plaintext
178 lines
5.3 KiB
Plaintext
var/global/ntnrc_uid = 0
|
|
/datum/ntnet_conversation
|
|
var/id
|
|
var/title = "Untitled Conversation"
|
|
var/datum/ntnet_user/operator // "Administrator" of this channel. Creator starts as channel's operator,
|
|
var/list/messages = list()
|
|
var/list/users = list()
|
|
var/direct = FALSE
|
|
var/password
|
|
|
|
/datum/ntnet_conversation/New(var/name, var/no_operator)
|
|
id = ntnrc_uid
|
|
ntnrc_uid++
|
|
if(name)
|
|
title = name
|
|
if(ntnet_global)
|
|
ntnet_global.chat_channels.Add(src)
|
|
if(no_operator)
|
|
operator = "NanoTrasen Information Technology Division" // assign a fake operator
|
|
..()
|
|
|
|
/datum/ntnet_conversation/proc/process_message(var/datum/ntnet_message/message, var/update_ui = TRUE)
|
|
var/admin_log = message.format_admin_log()
|
|
if (admin_log)
|
|
log_ntirc("[message.user.client.ckey] ([message.user.client.mob.real_name])|([message.nuser.username]) -> ([title]): [admin_log]", ckey=key_name(message.user), conversation=title)
|
|
|
|
for(var/datum/ntnet_user/U in users)
|
|
for(var/datum/computer_file/program/chat_client/Cl in U.clients)
|
|
var/notification_text = message.format_chat_notification(src, Cl)
|
|
if(notification_text && Cl.can_receive_notification(message.client))
|
|
if(!Cl.message_mute)
|
|
Cl.computer.output_message(notification_text, 0)
|
|
if(message.play_sound)
|
|
Cl.play_notification_sound(message.client)
|
|
|
|
var/ntnet_log = message.format_ntnet_log(src)
|
|
if(ntnet_log)
|
|
ntnet_global.add_log(ntnet_log, message.client.computer.network_card, TRUE)
|
|
|
|
var/chat_log = message.format_chat_log(src)
|
|
if(chat_log)
|
|
messages.Add(chat_log)
|
|
trim_message_list()
|
|
|
|
if(update_ui)
|
|
for(var/datum/ntnet_user/U in users)
|
|
for(var/datum/computer_file/program/chat_client/Cl in U.clients)
|
|
SStgui.update_uis(Cl)
|
|
|
|
/datum/ntnet_conversation/proc/trim_message_list()
|
|
if(messages.len <= 50)
|
|
return
|
|
for(var/message in messages)
|
|
messages -= message
|
|
if(messages.len <= 50)
|
|
return
|
|
|
|
/// EXTERNAL PROCs
|
|
|
|
/datum/ntnet_conversation/proc/get_title(var/datum/computer_file/program/chat_client/cl = null)
|
|
if(direct)
|
|
var/names = list()
|
|
for(var/datum/ntnet_user/U in users)
|
|
names += U.username
|
|
if(istype(cl) && istype(cl.my_user))
|
|
names -= cl.my_user.username
|
|
return "\[DM] [english_list(names)]"
|
|
else
|
|
return title
|
|
|
|
/datum/ntnet_conversation/proc/can_see(var/datum/computer_file/program/chat_client/cl)
|
|
if(cl.netadmin_mode)
|
|
return TRUE
|
|
if(istype(cl.my_user))
|
|
if(cl.my_user in users)
|
|
return TRUE
|
|
else
|
|
for(var/datum/ntnet_user/user in users)
|
|
if(cl in user.clients)
|
|
return TRUE
|
|
if(!direct)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/ntnet_conversation/proc/can_interact(var/datum/computer_file/program/chat_client/cl)
|
|
if(cl.netadmin_mode)
|
|
return TRUE
|
|
if(istype(cl.my_user))
|
|
if(cl.my_user in users)
|
|
return TRUE
|
|
else
|
|
for(var/datum/ntnet_user/user in users)
|
|
if(cl in user.clients)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/ntnet_conversation/proc/can_manage(var/datum/computer_file/program/chat_client/cl)
|
|
if(cl.netadmin_mode)
|
|
return TRUE
|
|
if(cl.my_user == operator)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/ntnet_conversation/proc/cl_send(var/datum/computer_file/program/chat_client/Cl, var/message, var/mob/user)
|
|
if(!istype(Cl) || !can_interact(Cl))
|
|
return
|
|
var/datum/ntnet_message/message/msg = new(Cl)
|
|
msg.message = message
|
|
msg.user = user
|
|
process_message(msg)
|
|
|
|
/datum/ntnet_conversation/proc/cl_join(var/datum/computer_file/program/chat_client/Cl)
|
|
if(!istype(Cl) || !can_see(Cl) || direct)
|
|
return
|
|
if(Cl.my_user in users)
|
|
return
|
|
var/datum/ntnet_message/join/msg = new(Cl)
|
|
Cl.my_user.channels.Add(src)
|
|
users.Add(Cl.my_user)
|
|
if(!operator)
|
|
operator = Cl.my_user
|
|
var/datum/ntnet_message/new_op/msg2 = new(Cl)
|
|
process_message(msg, FALSE)
|
|
process_message(msg2)
|
|
return
|
|
process_message(msg)
|
|
|
|
/datum/ntnet_conversation/proc/cl_leave(var/datum/computer_file/program/chat_client/Cl)
|
|
if(!istype(Cl) || !istype(Cl.my_user) || !(Cl.my_user in users) || !can_interact(Cl) || direct)
|
|
return
|
|
if(Cl.focused_conv == src)
|
|
Cl.focused_conv = null
|
|
var/datum/ntnet_message/leave/msg = new(Cl)
|
|
Cl.my_user.channels.Remove(src)
|
|
users.Remove(Cl.my_user)
|
|
if(operator == Cl.my_user)
|
|
if(users.len)
|
|
operator = pick(users)
|
|
var/datum/ntnet_message/new_op/msg2 = new()
|
|
msg2.nuser = operator
|
|
process_message(msg, FALSE)
|
|
process_message(msg2)
|
|
return
|
|
process_message(msg)
|
|
|
|
/datum/ntnet_conversation/proc/cl_change_title(var/datum/computer_file/program/chat_client/Cl, var/newTitle)
|
|
if(!istype(Cl) || !istype(Cl.my_user) || !can_manage(Cl) || direct)
|
|
return
|
|
var/datum/ntnet_message/new_title/msg = new(Cl)
|
|
msg.title = newTitle
|
|
process_message(msg)
|
|
title = newTitle
|
|
|
|
/datum/ntnet_conversation/proc/cl_set_password(var/datum/computer_file/program/chat_client/Cl, var/newPassword)
|
|
if(!istype(Cl) || !istype(Cl.my_user) || !can_manage(Cl) || direct)
|
|
return
|
|
if(newPassword)
|
|
password = newPassword
|
|
else
|
|
password = FALSE
|
|
|
|
/datum/ntnet_conversation/proc/cl_kick(var/datum/computer_file/program/chat_client/Cl, var/datum/ntnet_user/target)
|
|
if(!istype(Cl) || !istype(Cl.my_user) || !can_manage(Cl) || !(target in users) || direct)
|
|
return
|
|
var/datum/ntnet_message/kick/msg = new(Cl)
|
|
msg.target = target
|
|
target.channels.Remove(src)
|
|
users.Remove(target)
|
|
if(operator == target)
|
|
if(users.len)
|
|
operator = pick(users)
|
|
var/datum/ntnet_message/new_op/msg2 = new()
|
|
msg2.nuser = operator
|
|
process_message(msg, FALSE)
|
|
process_message(msg2)
|
|
return
|
|
process_message(msg)
|