Skip to content

Commit fed38ec

Browse files
authored
update tgs commands (#7511)
1 parent 7d004f3 commit fed38ec

File tree

5 files changed

+106
-93
lines changed

5 files changed

+106
-93
lines changed

code/__HELPERS/chat.dm

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,42 +36,46 @@
3636
*/
3737

3838
/**
39-
* Sends a message to TGS chat channels.
39+
* Asynchronously sends a message to TGS chat channels.
4040
*
41-
* message - The message to send.
41+
* message - The [/datum/tgs_message_content] to send.
4242
* channel_tag - Required. If "", the message with be sent to all connected (Game-type for TGS3) channels. Otherwise, it will be sent to TGS4 channels with that tag (Delimited by ','s).
43+
* admin_only - Determines if this communication can only be sent to admin only channels.
4344
*/
44-
/proc/send2chat(message, channel_tag)
45+
/proc/send2chat(datum/tgs_message_content/message, channel_tag, admin_only = FALSE)
46+
set waitfor = FALSE
4547
if(channel_tag == null || !world.TgsAvailable())
4648
return
4749

4850
var/datum/tgs_version/version = world.TgsVersion()
4951
if(channel_tag == "" || version.suite == 3)
50-
world.TgsTargetedChatBroadcast(message, FALSE)
52+
world.TgsTargetedChatBroadcast(message, admin_only)
5153
return
5254

5355
var/list/channels_to_use = list()
5456
for(var/I in world.TgsChatChannelInfo())
5557
var/datum/tgs_chat_channel/channel = I
5658
var/list/applicable_tags = splittext(channel.custom_tag, ",")
57-
if(channel_tag in applicable_tags)
59+
if((!admin_only || channel.is_admin_channel) && (channel_tag in applicable_tags))
5860
channels_to_use += channel
5961

6062
if(channels_to_use.len)
6163
world.TgsChatBroadcast(message, channels_to_use)
6264

6365
/**
64-
* Sends a message to TGS admin chat channels.
66+
* Asynchronously sends a message to TGS admin chat channels.
6567
*
6668
* category - The category of the mssage.
6769
* message - The message to send.
6870
*/
6971
/proc/send2adminchat(category, message, embed_links = FALSE)
72+
set waitfor = FALSE
73+
7074
category = replacetext(replacetext(category, "\proper", ""), "\improper", "")
7175
message = replacetext(replacetext(message, "\proper", ""), "\improper", "")
7276
if(!embed_links)
7377
message = GLOB.has_discord_embeddable_links.Replace(replacetext(message, "`", ""), " ```$1``` ")
74-
world.TgsTargetedChatBroadcast("[category] | [message]", TRUE)
78+
world.TgsTargetedChatBroadcast(new /datum/tgs_message_content("[category] | [message]"), TRUE)
7579

7680
/// Handles text formatting for item use hints in examine text
7781
#define EXAMINE_HINT(text) ("<b>" + text + "</b>")

code/__HELPERS/game.dm

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -568,8 +568,8 @@
568568
return hear
569569

570570
///Get active players who are playing in the round
571-
/proc/get_active_player_count(alive_check = FALSE, afk_check = FALSE, human_check = FALSE)
572-
var/active_players = 0
571+
/proc/get_active_player_list(alive_check = FALSE, afk_check = FALSE, human_check = FALSE)
572+
var/list/active_players = list()
573573
for(var/mob/player_mob as anything in GLOB.player_list)
574574
if(!player_mob?.client)
575575
continue
@@ -582,8 +582,12 @@
582582
if(isnewplayer(player_mob)) // exclude people in the lobby
583583
continue
584584
if(isobserver(player_mob)) // Ghosts are fine if they were playing once (didn't start as observers)
585-
// var/mob/observer/dead/ghost_player = player_mob
586-
// if(ghost_player.started_as_observer) // Exclude people who started as observers
587-
continue
588-
active_players++
585+
var/mob/observer/dead/ghost_player = player_mob
586+
if(ghost_player.started_as_observer) // Exclude people who started as observers
587+
continue
588+
active_players += player_mob
589589
return active_players
590+
591+
///Counts active players who are playing in the round
592+
/proc/get_active_player_count(alive_check = FALSE, afk_check = FALSE, human_check = FALSE)
593+
return length(get_active_player_list(alive_check, afk_check, human_check))

code/controllers/subsystem/ticker.dm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,11 @@ SUBSYSTEM_DEF(ticker)
111111
if(blackbox)
112112
blackbox.save_all_data_to_sql()
113113

114-
send2irc("Server", "A round of [mode.name] just ended.")
115114
if(CONFIG_GET(string/chat_roundend_notice_tag))
116115
var/broadcastmessage = "The round has ended."
117116
if(CONFIG_GET(string/chat_reboot_role))
118117
broadcastmessage += "\n\n<@&[CONFIG_GET(string/chat_reboot_role)]>, the server will reboot shortly!"
119-
send2chat(broadcastmessage, CONFIG_GET(string/chat_roundend_notice_tag))
118+
send2chat(new /datum/tgs_message_content(broadcastmessage), CONFIG_GET(string/chat_roundend_notice_tag))
120119

121120
SSdbcore.SetRoundEnd()
122121
SSpersistence.SavePersistence()
@@ -125,7 +124,7 @@ SUBSYSTEM_DEF(ticker)
125124

126125

127126
/datum/controller/subsystem/ticker/proc/on_mc_init_finish()
128-
send2irc("Server lobby is loaded and open at byond://[config_legacy.serverurl ? config_legacy.serverurl : (config_legacy.server ? config_legacy.server : "[world.address]:[world.port]")]")
127+
send2chat(new /datum/tgs_message_content("Server lobby is loaded and open at byond://[config_legacy.serverurl ? config_legacy.serverurl : (config_legacy.server ? config_legacy.server : "[world.address]:[world.port]")]"))
129128
to_chat(world, "<span class='boldnotice'>Welcome to the pregame lobby!</span>")
130129
to_chat(world, "Please set up your character and select ready. The round will start in [CONFIG_GET(number/lobby_countdown)] seconds.")
131130
SEND_SOUND(world, sound('sound/misc/server-ready.ogg', volume = 100))
@@ -552,6 +551,7 @@ SUBSYSTEM_DEF(ticker)
552551

553552
to_chat(world, "<span class='infoplain'><BR><BR><BR><span class='big bold'>The round has ended.</span></span>")
554553
log_game("The round has ended.")
554+
send2adminchat("Server", "Round just ended.")
555555

556556
for(var/datum/callback/roundend_callbacks as anything in round_end_events)
557557
roundend_callbacks.InvokeAsync()

code/modules/admin/chat_commands.dm

Lines changed: 80 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,17 @@
1-
#define IRC_STATUS_THROTTLE 5
2-
3-
/datum/tgs_chat_command/ircstatus
4-
name = "status"
5-
help_text = "Gets the admincount, playercount, gamemode, and true game mode of the server"
1+
/datum/tgs_chat_command/reload_admins
2+
name = "reload_admins"
3+
help_text = "Forces the server to reload admins."
64
admin_only = TRUE
7-
var/last_irc_status = 0
85

9-
/datum/tgs_chat_command/ircstatus/Run(datum/tgs_chat_user/sender, params)
10-
var/rtod = REALTIMEOFDAY
11-
if(rtod - last_irc_status < IRC_STATUS_THROTTLE)
12-
return
13-
last_irc_status = rtod
14-
var/list/adm = get_admin_counts()
15-
var/list/allmins = adm["total"]
16-
var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). "
17-
status += "Players: [GLOB.clients.len]" //(Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode ? SSticker.mode.name : "Not started"]."
18-
return status
6+
/datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params)
7+
ReloadAsync()
8+
log_admin("[sender.friendly_name] reloaded admins via chat command.")
9+
message_admins("[sender.friendly_name] reloaded admins via chat command.")
10+
return "Admins reloaded."
1911

20-
/datum/tgs_chat_command/irccheck
21-
name = "check"
22-
help_text = "Gets the playercount, gamemode, and address of the server"
23-
var/last_irc_check = 0
24-
25-
/datum/tgs_chat_command/irccheck/Run(datum/tgs_chat_user/sender, params)
26-
var/rtod = REALTIMEOFDAY
27-
if(rtod - last_irc_check < IRC_STATUS_THROTTLE)
28-
return
29-
last_irc_check = rtod
30-
var/server = null //CONFIG_GET(string/server)
31-
//return "[round_id ? "Round #[round_id]: " : ""][clients.len] players on [SSmapping.config_legacy.map_name], Mode: [master_mode]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]"
32-
var/current_state
33-
switch(SSticker.current_state)
34-
if(GAME_STATE_PREGAME)
35-
current_state = "pregame"
36-
if(GAME_STATE_SETTING_UP)
37-
current_state = "starting"
38-
if(GAME_STATE_PLAYING)
39-
current_state = "active"
40-
if(GAME_STATE_FINISHED)
41-
current_state = "finishing"
42-
return "[GLOB.clients.len] players on [(LEGACY_MAP_DATUM).name], Mode: [master_mode]; round [current_state] -- Duration [roundduration2text()] -- [server ? server : "[world.internet_address]:[world.port]"]"
12+
/datum/tgs_chat_command/reload_admins/proc/ReloadAsync()
13+
set waitfor = FALSE
14+
load_admins()
4315

4416
/datum/tgs_chat_command/ahelp
4517
name = "ahelp"
@@ -49,7 +21,7 @@
4921
/datum/tgs_chat_command/ahelp/Run(datum/tgs_chat_user/sender, params)
5022
var/list/all_params = splittext(params, " ")
5123
if(all_params.len < 2)
52-
return "Insufficient parameters"
24+
return new /datum/tgs_message_content("Insufficient parameters")
5325
var/target = all_params[1]
5426
all_params.Cut(1, 2)
5527
var/id = text2num(target)
@@ -58,10 +30,8 @@
5830
if(AH)
5931
target = AH.initiator_ckey
6032
else
61-
return "Ticket #[id] not found!"
62-
var/res = IrcPm(target, all_params.Join(" "), sender.friendly_name)
63-
if(res != "Message Successful")
64-
return res
33+
return new /datum/tgs_message_content("Ticket #[id] not found!")
34+
return new /datum/tgs_message_content(IrcPm(target, all_params.Join(" "), sender.friendly_name))
6535

6636
/datum/tgs_chat_command/namecheck
6737
name = "namecheck"
@@ -71,33 +41,18 @@
7141
/datum/tgs_chat_command/namecheck/Run(datum/tgs_chat_user/sender, params)
7242
params = trim(params)
7343
if(!params)
74-
return "Insufficient parameters"
44+
return new /datum/tgs_message_content("Insufficient parameters")
7545
log_admin("Chat Name Check: [sender.friendly_name] on [params]")
7646
message_admins("Name checking [params] from [sender.friendly_name]")
77-
return keywords_lookup(params, 1)
47+
return new /datum/tgs_message_content(keywords_lookup(params, 1))
7848

7949
/datum/tgs_chat_command/adminwho
8050
name = "adminwho"
8151
help_text = "Lists administrators currently on the server"
8252
admin_only = TRUE
8353

8454
/datum/tgs_chat_command/adminwho/Run(datum/tgs_chat_user/sender, params)
85-
return ircadminwho()
86-
87-
GLOBAL_LIST(round_end_notifiees)
88-
89-
/datum/tgs_chat_command/endnotify
90-
name = "notify"
91-
help_text = "Pings the invoker when the round ends"
92-
admin_only = FALSE
93-
94-
/datum/tgs_chat_command/endnotify/Run(datum/tgs_chat_user/sender, params)
95-
//if(!SSticker.IsRoundInProgress() && SSticker.HasRoundStarted())
96-
if(SSticker.current_state == GAME_STATE_FINISHED)
97-
return "[sender.mention], the round has already ended!"
98-
LAZYINITLIST(GLOB.round_end_notifiees)
99-
GLOB.round_end_notifiees[sender.mention] = TRUE
100-
return "I will notify [sender.mention] when the round ends."
55+
return new /datum/tgs_message_content(tgsadminwho())
10156

10257
/datum/tgs_chat_command/sdql
10358
name = "sdql"
@@ -106,29 +61,79 @@ GLOBAL_LIST(round_end_notifiees)
10661

10762
/datum/tgs_chat_command/sdql/Run(datum/tgs_chat_user/sender, params)
10863
if(GLOB.AdminProcCaller)
109-
return "Unable to run query, another admin proc call is in progress. Try again later."
64+
return new /datum/tgs_message_content("Unable to run query, another admin proc call is in progress. Try again later.")
11065
GLOB.AdminProcCaller = "CHAT_[sender.friendly_name]" //_ won't show up in ckeys so it'll never match with a real admin
11166
var/list/results = world.SDQL2_query(params, GLOB.AdminProcCaller, GLOB.AdminProcCaller)
11267
GLOB.AdminProcCaller = null
11368
if(!results)
114-
return "Query produced no output"
69+
return new /datum/tgs_message_content("Query produced no output")
11570
var/list/text_res = results.Copy(1, 3)
11671
var/list/refs = results.len > 3 ? results.Copy(4) : null
117-
. = "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]"
72+
return new /datum/tgs_message_content("[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]")
11873

119-
/datum/tgs_chat_command/reload_admins
120-
name = "reload_admins"
121-
help_text = "Forces the server to reload admins."
74+
/datum/tgs_chat_command/tgsstatus
75+
name = "status"
76+
help_text = "Gets the admincount, playercount, gamemode, and true game mode of the server"
12277
admin_only = TRUE
12378

124-
/datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params)
125-
ReloadAsync()
126-
log_admin("[sender.friendly_name] reloaded admins via chat command.")
127-
return "Admins reloaded."
79+
/datum/tgs_chat_command/tgsstatus/Run(datum/tgs_chat_user/sender, params)
80+
var/list/adm = get_admin_counts()
81+
var/list/allmins = adm["total"]
82+
var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). "
83+
status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(FALSE, TRUE, FALSE)]). Round has [SSticker.HasRoundStarted() ? "" : "not "]started."
84+
return new /datum/tgs_message_content(status)
12885

129-
/datum/tgs_chat_command/reload_admins/proc/ReloadAsync()
130-
set waitfor = FALSE
131-
load_admins()
86+
// code/modules/discord/tgs_commands.dm
87+
/datum/tgs_chat_command/tgscheck
88+
name = "check"
89+
help_text = "Gets the playercount, gamemode, and address of the server"
90+
91+
/datum/tgs_chat_command/tgscheck/Run(datum/tgs_chat_user/sender, params)
92+
var/server = config_legacy.serverurl || config_legacy.server
93+
return new /datum/tgs_message_content("[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [(LEGACY_MAP_DATUM).name]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]")
94+
95+
/datum/tgs_chat_command/gameversion
96+
name = "gameversion"
97+
help_text = "Gets the version details from the show-server-revision verb, basically"
98+
99+
/datum/tgs_chat_command/gameversion/Run(datum/tgs_chat_user/sender, params)
100+
var/list/msg = list("")
101+
msg += "BYOND Server Version: [world.byond_version].[world.byond_build] (Compiled with: [DM_VERSION].[DM_BUILD])\n"
102+
103+
if (!GLOB.revdata)
104+
msg += "No revision information found."
105+
else
106+
msg += "Revision [copytext_char(GLOB.revdata.commit, 1, 9)]"
107+
if (GLOB.revdata.date)
108+
msg += " compiled on '[GLOB.revdata.date]'"
109+
110+
if(GLOB.revdata.originmastercommit)
111+
msg += ", from origin commit: <[CONFIG_GET(string/githuburl)]/commit/[GLOB.revdata.originmastercommit]>"
112+
113+
if(GLOB.revdata.testmerge.len)
114+
msg += "\n"
115+
for(var/datum/tgs_revision_information/test_merge/PR as anything in GLOB.revdata.testmerge)
116+
msg += "PR #[PR.number] at [copytext_char(PR.head_commit, 1, 9)] [PR.title].\n"
117+
if (PR.url)
118+
msg += "<[PR.url]>\n"
119+
return new /datum/tgs_message_content(msg.Join(""))
120+
121+
GLOBAL_LIST(round_end_notifiees)
122+
/datum/tgs_chat_command/endnotify
123+
name = "notify"
124+
help_text = "Pings the invoker when the round ends"
125+
admin_only = FALSE
126+
127+
/datum/tgs_chat_command/endnotify/Run(datum/tgs_chat_user/sender, params)
128+
//if(!SSticker.IsRoundInProgress() && SSticker.HasRoundStarted())
129+
if(SSticker.current_state == GAME_STATE_FINISHED)
130+
return new /datum/tgs_message_content("[sender.mention], the round has already ended!")
131+
LAZYINITLIST(GLOB.round_end_notifiees)
132+
if (GLOB.round_end_notifiees[sender.mention])
133+
GLOB.round_end_notifiees[sender.mention] = FALSE
134+
return new /datum/tgs_message_content("You will no longer be notified when the server restarts")
135+
GLOB.round_end_notifiees[sender.mention] = TRUE
136+
return new /datum/tgs_message_content("You will now be notified when the server restarts")
132137

133138
/datum/tgs_chat_command/whitelist
134139
name = "whitelist"

code/modules/admin/verbs/adminhelp.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,15 +613,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/ahelp)
613613
msg2 = replacetext(replacetext(msg2, "\proper", ""), "\improper", "")
614614
world.TgsTargetedChatBroadcast("[msg] | [msg2]", TRUE)
615615

616-
/proc/ircadminwho()
616+
/proc/tgsadminwho()
617617
var/list/message = list("Admins: ")
618618
var/list/admin_keys = list()
619619
for(var/adm in GLOB.admins)
620620
var/client/C = adm
621621
admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]"
622622

623623
for(var/admin in admin_keys)
624-
if(LAZYLEN(admin_keys) > 1)
624+
if(LAZYLEN(message) > 1)
625625
message += ", [admin]"
626626
else
627627
message += "[admin]"

0 commit comments

Comments
 (0)