riff/Types.cs

116 lines
2.5 KiB
C#

using System.Data;
namespace riff;
public class IRCMessage
{
public string? Source;
public string Command;
public List<string>? Arguments;
public IRCMessage(string line)
{
string[] split;
List<string> 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..] : null;
}
}
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 || message.Arguments == null)
throw new NoNullAllowedException();
Nick = message.Source.Substring(0, message.Source.IndexOf("!") - 1);
Sender = message.Arguments[0];
Body = message.Arguments[1].Trim();
}
}
public class CommandRunner
{
public string Trigger;
public Action<PRIVMSG> Callback;
public CommandRunner(string trigger, Action<PRIVMSG> 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 Run()
{
while (true)
{
await Task.Delay(Interval);
Callback();
}
}
}
// public class RegexTrigger
// {
// public string Pattern;
// public Action<string> Callback;
// public RegexTrigger(string pattern, Action<string> callback)
// {
// Pattern = pattern;
// Callback = callback;
// }
// public bool Run(PRIVMSG privmsg)
// {
// }
// }