mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-23 20:17:15 +01:00
General Cleanup (#19088)
* Remove unused news_articles system * Rip out the webhook system * Merk bot/ * Rip out old IRC code * Move the malf_ai manual * Clean up the tools folder * Revert "Remove unused news_articles system" This reverts commit b1295ce8fa714ea35d768365c267b4b60fcd2faa. * Put these back
This commit is contained in:
@@ -1588,14 +1588,6 @@ ADMIN_VERB(cancel_reboot, R_SERVER, "Cancel Reboot", "Cancels a pending world re
|
||||
log_game(plaintext_title)
|
||||
log_game(fax_text)
|
||||
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_FAX_SENT,
|
||||
list(
|
||||
"name" = "[key_name(owner)] [plaintext_title].",
|
||||
"body" = fax_text
|
||||
)
|
||||
)
|
||||
|
||||
else
|
||||
to_chat(src.owner, span_warning("Message reply failed."))
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#define IRCREPLYCOUNT 2
|
||||
|
||||
|
||||
//allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm
|
||||
/client/proc/cmd_admin_pm_context(mob/M in GLOB.mob_list)
|
||||
set category = null
|
||||
@@ -78,207 +75,100 @@
|
||||
return
|
||||
|
||||
var/client/recipient
|
||||
var/irc = 0
|
||||
if(istext(whom))
|
||||
if(cmptext(copytext(whom,1,2),"@"))
|
||||
whom = findStealthKey(whom)
|
||||
if(whom == "IRCKEY")
|
||||
irc = 1
|
||||
else
|
||||
recipient = GLOB.directory[whom]
|
||||
recipient = GLOB.directory[whom]
|
||||
else if(isclient(whom))
|
||||
recipient = whom
|
||||
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
msg = tgui_input_text(src, "Message:", "Private message to [key_name(recipient, 0, 0)]", multiline = TRUE, encode = FALSE)
|
||||
|
||||
if(irc)
|
||||
if(!ircreplyamount) //to prevent people from spamming irc
|
||||
return
|
||||
if(!msg)
|
||||
msg = tgui_input_text(src, "Message:", "Private message to Administrator", multiline = TRUE, encode = FALSE)
|
||||
|
||||
if(!msg)
|
||||
return
|
||||
if(holder)
|
||||
to_chat(src, span_admin_pm_warning("Error: Use the admin IRC channel, nerd."))
|
||||
return
|
||||
|
||||
|
||||
else
|
||||
//get message text, limit it's length.and clean/escape html
|
||||
if(!msg)
|
||||
msg = tgui_input_text(src, "Message:", "Private message to [key_name(recipient, 0, 0)]", multiline = TRUE, encode = FALSE)
|
||||
|
||||
//clean the message if it's not sent by a high-rank admin
|
||||
if(!check_rights(R_SERVER|R_DEBUG, FALSE)||irc)//no sending html to the poor bots
|
||||
msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN)))
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted)."))
|
||||
return
|
||||
|
||||
if(!recipient)
|
||||
if(!current_ticket)
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found."))
|
||||
to_chat(src, msg)
|
||||
return
|
||||
log_admin("Adminhelp: [key_name(src)]: [msg]")
|
||||
current_ticket.MessageNoRecipient(msg)
|
||||
//clean the message if it's not sent by a high-rank admin
|
||||
if(!check_rights(R_SERVER|R_DEBUG, FALSE))//no sending html to the poor bots
|
||||
msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN)))
|
||||
if(!msg)
|
||||
return
|
||||
|
||||
if (src.handle_spam_prevention(MUTE_ADMINHELP))
|
||||
return
|
||||
|
||||
if(prefs.muted & MUTE_ADMINHELP)
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: You are unable to use admin PM-s (muted)."))
|
||||
return
|
||||
|
||||
if(!recipient)
|
||||
if(!current_ticket)
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: Client not found."))
|
||||
to_chat(src, msg)
|
||||
return
|
||||
log_admin("Adminhelp: [key_name(src)]: [msg]")
|
||||
current_ticket.MessageNoRecipient(msg)
|
||||
return
|
||||
|
||||
var/rawmsg = msg
|
||||
|
||||
var/keywordparsedmsg = keywords_lookup(msg)
|
||||
|
||||
if(irc)
|
||||
to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [rawmsg]"))
|
||||
admin_ticket_log(src, span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, TRUE, TRUE)]") + " to " + span_italics("IRC") + ": [keywordparsedmsg]"))
|
||||
ircreplyamount--
|
||||
if(recipient.holder)
|
||||
if(holder) //both are admins
|
||||
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]"))
|
||||
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]"))
|
||||
|
||||
//omg this is dumb, just fill in both their tickets
|
||||
var/interaction_message = span_admin_pm_notice("PM from-" + span_bold("[key_name(src, recipient, 1)]") + " to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]")
|
||||
admin_ticket_log(src, interaction_message)
|
||||
if(recipient != src) //reeee
|
||||
admin_ticket_log(recipient, interaction_message)
|
||||
|
||||
else //recipient is an admin but sender is not
|
||||
var/replymsg = span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]")
|
||||
admin_ticket_log(src, replymsg)
|
||||
to_chat(recipient, replymsg)
|
||||
to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [msg]"))
|
||||
|
||||
//play the recieving admin the adminhelp sound (if they have them enabled)
|
||||
if(recipient.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping))
|
||||
recipient << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
else
|
||||
if(recipient.holder)
|
||||
if(holder) //both are admins
|
||||
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]"))
|
||||
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]"))
|
||||
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
|
||||
if(!recipient.current_ticket)
|
||||
new /datum/ticket(msg, recipient, TRUE, 1)
|
||||
|
||||
//omg this is dumb, just fill in both their tickets
|
||||
var/interaction_message = span_admin_pm_notice("PM from-" + span_bold("[key_name(src, recipient, 1)]") + " to-" + span_bold("[key_name(recipient, src, 1)]") + ": [keywordparsedmsg]")
|
||||
admin_ticket_log(src, interaction_message)
|
||||
if(recipient != src) //reeee
|
||||
admin_ticket_log(recipient, interaction_message)
|
||||
to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --"))))
|
||||
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 0)]") + ": [msg]"))
|
||||
to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply.")))
|
||||
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [msg]"))
|
||||
|
||||
else //recipient is an admin but sender is not
|
||||
var/replymsg = span_admin_pm_warning("Reply PM from-" + span_bold("[key_name(src, recipient, 1)]") + ": [keywordparsedmsg]")
|
||||
admin_ticket_log(src, replymsg)
|
||||
to_chat(recipient, replymsg)
|
||||
to_chat(src, span_admin_pm_notice("PM to-" + span_bold("Admins") + ": [msg]"))
|
||||
admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]"))
|
||||
|
||||
//play the recieving admin the adminhelp sound (if they have them enabled)
|
||||
if(recipient.prefs?.read_preference(/datum/preference/toggle/holder/play_adminhelp_ping))
|
||||
recipient << 'sound/effects/adminhelp.ogg'
|
||||
//always play non-admin recipients the adminhelp sound
|
||||
recipient << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
else
|
||||
if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
|
||||
if(!recipient.current_ticket)
|
||||
new /datum/ticket(msg, recipient, TRUE, 1)
|
||||
//AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
|
||||
if(CONFIG_GET(flag/popup_admin_pm))
|
||||
spawn() //so we don't hold the caller proc up
|
||||
var/sender = src
|
||||
var/sendername = key
|
||||
var/reply = tgui_input_text(recipient, msg,"Admin PM from-[sendername]", "", multiline = TRUE) //show message and await a reply
|
||||
if(recipient && reply)
|
||||
if(sender)
|
||||
recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
|
||||
else
|
||||
adminhelp(reply) //sender has left, adminhelp instead
|
||||
return
|
||||
|
||||
to_chat(recipient, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --"))))
|
||||
to_chat(recipient, span_admin_pm_warning("Admin PM from-" + span_bold("[key_name(src, recipient, 0)]") + ": [msg]"))
|
||||
to_chat(recipient, span_admin_pm_warning(span_italics("Click on the administrator's name to reply.")))
|
||||
to_chat(src, span_admin_pm_notice("Admin PM to-" + span_bold("[key_name(recipient, src, 1)]") + ": [msg]"))
|
||||
else //neither are admins
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: Non-admin to non-admin PM communication is forbidden."))
|
||||
return
|
||||
|
||||
admin_ticket_log(recipient, span_admin_pm_notice("PM From [key_name_admin(src)]: [keywordparsedmsg]"))
|
||||
|
||||
//always play non-admin recipients the adminhelp sound
|
||||
recipient << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
//AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
|
||||
if(CONFIG_GET(flag/popup_admin_pm))
|
||||
spawn() //so we don't hold the caller proc up
|
||||
var/sender = src
|
||||
var/sendername = key
|
||||
var/reply = tgui_input_text(recipient, msg,"Admin PM from-[sendername]", "", multiline = TRUE) //show message and await a reply
|
||||
if(recipient && reply)
|
||||
if(sender)
|
||||
recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
|
||||
else
|
||||
adminhelp(reply) //sender has left, adminhelp instead
|
||||
return
|
||||
|
||||
else //neither are admins
|
||||
to_chat(src, span_admin_pm_warning("Error: Admin-PM: Non-admin to non-admin PM communication is forbidden."))
|
||||
return
|
||||
|
||||
if(irc)
|
||||
log_admin("PM: [key_name(src)]->IRC: [rawmsg]")
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(!check_rights_for(X, R_ADMIN))
|
||||
continue
|
||||
to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->IRC:") + " [keywordparsedmsg]"))
|
||||
else
|
||||
log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
|
||||
//we don't use message_admins here because the sender/receiver might get it too
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(!check_rights_for(X, R_ADMIN))
|
||||
continue
|
||||
if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
|
||||
to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]:") + " [keywordparsedmsg]"))
|
||||
|
||||
/proc/IrcPm(target,msg,sender)
|
||||
var/client/C = GLOB.directory[target]
|
||||
|
||||
var/datum/ticket/ticket = C ? C.current_ticket : GLOB.tickets.CKey2ActiveTicket(target)
|
||||
var/compliant_msg = trim(lowertext(msg))
|
||||
var/irc_tagged = "[sender](IRC)"
|
||||
var/list/splits = splittext(compliant_msg, " ")
|
||||
if(splits.len && splits[1] == "ticket")
|
||||
if(splits.len < 2)
|
||||
return "Usage: ticket <close|resolve|icissue|reject>"
|
||||
switch(splits[2])
|
||||
if("close")
|
||||
if(ticket)
|
||||
ticket.Close(irc_tagged)
|
||||
return "Ticket #[ticket.id] successfully closed"
|
||||
if("resolve")
|
||||
if(ticket)
|
||||
ticket.Resolve(irc_tagged)
|
||||
return "Ticket #[ticket.id] successfully resolved"
|
||||
if("icissue")
|
||||
if(ticket)
|
||||
ticket.ICIssue(irc_tagged)
|
||||
return "Ticket #[ticket.id] successfully marked as IC issue"
|
||||
if("reject")
|
||||
if(ticket)
|
||||
ticket.Reject(irc_tagged)
|
||||
return "Ticket #[ticket.id] successfully rejected"
|
||||
else
|
||||
return "Usage: ticket <close|resolve|icissue|reject>"
|
||||
return "Error: Ticket could not be found"
|
||||
|
||||
var/static/stealthkey
|
||||
var/adminname = "Administrator"
|
||||
|
||||
if(!C)
|
||||
return "Error: No client"
|
||||
|
||||
if(!stealthkey)
|
||||
stealthkey = GenIrcStealthKey()
|
||||
|
||||
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
|
||||
if(!msg)
|
||||
return "Error: No message"
|
||||
|
||||
message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]")
|
||||
log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]")
|
||||
|
||||
to_chat(C, span_admin_pm_warning(span_huge(span_bold("-- Administrator private message --"))))
|
||||
to_chat(C, span_admin_pm_warning("Admin PM from-" + span_bold("<a href='byond://?priv_msg=[stealthkey]'>[adminname]</a>") + ": [msg]"))
|
||||
to_chat(C, span_admin_pm_warning(span_italics("Click on the administrator's name to reply.")))
|
||||
|
||||
admin_ticket_log(C, span_admin_pm_notice("PM From [irc_tagged]: [msg]"))
|
||||
|
||||
window_flash(C)
|
||||
//always play non-admin recipients the adminhelp sound
|
||||
C << 'sound/effects/adminhelp.ogg'
|
||||
|
||||
C.ircreplyamount = IRCREPLYCOUNT
|
||||
|
||||
return "Message Successful"
|
||||
|
||||
/proc/GenIrcStealthKey()
|
||||
var/num = (rand(0,1000))
|
||||
var/i = 0
|
||||
while(i == 0)
|
||||
i = 1
|
||||
for(var/P in GLOB.stealthminID)
|
||||
if(num == GLOB.stealthminID[P])
|
||||
num++
|
||||
i = 0
|
||||
var/stealth = "@[num2text(num)]"
|
||||
GLOB.stealthminID["IRCKEY"] = stealth
|
||||
return stealth
|
||||
|
||||
#undef IRCREPLYCOUNT
|
||||
log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
|
||||
//we don't use message_admins here because the sender/receiver might get it too
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(!check_rights_for(X, R_ADMIN))
|
||||
continue
|
||||
if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
|
||||
to_chat(X, span_admin_pm_notice(span_bold("PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]:") + " [keywordparsedmsg]"))
|
||||
|
||||
@@ -24,13 +24,6 @@
|
||||
to_chat(world, span_filter_system(span_alert("[GLOB.custom_event_msg]")))
|
||||
to_chat(world, span_filter_system("<br>"))
|
||||
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_CUSTOM_EVENT,
|
||||
list(
|
||||
"text" = GLOB.custom_event_msg,
|
||||
)
|
||||
)
|
||||
|
||||
// normal verb for players to view info
|
||||
/client/verb/cmd_view_custom_event()
|
||||
set category = "OOC.Game"
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
var/last_message = ""
|
||||
///contins a number of how many times a message identical to last_message was sent.
|
||||
var/last_message_count = 0
|
||||
var/ircreplyamount = 0
|
||||
var/entity_narrate_holder //Holds /datum/entity_narrate when using the relevant admin verbs.
|
||||
var/fakeConversations //Holds fake PDA conversations for event set-up
|
||||
|
||||
@@ -63,8 +62,6 @@
|
||||
var/datum/volume_panel/volume_panel = null // Initialized by /client/verb/volume_panel()
|
||||
var/seen_news = 0
|
||||
|
||||
var/adminhelped = 0
|
||||
|
||||
///////////////
|
||||
//SOUND STUFF//
|
||||
///////////////
|
||||
@@ -75,10 +72,6 @@
|
||||
////////////
|
||||
// comment out the line below when debugging locally to enable the options & messages menu
|
||||
//control_freak = 1
|
||||
|
||||
var/received_irc_pm = -99999
|
||||
var/irc_admin //IRC admin that spoke with them last.
|
||||
var/mute_irc = 0
|
||||
var/ip_reputation = 0 //Do we think they're using a proxy/vpn? Only if IP Reputation checking is enabled in config.
|
||||
|
||||
///Used for limiting the rate of topic sends by the client to avoid abuse
|
||||
|
||||
@@ -49,8 +49,6 @@ Software would almost exclusively use NanoUI modules. Few exceptions are text ed
|
||||
and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network.
|
||||
What i plan to add:
|
||||
|
||||
Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do
|
||||
|
||||
Basic - Software in this bundle is automagically preinstalled in every new computer
|
||||
NTN Transfer - Allows P2P transfer of files to other computers that run this.
|
||||
Configurator - Allows configuration of computer's hardware, basically status screen.
|
||||
|
||||
@@ -438,14 +438,6 @@ Extracted to its own procedure for easier logic handling with paper bundles.
|
||||
summary = copytext(summary, 1, webhook_length_limit + 1)
|
||||
summary += "\n\[Truncated\]"
|
||||
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_FAX_SENT,
|
||||
list(
|
||||
"name" = "[faxname] '[sent.name]' sent from [key_name(sender)]",
|
||||
"body" = summary
|
||||
)
|
||||
)
|
||||
|
||||
/*
|
||||
##### ####
|
||||
##### Webhook Functionality ####
|
||||
|
||||
@@ -310,31 +310,21 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
if(1)
|
||||
to_chat(C, span_adminnotice("PM to-" + span_bold("Admins") + ": [name]"))
|
||||
|
||||
//send it to irc if nobody is on and tell us how many were on
|
||||
var/admin_number_present = send2irc_adminless_only(initiator_ckey, name)
|
||||
var/admin_number_present = count_admins()
|
||||
log_admin("Ticket #[id]: [key_name(initiator)]: [name] - heard by [admin_number_present] non-AFK admins who have +BAN.")
|
||||
if(admin_number_present <= 0)
|
||||
to_chat(C, span_notice("No active admins are online, your adminhelp was sent to the admin discord."))
|
||||
|
||||
send2adminchatwebhook()
|
||||
|
||||
var/list/adm = get_admin_counts()
|
||||
var/list/activemins = adm["present"]
|
||||
var activeMins = activemins.len
|
||||
var/activeMins = activemins.len
|
||||
if(is_bwoink)
|
||||
ahelp_discord_message("[level == 0 ? "MENTORHELP" : "ADMINHELP"]: FROM: [key_name_admin(usr)] TO [initiator_ckey]/[initiator_key_name] - MSG: \n ```[raw_msg]``` \n Heard by [activeMins] NON-AFK staff members.")
|
||||
else
|
||||
ahelp_discord_message("[level == 0 ? "MENTORHELP" : "ADMINHELP"]: FROM: [initiator_ckey]/[initiator_key_name] - MSG: \n ```[raw_msg]``` \n Heard by [activeMins] NON-AFK staff members.")
|
||||
|
||||
// Also send it to discord since that's the hip cool thing now.
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) ticket opened.",
|
||||
"body" = "[key_name(initiator)] has opened a ticket. \n[msg]",
|
||||
"color" = COLOR_WEBHOOK_POOR
|
||||
)
|
||||
)
|
||||
|
||||
GLOB.tickets.active_tickets += src
|
||||
|
||||
// Open a new chat with the user
|
||||
@@ -477,14 +467,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
initiator.mob.throw_alert("open ticket", /atom/movable/screen/alert/open_ticket)
|
||||
//TicketPanel() //can only be done from here, so refresh it
|
||||
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) reopened.",
|
||||
"body" = "Reopened by [ismob(user) ? key_name(user) : user]."
|
||||
)
|
||||
)
|
||||
|
||||
//private
|
||||
/datum/ticket/proc/RemoveActive()
|
||||
if(state != AHELP_ACTIVE)
|
||||
@@ -511,14 +493,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
var/msg = "Ticket [TicketHref("#[id]")] closed by [admin_closer_name]."
|
||||
message_admins(msg)
|
||||
log_admin(msg)
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) closed.",
|
||||
"body" = "Closed by [ismob(user) ? key_name(user) : user].",
|
||||
"color" = COLOR_WEBHOOK_BAD
|
||||
)
|
||||
)
|
||||
initiator?.mob?.clear_alert("open ticket")
|
||||
|
||||
//Mark open ticket as resolved/legitimate, returns ahelp verb
|
||||
@@ -542,15 +516,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
message_admins(msg)
|
||||
|
||||
log_admin(msg)
|
||||
if(type == 1)
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) resolved.",
|
||||
"body" = "Marked as Resolved by [ismob(user) ? key_name(user) : user].",
|
||||
"color" = COLOR_WEBHOOK_GOOD
|
||||
)
|
||||
)
|
||||
initiator?.mob?.clear_alert("open ticket")
|
||||
|
||||
//Close and return ahelp verb, use if ticket is incoherent
|
||||
@@ -573,14 +538,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
log_admin(msg)
|
||||
AddInteraction("Rejected by [admin_rejecter_name].")
|
||||
Close(user, silent = TRUE)
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) rejected.",
|
||||
"body" = "Rejected by [ismob(user) ? key_name(user) : user].",
|
||||
"color" = COLOR_WEBHOOK_BAD
|
||||
)
|
||||
)
|
||||
|
||||
//Resolve ticket with IC Issue message
|
||||
/datum/ticket/proc/ICIssue(user)
|
||||
@@ -601,14 +558,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
log_admin(msg)
|
||||
AddInteraction("Marked as IC issue by [admin_resolve_name]")
|
||||
Resolve(user, silent = TRUE)
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) marked as IC issue.",
|
||||
"body" = "Marked as IC Issue by [ismob(user) ? key_name(user) : user].",
|
||||
"color" = COLOR_WEBHOOK_BAD
|
||||
)
|
||||
)
|
||||
|
||||
//Handle ticket
|
||||
/datum/ticket/proc/HandleIssue(user)
|
||||
@@ -640,13 +589,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket_list)
|
||||
if(ismob(user))
|
||||
var/mob/our_handler_mob = user
|
||||
handler_ref = WEAKREF(our_handler_mob.client)
|
||||
SSwebhooks.send(
|
||||
WEBHOOK_AHELP_SENT,
|
||||
list(
|
||||
"name" = "Ticket ([id]) (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) being handled.",
|
||||
"body" = "[ismob(user) ? key_name(user) : user] is now handling the ticket."
|
||||
)
|
||||
)
|
||||
|
||||
/datum/ticket/proc/Retitle()
|
||||
var/new_title = tgui_input_text(usr, "Enter a title for the ticket", "Rename Ticket", name)
|
||||
@@ -764,6 +706,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket)
|
||||
// HELPER PROCS
|
||||
//
|
||||
|
||||
/proc/count_admins(requiredflags = R_BAN)
|
||||
var/list/adm = get_admin_counts(requiredflags)
|
||||
var/list/activemins = adm["present"]
|
||||
. = activemins.len
|
||||
|
||||
/proc/get_admin_counts(requiredflags = R_BAN)
|
||||
. = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list())
|
||||
for(var/client/X in GLOB.admins)
|
||||
@@ -777,37 +724,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ticket)
|
||||
else
|
||||
.["present"] += X
|
||||
|
||||
/proc/send2irc_adminless_only(source, msg, requiredflags = R_BAN)
|
||||
var/list/adm = get_admin_counts()
|
||||
var/list/activemins = adm["present"]
|
||||
. = activemins.len
|
||||
/*
|
||||
if(. <= 0)
|
||||
var/final = ""
|
||||
var/list/afkmins = adm["afk"]
|
||||
var/list/stealthmins = adm["stealth"]
|
||||
var/list/powerlessmins = adm["noflags"]
|
||||
var/list/allmins = adm["total"]
|
||||
if(!afkmins.len && !stealthmins.len && !powerlessmins.len)
|
||||
final = "[msg] - No admins online"
|
||||
else
|
||||
final = "[msg] - All admins stealthed\[[english_list(stealthmins)]\], AFK\[[english_list(afkmins)]\], or lacks +BAN\[[english_list(powerlessmins)]\]! Total: [allmins.len] "
|
||||
send2irc(source,final)*/
|
||||
|
||||
/proc/ircadminwho()
|
||||
var/list/message = list("Admins: ")
|
||||
var/list/admin_keys = list()
|
||||
for(var/client/C as anything in GLOB.admins)
|
||||
admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]"
|
||||
|
||||
for(var/admin in admin_keys)
|
||||
if(LAZYLEN(admin_keys) > 1)
|
||||
message += ", [admin]"
|
||||
else
|
||||
message += "[admin]"
|
||||
|
||||
return jointext(message, "")
|
||||
|
||||
/proc/keywords_lookup(msg,irc)
|
||||
|
||||
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/decl/webhook
|
||||
var/id
|
||||
var/list/urls
|
||||
var/list/mentions
|
||||
|
||||
/decl/webhook/proc/get_message(var/list/data)
|
||||
. = list()
|
||||
|
||||
/decl/webhook/proc/http_post(var/target_url, var/payload)
|
||||
if (!target_url)
|
||||
return -1
|
||||
|
||||
var/result = LIBCALL(HTTP_POST_DLL_LOCATION, "send_post_request")(target_url, payload, json_encode(list("Content-Type" = "application/json")))
|
||||
|
||||
result = cached_json_decode(result)
|
||||
if (result["error_code"])
|
||||
log_runtime("byhttp error: [result["error"]] ([result["error_code"]])")
|
||||
return result["error_code"]
|
||||
|
||||
return list(
|
||||
"status_code" = result["status_code"],
|
||||
"body" = result["body"]
|
||||
)
|
||||
|
||||
/decl/webhook/proc/send(var/list/data)
|
||||
var/list/message = get_message(data)
|
||||
if(!length(message))
|
||||
return FALSE
|
||||
|
||||
if(CONFIG_GET(flag/disable_webhook_embeds))
|
||||
var/list/embed_content
|
||||
for(var/list/embed in message["embeds"])
|
||||
if(embed["title"])
|
||||
LAZYADD(embed_content, "**[embed["title"]]**")
|
||||
if(embed["description"])
|
||||
LAZYADD(embed_content, embed["description"])
|
||||
if(length(embed_content))
|
||||
if(message["content"])
|
||||
message["content"] = "[message["content"]]\n[jointext(embed_content, "\n")]"
|
||||
else
|
||||
message["content"] = jointext(embed_content, "\n")
|
||||
message -= "embeds"
|
||||
|
||||
. = TRUE
|
||||
for(var/target_url in urls)
|
||||
|
||||
var/url_message = message.Copy()
|
||||
var/list/url_mentions = get_mentions(target_url)
|
||||
if(islist(url_mentions) && length(url_mentions))
|
||||
if(url_message["content"])
|
||||
url_message["content"] = "[jointext(url_mentions, ", ")]: [url_message["content"]]"
|
||||
else
|
||||
url_message["content"] = "[jointext(url_mentions, ", ")]"
|
||||
|
||||
var/list/httpresponse = http_post(target_url, json_encode(url_message))
|
||||
if(!islist(httpresponse))
|
||||
. = FALSE
|
||||
continue
|
||||
switch(httpresponse["status_code"])
|
||||
if (200 to 299)
|
||||
continue
|
||||
if (400 to 599)
|
||||
log_runtime("Webhooks: HTTP error code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].")
|
||||
else
|
||||
log_runtime("Webhooks: unknown HTTP code while sending to '[target_url]': [httpresponse["status_code"]]. Data: [httpresponse["body"]].")
|
||||
. = FALSE
|
||||
|
||||
/decl/webhook/proc/get_mentions(var/mentioning_url)
|
||||
. = mentions?.Copy()
|
||||
var/url_mentions = LAZYACCESS(urls, mentioning_url)
|
||||
if(length(url_mentions))
|
||||
LAZYDISTINCTADD(., url_mentions)
|
||||
@@ -1,13 +0,0 @@
|
||||
/decl/webhook/ahelp_sent
|
||||
id = WEBHOOK_AHELP_SENT
|
||||
|
||||
/decl/webhook/ahelp_sent/get_message(var/list/data)
|
||||
.= ..()
|
||||
.["embeds"] = list(list(
|
||||
"title" = "[data["name"]]",
|
||||
"description" = data["body"],
|
||||
"color" = data["color"] || COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
|
||||
/decl/webhook/ahelp_sent/get_mentions()
|
||||
. = !length(GLOB.admins) && ..() // VOREStation Edit - GLOB admins
|
||||
@@ -1,11 +0,0 @@
|
||||
/decl/webhook/custom_event
|
||||
id = WEBHOOK_CUSTOM_EVENT
|
||||
|
||||
// Data expects a "text" field containing the new custom event text.
|
||||
/decl/webhook/custom_event/get_message(var/list/data)
|
||||
. = ..()
|
||||
.["embeds"] = list(list(
|
||||
"title" = "A custom event is beginning.",
|
||||
"description" = (data && data["text"]) || "undefined",
|
||||
"color" = COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
@@ -1,10 +0,0 @@
|
||||
/decl/webhook/fax_sent
|
||||
id = WEBHOOK_FAX_SENT
|
||||
|
||||
/decl/webhook/fax_sent/get_message(var/list/data)
|
||||
.= ..()
|
||||
.["embeds"] = list(list(
|
||||
"title" = "[data["name"]]",
|
||||
"description" = data["body"],
|
||||
"color" = COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
@@ -1,26 +0,0 @@
|
||||
/decl/webhook/roundend
|
||||
id = WEBHOOK_ROUNDEND
|
||||
|
||||
// Data expects three numerical fields: "survivors", "escaped", "ghosts", "clients"
|
||||
/decl/webhook/roundend/get_message(var/list/data)
|
||||
. = ..()
|
||||
var/desc = "A round of **[SSticker.mode ? SSticker.mode.name : "Unknown"]** (Round ID: [GLOB.round_id ? GLOB.round_id : "No database"]) has ended.\n\n"
|
||||
if(data)
|
||||
var/s_escaped = "Escaped"
|
||||
if(!emergency_shuttle.evac)
|
||||
s_escaped = "Transferred"
|
||||
if(data["survivors"] > 0)
|
||||
desc += "Survivors: **[data["survivors"]]**\n"
|
||||
desc += "[s_escaped]: **[data["escaped"]]**\n"
|
||||
else
|
||||
desc += "There were **no survivors**.\n\n"
|
||||
desc += "Ghosts: **[data["ghosts"]]**\n"
|
||||
desc += "Players: **[data["clients"]]**\n"
|
||||
desc += "Round duration: **[roundduration2text()]**"
|
||||
|
||||
.["embeds"] = list(list(
|
||||
// "title" = global.end_credits_title,
|
||||
"title" = "Round Has Ended",
|
||||
"description" = desc,
|
||||
"color" = COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
@@ -1,17 +0,0 @@
|
||||
/decl/webhook/roundprep
|
||||
id = WEBHOOK_ROUNDPREP
|
||||
|
||||
// Data expects "url" and field pointing to the current hosted server and port to connect on.
|
||||
/decl/webhook/roundprep/get_message(var/list/data)
|
||||
. = ..()
|
||||
var/desc = "The server has been started!\n"
|
||||
if(data && data["map"])
|
||||
desc += "Map: **[data["map"]]**\n"
|
||||
if(data && data["url"])
|
||||
desc += "Address: <[data["url"]]>"
|
||||
|
||||
.["embeds"] = list(list(
|
||||
"title" = "New round is being set up.",
|
||||
"description" = desc,
|
||||
"color" = COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
@@ -1,16 +0,0 @@
|
||||
/decl/webhook/roundstart
|
||||
id = WEBHOOK_ROUNDSTART
|
||||
|
||||
// Data expects a "url" field pointing to the current hosted server and port to connect on.
|
||||
/decl/webhook/roundstart/get_message(var/list/data)
|
||||
. = ..()
|
||||
var/desc = "Gamemode: **[GLOB.master_mode]**\n"
|
||||
desc += "Players: **[GLOB.player_list.len]**"
|
||||
if(data && data["url"])
|
||||
desc += "\nAddress: <[data["url"]]>"
|
||||
|
||||
.["embeds"] = list(list(
|
||||
"title" = "Round has started.",
|
||||
"description" = desc,
|
||||
"color" = COLOR_WEBHOOK_DEFAULT
|
||||
))
|
||||
Reference in New Issue
Block a user