diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 88b631f5c18..9ac4a0eb4d6 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -139,6 +139,7 @@ var/list/irc_bot_host = list() var/main_irc = "" var/admin_irc = "" + var/admin_notify_irc = "" var/python_path = "" //Path to the python executable. Defaults to "python" on windows and "/usr/bin/env python2" on unix var/default_laws = 0 //Controls what laws the AI spawns with. @@ -468,6 +469,9 @@ if("admin_irc") config.admin_irc = value + if("admin_notify_irc") + config.admin_notify_irc = value + if("python_path") if(value) config.python_path = value diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 687fc00797d..eb32af7802d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1001,3 +1001,22 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space qdel(frommob) return 1 + +// Returns a list of the number of admins in various categories +// result[1] is the number of staff that match the rank mask and are active +// result[2] is the number of staff that do not match the rank mask +// result[3] is the number of staff that match the rank mask and are inactive +/proc/staff_countup(rank_mask = R_BAN) + var/list/result = list(0, 0, 0) + for(var/client/X in admins) + if(rank_mask && !check_rights_for(X, rank_mask)) + result[2]++ + continue + if(X.holder.fakekey) + result[2]++ + continue + if(X.is_afk()) + result[3]++ + continue + result[1]++ + return result diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index d83a5efe339..b9fed474cdf 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -3,15 +3,19 @@ unset_machine() player_list -= src log_access("Logout: [key_name(src)]") - if(admin_datums[src.ckey]) - if(ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. - var/admins_number = admins.len - + // `holder` is nil'd out by now, so we check the `admin_datums` array directly + //Only report this stuff if we are currently playing. + if(admin_datums[ckey] && ticker && ticker.current_state == GAME_STATE_PLAYING) + var/datum/admins/temp_admin = admin_datums[ckey] + // Triggers on people with banhammer power only - no mentors tripping the alarm + if(temp_admin.rights & R_BAN) message_admins("Admin logout: [key_name_admin(src)]") - if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. - send2adminirc("[key_name(src)] logged out - no more admins online.") + var/list/admincounter = staff_countup(R_BAN) + if(admincounter[1] == 0) // No active admins + send2irc(config.admin_notify_irc, "[key_name(src)] logged out - No active admins, [admincounter[2]] non-admin staff, [admincounter[3]] inactive staff.") + ..() - - callHook("mob_logout", list("client" = client, "mob" = src)) - - return 1 \ No newline at end of file + + callHook("mob_logout", list("client" = client, "mob" = src)) + + return 1 diff --git a/config/example/config.txt b/config/example/config.txt index f2087eebaa2..31bde9c5e4f 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -248,6 +248,9 @@ GHOST_INTERACTION ## IRC channel to send adminhelps to. Leave blank to disable adminhelps-to-irc. #ADMIN_IRC #admin +## IRC channel to send direct messages to admins to. Leave blank to disable. +#ADMIN_NOTIFY_IRC #paradiseStaff + ## Path to the python2 executable on the system. Leave blank for default. ## Default is "python" on Windows, "/usr/bin/env python2" on UNIX. #PYTHON_PATH pythonw