using System.Data; namespace riff; public class IRCMessage { public string? Source; public string Command; public List Arguments; public IRCMessage(string line) { string[] split; List args = new(); if (line[0] == ':') { split = line[1..].Split(' ', 2); Source = split[0]; line = split[1]; } if (line.IndexOf(" :") != -1) { split = line.Split(" :", 2); foreach (string arg in split[0].Split(' ')) args.Add(arg); args.Add(split[1]); } else { foreach (string arg in line.Split(' ')) args.Add(arg); } Command = args[0]; Arguments = args.Count > 1 ? args[1..] : new List(); } } public class PRIVMSG { public string Body { get; set; } public string Sender { get; set; } public string Nick { get; set; } public PRIVMSG(IRCMessage message) { if (message.Source == null) throw new NoNullAllowedException(); Nick = message.Source.Substring(0, message.Source.IndexOf("!")); Body = message.Arguments[1].Trim(); Sender = message.Arguments[0]; if (Sender[0] != '#') Sender = Nick; } } public class CommandRunner { public string Trigger; public Action Callback; public CommandRunner(string trigger, Action callback) { Callback = callback; Trigger = trigger; } public bool Run(PRIVMSG privmsg) { string[] split = privmsg.Body.Trim().Split(' ', 2); if (split[0].StartsWith('!') && split[0][1..].Equals(Trigger)) { if (split.Length > 1) privmsg.Body = split[1]; else privmsg.Body = string.Empty; Callback(privmsg); return true; } return false; } } public class PollRunner { public Action Callback; public int Interval; public PollRunner(int interval, Action callback) { Interval = interval; Callback = callback; } public async void Start() { while (true) { await Task.Delay(Interval); Callback(); } } } // public class RegexTrigger // { // public string Pattern; // public Action Callback; // public RegexTrigger(string pattern, Action callback) // { // Pattern = pattern; // Callback = callback; // } // public bool Run(PRIVMSG privmsg) // { // } // }