Files
wwdpublic/Content.Server/Administration/Managers/IAdminManager.cs
SimpleStation14 e6779b650a Mirror: Add Stealthmins (#360)
## Mirror of PR #26263: [Add
stealthmins](https://github.com/space-wizards/space-station-14/pull/26263)
from <img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)

###### `dca0c6694bce56fcf962feab2b59ad4a849f4533`

PR opened by <img
src="https://avatars.githubusercontent.com/u/32041239?v=4"
width="16"/><a href="https://github.com/nikthechampiongr">
nikthechampiongr</a> at 2024-03-19 16:14:22 UTC

---

PR changed 11 files with 197 additions and 10 deletions.

The PR had the following labels:
- Status: Needs Review


---

<details open="true"><summary><h1>Original Body</h1></summary>

> <!-- Please read these guidelines before opening your PR:
https://docs.spacestation14.io/en/getting-started/pr-guideline -->
> <!-- The text between the arrows are comments - they will not be
visible on your PR. -->
> 
> resolve #26013 
> 
> ## About the PR
> <!-- What did you change in this PR? -->
> This pr implements stealthmins as laid out in issue #26013. 
> 
> There is now the Stealth permission flag. This allows admins to use
the stealthmin command and to see other stealthmins.
> 
> When stealthmin is toggled, the admin will not show up in adminwho
except for other admins with the Stealth permission.
> 
> The stealthmin command sends fake de-admin/re-admin messages to admins
without the Stealth flag.
> 
> stealthmin persists in the same way deadmin does(it persists for the
lifetime of the server).
> 
> Admin login/logout messages are suppressed for stealthmins except for
other admins with the Stealth flag.
> 
> It is still possible possible to find stealthed admins using toolshed
commands or logs. This is in line with the requirements of the issue,
and I don't want to start clobbering functionality of logs and toolshed.
> 
> ## Why / Balance
> 
> See #26013 
> 
> ## Technical details
> <!-- If this is a code change, summarize at high level how your new
code works. This makes it easier to review. -->
> 
> Stealth flag now exist for AdminFlags. 
> 
> An admin's stealth status is saved in their admin registration and in
ContentData.
> 
> SendAdminAnnouncement now takes a whitelist flag and blacklist flag
(This will work with multiple flags). This is necessary to suppress
admin announcements where necessary. Blacklist takes priority over
whitelist.
> 
> ## Media
> <!-- 
> PRs which make ingame changes (adding clothing, items, new features,
etc) are required to have media attached that showcase the changes.
> Small fixes/refactors are exempt.
> Any media may be used in SS14 progress reports, with clear credit
given.
> 
> If you're unsure whether your PR will require media, ask a maintainer.
> 
> Check the box below to confirm that you have in fact seen this (put an
X in the brackets, like [X]):
> -->
> 
>
https://github.com/space-wizards/space-station-14/assets/32041239/98ec48c3-170e-406a-b177-07003ff7d59f
> 
> 
> - [x] I have added screenshots/videos to this PR showcasing its
changes ingame, **or** this PR does not require an ingame showcase
> 
> **Changelog**
> <!--
> Make players aware of new features and changes that could affect how
they play the game by adding a Changelog entry. Please read the
Changelog guidelines located at:
https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog
> -->
> 
> <!--
> Make sure to take this Changelog template out of the comment block in
order for it to show up.
> 🆑
> - add: Added fun!
> - remove: Removed fun!
> - tweak: Changed fun!
> - fix: Fixed fun!
> -->
> 
> 🆑
> ADMIN:
> - add: The stealthmin command has been added. Admins with the Stealth
permission can now hide themselves from adminwho except for other admins
with that permission.


</details>

---------

Signed-off-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
Co-authored-by: SimpleStation14 <Unknown>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
2024-07-11 18:09:39 -07:00

74 lines
2.4 KiB
C#

using Content.Shared.Administration;
using Content.Shared.Administration.Managers;
using Robust.Shared.Player;
using Robust.Shared.Toolshed;
namespace Content.Server.Administration.Managers
{
/// <summary>
/// Manages server administrators and their permission flags.
/// </summary>
public interface IAdminManager : ISharedAdminManager
{
/// <summary>
/// Fired when the permissions of an admin on the server changed.
/// </summary>
event Action<AdminPermsChangedEventArgs> OnPermsChanged;
/// <summary>
/// Gets all active admins currently on the server.
/// </summary>
/// <remarks>
/// This does not include admins that are de-adminned.
/// </remarks>
IEnumerable<ICommonSession> ActiveAdmins { get; }
/// <summary>
/// Gets all admins currently on the server, even de-adminned ones.
/// </summary>
IEnumerable<ICommonSession> AllAdmins { get; }
/// <summary>
/// De-admins an admin temporarily so they are effectively a normal player.
/// </summary>
/// <remarks>
/// De-adminned admins are able to re-admin at any time if they so desire.
/// </remarks>
void DeAdmin(ICommonSession session);
/// <summary>
/// Re-admins a de-adminned admin.
/// </summary>
void ReAdmin(ICommonSession session);
/// <summary>
/// Make admin hidden from adminwho.
/// </summary>
void Stealth(ICommonSession session);
/// <summary>
/// Unhide admin from adminwho.
/// </summary>
void UnStealth(ICommonSession session);
/// <summary>
/// Re-loads the permissions of an player in case their admin data changed DB-side.
/// </summary>
/// <seealso cref="ReloadAdminsWithRank"/>
void ReloadAdmin(ICommonSession player);
/// <summary>
/// Reloads admin permissions for all admins with a certain rank.
/// </summary>
/// <param name="rankId">The database ID of the rank.</param>
/// <seealso cref="ReloadAdmin"/>
void ReloadAdminsWithRank(int rankId);
void Initialize();
void PromoteHost(ICommonSession player);
bool TryGetCommandFlags(CommandSpec command, out AdminFlags[]? flags);
}
}