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)