about summary refs log tree commit diff
path: root/IRCStates/Channel.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IRCStates/Channel.cs')
-rw-r--r--IRCStates/Channel.cs67
1 files changed, 67 insertions, 0 deletions
diff --git a/IRCStates/Channel.cs b/IRCStates/Channel.cs
new file mode 100644
index 0000000..60ca3fb
--- /dev/null
+++ b/IRCStates/Channel.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace IRCStates
+{
+    public class Channel
+    {
+        public Channel()
+        {
+            Users     = new Dictionary<string, ChannelUser>();
+            ListModes = new Dictionary<string, List<string>>();
+            Modes     = new Dictionary<string, string>();
+        }
+
+        public string Name { get; set; }
+        public string NameLower { get; set; }
+        public Dictionary<string, ChannelUser> Users { get; set; }
+        public string Topic { get; set; }
+        public string TopicSetter { get; set; }
+        public DateTime TopicTime { get; set; }
+        public DateTime Created { get; set; }
+        public Dictionary<string, List<string>> ListModes { get; set; }
+        public Dictionary<string, string> Modes { get; set; }
+
+        public override string ToString()
+        {
+            return $"Channel(name={Name})";
+        }
+
+        public void SetName(string name, string nameLower)
+        {
+            Name      = name;
+            NameLower = nameLower;
+        }
+
+        public void AddMode(string ch, string param, bool listMode)
+        {
+            if (listMode)
+            {
+                if (!ListModes.ContainsKey(ch)) ListModes[ch] = new List<string>();
+
+                if (!ListModes[ch].Contains(param)) ListModes[ch].Add(param ?? string.Empty);
+            }
+            else
+            {
+                Modes[ch] = param;
+            }
+        }
+
+        public void RemoveMode(string ch, string param)
+        {
+            if (ListModes.ContainsKey(ch))
+            {
+                if (ListModes[ch].Contains(param))
+                {
+                    ListModes[ch].Remove(param);
+                    if (!ListModes[ch].Any()) ListModes.Remove(ch);
+                }
+            }
+            else if (Modes.ContainsKey(ch))
+            {
+                Modes.Remove(ch);
+            }
+        }
+    }
+}