116 lines
2.5 KiB
C#
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)
|
|
// {
|
|
// }
|
|
// } |