Skip to content

Commit

Permalink
Make chat use messages instead of commands
Browse files Browse the repository at this point in the history
  • Loading branch information
ElectroJr committed Sep 23, 2024
1 parent b6845de commit a35a9d4
Show file tree
Hide file tree
Showing 16 changed files with 188 additions and 172 deletions.
65 changes: 9 additions & 56 deletions Content.Client/Chat/Managers/ChatManager.cs
Original file line number Diff line number Diff line change
@@ -1,74 +1,27 @@
using Content.Client.Administration.Managers;
using Content.Client.Ghost;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Client.Console;
using Robust.Shared.Utility;
using Robust.Shared.Network;

namespace Content.Client.Chat.Managers;

internal sealed class ChatManager : IChatManager
{
[Dependency] private readonly IClientConsoleHost _consoleHost = default!;
[Dependency] private readonly IClientAdminManager _adminMgr = default!;
[Dependency] private readonly IEntitySystemManager _systems = default!;

private ISawmill _sawmill = default!;
[Dependency] private readonly INetManager _net = default!;

public void Initialize()
{
_sawmill = Logger.GetSawmill("chat");
_sawmill.Level = LogLevel.Info;
_net.RegisterNetMessage<RequestChatMessage>();
}

public void SendMessage(string text, ChatSelectChannel channel)
{
var str = text.ToString();
switch (channel)
{
case ChatSelectChannel.Console:
// run locally
_consoleHost.ExecuteCommand(text);
break;

case ChatSelectChannel.LOOC:
_consoleHost.ExecuteCommand($"looc \"{CommandParsing.Escape(str)}\"");
break;

case ChatSelectChannel.OOC:
_consoleHost.ExecuteCommand($"ooc \"{CommandParsing.Escape(str)}\"");
break;

case ChatSelectChannel.Admin:
_consoleHost.ExecuteCommand($"asay \"{CommandParsing.Escape(str)}\"");
break;

case ChatSelectChannel.Emotes:
_consoleHost.ExecuteCommand($"me \"{CommandParsing.Escape(str)}\"");
break;

case ChatSelectChannel.Dead:
if (_systems.GetEntitySystemOrNull<GhostSystem>() is {IsGhost: true})
goto case ChatSelectChannel.Local;

if (_adminMgr.HasFlag(AdminFlags.Admin))
_consoleHost.ExecuteCommand($"dsay \"{CommandParsing.Escape(str)}\"");
else
_sawmill.Warning("Tried to speak on deadchat without being ghost or admin.");
break;

// TODO sepearate radio and say into separate commands.
case ChatSelectChannel.Radio:
case ChatSelectChannel.Local:
_consoleHost.ExecuteCommand($"say \"{CommandParsing.Escape(str)}\"");
break;

case ChatSelectChannel.Whisper:
_consoleHost.ExecuteCommand($"whisper \"{CommandParsing.Escape(str)}\"");
break;
if (string.IsNullOrWhiteSpace(text))
return;

default:
throw new ArgumentOutOfRangeException(nameof(channel), channel, null);
}
if (channel == ChatSelectChannel.Console)
_consoleHost.ExecuteCommand(text);
else
_net.ClientSendMessage(new RequestChatMessage { Text = text, Channel = channel, });
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,7 @@ public void SendMessage(ChatBox box, ChatSelectChannel channel)
// Check if message is longer than the character limit
if (text.Length > MaxMessageLength)
{
var locWarning = Loc.GetString("chat-manager-max-message-length",
var locWarning = Loc.GetString("chat-manager-max-message-length-exceeded-message",
("maxMessageLength", MaxMessageLength));
box.AddLine(locWarning, Color.Orange);
return;
Expand Down
14 changes: 4 additions & 10 deletions Content.Server/Administration/Commands/DSay.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using Content.Server.Chat.Systems;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;

namespace Content.Server.Administration.Commands
{
[AdminCommand(AdminFlags.Moderator)]
sealed class DSay : IConsoleCommand
{
[Dependency] private readonly IEntityManager _e = default!;
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "dsay";

Expand All @@ -23,18 +24,11 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;
}

if (player.AttachedEntity is not { Valid: true } entity)
return;

if (args.Length < 1)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

var chat = _e.System<ChatSystem>();
chat.TrySendInGameOOCMessage(entity, message, InGameOOCChatType.Dead, false, shell, player);
_chat.RequestChat(player, message, ChatSelectChannel.Dead);
}
}
}
8 changes: 4 additions & 4 deletions Content.Server/Chat/Commands/AdminChatCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
using Content.Server.Administration;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;

namespace Content.Server.Chat.Commands
{
[AdminCommand(AdminFlags.Adminchat)]
internal sealed class AdminChatCommand : IConsoleCommand
{
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "asay";
public string Description => "Send chat messages to the private admin chat channel.";
public string Help => "asay <text>";
Expand All @@ -26,10 +29,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

IoCManager.Resolve<IChatManager>().TrySendOOCMessage(player, message, OOCChatType.Admin);
_chat.RequestChat(player, message, ChatSelectChannel.Admin);
}
}
}
17 changes: 4 additions & 13 deletions Content.Server/Chat/Commands/LOOCCommand.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
using Content.Server.Chat.Systems;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;
using Robust.Shared.Enums;

namespace Content.Server.Chat.Commands
{
[AnyCommand]
internal sealed class LOOCCommand : IConsoleCommand
{
[Dependency] private readonly IEntityManager _e = default!;
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "looc";
public string Description => "Send Local Out Of Character chat messages.";
Expand All @@ -22,20 +22,11 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;
}

if (player.AttachedEntity is not { Valid: true } entity)
return;

if (player.Status != SessionStatus.InGame)
return;

if (args.Length < 1)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

_e.System<ChatSystem>().TrySendInGameOOCMessage(entity, message, InGameOOCChatType.Looc, false, shell, player);
_chat.RequestChat(player, message, ChatSelectChannel.LOOC);
}
}
}
15 changes: 5 additions & 10 deletions Content.Server/Chat/Commands/MeCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
using Content.Server.Chat.Systems;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;
using Robust.Shared.Enums;

namespace Content.Server.Chat.Commands
{
[AnyCommand]
internal sealed class MeCommand : IConsoleCommand
{
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "me";
public string Description => "Perform an action.";
public string Help => "me <text>";
Expand All @@ -20,9 +22,6 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;
}

if (player.Status != SessionStatus.InGame)
return;

if (player.AttachedEntity is not {} playerEntity)
{
shell.WriteError("You don't have an entity!");
Expand All @@ -33,11 +32,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>()
.TrySendInGameICMessage(playerEntity, message, InGameICChatType.Emote, ChatTransmitRange.Normal, false, shell, player);
_chat.RequestChat(player, message, ChatSelectChannel.Emotes);
}
}
}
8 changes: 4 additions & 4 deletions Content.Server/Chat/Commands/OOCCommand.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;

namespace Content.Server.Chat.Commands
{
[AnyCommand]
internal sealed class OOCCommand : IConsoleCommand
{
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "ooc";
public string Description => "Send Out Of Character chat messages.";
public string Help => "ooc <text>";
Expand All @@ -23,10 +26,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

IoCManager.Resolve<IChatManager>().TrySendOOCMessage(player, message, OOCChatType.OOC);
_chat.RequestChat(player, message, ChatSelectChannel.OOC);
}
}
}
17 changes: 6 additions & 11 deletions Content.Server/Chat/Commands/SayCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
using Content.Server.Chat.Systems;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;
using Robust.Shared.Enums;

namespace Content.Server.Chat.Commands
{
[AnyCommand]
internal sealed class SayCommand : IConsoleCommand
{
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "say";
public string Description => "Send chat messages to the local channel or a specified radio channel.";
public string Help => "say <text>";
Expand All @@ -20,10 +22,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;
}

if (player.Status != SessionStatus.InGame)
return;

if (player.AttachedEntity is not {} playerEntity)
if (player.AttachedEntity is not {})
{
shell.WriteError("You don't have an entity!");
return;
Expand All @@ -33,11 +32,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>()
.TrySendInGameICMessage(playerEntity, message, InGameICChatType.Speak, ChatTransmitRange.Normal, false, shell, player);
_chat.RequestChat(player, message, ChatSelectChannel.Local);
}
}
}
17 changes: 6 additions & 11 deletions Content.Server/Chat/Commands/WhisperCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
using Content.Server.Chat.Systems;
using Content.Server.Chat.Managers;
using Content.Shared.Administration;
using Content.Shared.Chat;
using Robust.Shared.Console;
using Robust.Shared.Enums;

namespace Content.Server.Chat.Commands
{
[AnyCommand]
internal sealed class WhisperCommand : IConsoleCommand
{
[Dependency] private readonly IChatManager _chat = default!;

public string Command => "whisper";
public string Description => "Send chat messages to the local channel as a whisper";
public string Help => "whisper <text>";
Expand All @@ -20,10 +22,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;
}

if (player.Status != SessionStatus.InGame)
return;

if (player.AttachedEntity is not {} playerEntity)
if (player.AttachedEntity is not {})
{
shell.WriteError("You don't have an entity!");
return;
Expand All @@ -33,11 +32,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args)
return;

var message = string.Join(" ", args).Trim();
if (string.IsNullOrEmpty(message))
return;

IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>()
.TrySendInGameICMessage(playerEntity, message, InGameICChatType.Whisper, ChatTransmitRange.Normal, false, shell, player);
_chat.RequestChat(player, message, ChatSelectChannel.Whisper);
}
}
}
4 changes: 2 additions & 2 deletions Content.Server/Chat/Managers/ChatManager.RateLimit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ private void RegisterRateLimits()

private void RateLimitPlayerLimited(ICommonSession player)
{
DispatchServerMessage(player, Loc.GetString("chat-manager-rate-limited"), suppressLog: true);
DispatchServerMessage(player, _loc.GetString("chat-manager-rate-limited"), suppressLog: true);
}

private void RateLimitAlertAdmins(ICommonSession player)
{
if (_configurationManager.GetCVar(CCVars.ChatRateLimitAnnounceAdmins))
SendAdminAlert(Loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name)));
SendAdminAlert(_loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name)));
}

public RateLimitStatus HandleRateLimit(ICommonSession player)
Expand Down
Loading

0 comments on commit a35a9d4

Please sign in to comment.