diff --git a/Torch.API/Managers/IChatManagerServer.cs b/Torch.API/Managers/IChatManagerServer.cs index 52bd75f..3803b58 100644 --- a/Torch.API/Managers/IChatManagerServer.cs +++ b/Torch.API/Managers/IChatManagerServer.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using VRage.Collections; using VRage.Network; namespace Torch.API.Managers @@ -41,5 +42,24 @@ namespace Torch.API.Managers /// Font to use /// Player to send the message to, or everyone by default void SendMessageAsOther(string author, string message, string font, ulong targetSteamId = 0); + + /// + /// Mute user from global chat. + /// + /// + /// + bool MuteUser(ulong steamId); + + /// + /// Unmute user from global chat. + /// + /// + /// + bool UnmuteUser(ulong steamId); + + /// + /// Users which are not allowed to chat. + /// + HashSetReader MutedUsers { get; } } } diff --git a/Torch/Managers/ChatManager/ChatManagerServer.cs b/Torch/Managers/ChatManager/ChatManagerServer.cs index e46f7f4..02658ba 100644 --- a/Torch/Managers/ChatManager/ChatManagerServer.cs +++ b/Torch/Managers/ChatManager/ChatManagerServer.cs @@ -16,6 +16,7 @@ using Torch.API.Managers; using Torch.Managers.PatchManager; using Torch.Utils; using VRage; +using VRage.Collections; using VRage.Library.Collections; using VRage.Network; @@ -47,6 +48,10 @@ namespace Torch.Managers.ChatManager private static readonly Logger _log = LogManager.GetCurrentClassLogger(); private static readonly Logger _chatLog = LogManager.GetLogger("Chat"); + private readonly HashSet _muted = new HashSet(); + /// + public HashSetReader MutedUsers => _muted; + /// public ChatManagerServer(ITorchBase torchInstance) : base(torchInstance) { @@ -56,6 +61,18 @@ namespace Torch.Managers.ChatManager /// public event MessageProcessingDel MessageProcessing; + /// + public bool MuteUser(ulong steamId) + { + return _muted.Add(steamId); + } + + /// + public bool UnmuteUser(ulong steamId) + { + return _muted.Remove(steamId); + } + /// public void SendMessageAsOther(ulong authorId, string message, ulong targetSteamId = 0) { @@ -128,6 +145,13 @@ namespace Torch.Managers.ChatManager internal void RaiseMessageRecieved(ChatMsg message, ref bool consumed) { var torchMsg = new TorchChatMessage(GetMemberName(message.Author), message.Author, message.Text, (ChatChannel)message.Channel, message.TargetId); + if (_muted.Contains(message.Author)) + { + consumed = true; + _chatLog.Warn($"MUTED USER: [{torchMsg.Channel}:{torchMsg.Target}] {torchMsg.Author}: {torchMsg.Message}"); + return; + } + MessageProcessing?.Invoke(torchMsg, ref consumed); if (!consumed)