CatStation/Content.Server/Chat/Managers/IChatManager.cs
cashew 4bde1c1120
Port Chat Follow functionality from AfterLight (#45375)
* ports chat follow function from AL and removes PJB implementation
forgor to commit earlier so it's just one chunk

* fixes accidental MiscTab.xaml restructuring

* fix name color

* remove unused function

* cvar summary

* typo

* accidental doc removal

* fix test fail

* fix test fail

* like i said first pr :|

* inject in constructor

* adds chat links to Local, Whisper, LOOC and Dead Chat respects Admin ghost privacy

* i hate chat code

* remove cvar

* single events file

* adds CanGhostWarp back

* filter for admin ghosts

* move tag

* remove ChatLinkTag.cs

* fix speechbubble rendering

* i want to bash my brain in

* kill chatcode

* formatting

* testfail

* still not working

* atleast deadchat works now

* even prettier TextLinkTag.cs

* fix speechbubble rendering for looc

* docs

* renaming and better docs

* Revert "remove cvar"

This reverts commit 1acb168f

* final changes (hopefully)

* requested changes

* can't parse -

* change TextLinkTag again

* formatting and typo

Co-authored-by: Connor Huffine <chuffine@gmail.com>

* quickfix

* no logging for now actually

* i will work on this in the morning

* restructuring

* wip

* final restructuring and docs

* still not done btw

* review

* docfix

* actually we can filter for admin ghosts

* doc

* fix color

* fix fix color

* review

* all I care to clean up

* bold names

* doc

* admin warp

* fixed

* fsaasffsa

* GOD ONCE SAID: GOOD ENOUGH

* they call me the shuffler

* admin chat links

* forgor newline

* fix?

* actual fix

* dumb stuff

* chungus

---------

Co-authored-by: Connor Huffine <chuffine@gmail.com>
Co-authored-by: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com>
2026-09-15 08:05:17 +00:00

53 lines
2.9 KiB
C#

using System.Diagnostics.CodeAnalysis;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Content.Shared.Players.RateLimiting;
using Robust.Shared.Network;
using Robust.Shared.Player;
namespace Content.Server.Chat.Managers
{
public interface IChatManager : ISharedChatManager
{
/// <summary>
/// Dispatch a server announcement to every connected player.
/// </summary>
/// <param name="message"></param>
/// <param name="colorOverride">Override the color of the message being sent.</param>
void DispatchServerAnnouncement(string message, Color? colorOverride = null);
void DispatchServerMessage(ICommonSession player, string message, bool suppressLog = false);
void TrySendOOCMessage(ICommonSession player, string message, OOCChatType type);
void SendHookOOC(string sender, string message);
void SendHookAdmin(string sender, string message);
void SendAdminAnnouncement(string message, AdminFlags? flagBlacklist = null, AdminFlags? flagWhitelist = null);
void SendAdminAnnouncementMessage(ICommonSession player, string message, bool suppressLog = true);
void ChatMessageToOne(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat,
INetChannel client, Color? colorOverride = null, bool recordReplay = false, string? audioPath = null, float audioVolume = 0, NetUserId? author = null);
void ChatMessageToMany(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, bool recordReplay,
IEnumerable<INetChannel> clients, Color? colorOverride = null, string? audioPath = null, float audioVolume = 0, NetUserId? author = null);
void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, bool recordReplay, Color? colorOverride, string? audioPath = null, float audioVolume = 0);
void ChatMessageToAll(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, bool recordReplay, Color? colorOverride = null, string? audioPath = null, float audioVolume = 0, NetUserId? author = null);
bool MessageCharacterLimit(ICommonSession player, string message);
void DeleteMessagesBy(NetUserId uid);
[return: NotNullIfNotNull(nameof(author))]
ChatUser? EnsurePlayer(NetUserId? author);
/// <summary>
/// Called when a player sends a chat message to handle rate limits.
/// Will update counts and do necessary actions if breached.
/// </summary>
/// <param name="player">The player sending a chat message.</param>
/// <returns>False if the player has violated rate limits and should be blocked from sending further messages.</returns>
RateLimitStatus HandleRateLimit(ICommonSession player);
}
}