bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * Ignore. * ****/ var match = Regex.Match( MessageText, @"Ignore (that|it)", RegexOptions.IgnoreCase); if (IsTargeted && match.Success) { var LastHost = Instance.GetLastHost(); if (LastHost == null) { Instance.SendMessage(RawMessage.Channel, String.Format("@{0}: I don't know what you want me to ignore.", Instance.GetUser(RawMessage.User).Name)); return(true); } Instance.SendMessage(RawMessage.Channel, string.Format("Ok. I'll ignore {0} from now on.", LastHost.FriendlyName)); LastHost.IsFixture = true; Singleton <NetworkData> .Instance.Save(); return(true); } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * Training Time. * ****/ var match = Regex.Match( MessageText, @"Training time", RegexOptions.IgnoreCase); if (IsTargeted && match.Success) { var host = Singleton <NetworkData> .Instance.PickIncompleteHost(); if (host == null) { Instance.SendMessage(RawMessage.Channel, "I know everything here."); } else { Instance.SendMessage(RawMessage.Channel, String.Format("Do you recognise '{0}'?", host.FriendlyName)); } Instance.SetLastHost(host); return(true); } return(false); }
public bool Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * Reminders. * ****/ var match = Regex.Match( MessageText, @"Remind (?<Owner>me|(?<un>@[\w]+)) to (?<Text>.+)", RegexOptions.IgnoreCase); if (IsTargeted && match.Success) { #if REMINDERS var target = Instance.GetUser(match.Groups["un"].Success ? match.Groups["un"].Value : RawMessage.User); Instance.SendMessage(RawMessage.Channel, string.Format("Ok. I'll remind {0} next time {1} in.", target.Name, "they're")); PersistentSingleton <Reminders> .Instance.Add(target, match.Groups["Text"].Value); PersistentSingleton <Reminders> .Instance.Check(Instance); return(true); #else RawMessage.Reply(Instance, "This feature has been disabled.", true); #endif } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * Select. * ****/ var match = Regex.Match( MessageText, @"(Select|Pick|With) (?<name>[\w:\.]+)", RegexOptions.IgnoreCase); if (IsTargeted && match.Success) { Host LastHost; NetworkData network = Singleton <NetworkData> .Instance; Instance.SetLastHost(LastHost = network.Find(match.Groups["name"].Value)); if (LastHost == null) { Instance.SendMessage(RawMessage.Channel, "I couldn't find it"); return(true); } Instance.SendMessage(RawMessage.Channel, string.Format("{0}: {1} [{2}] ({3})", LastHost.FriendlyName, LastHost.Owner, network.Status(LastHost), LastHost.Age.ToString())); return(true); } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * Debug. * ****/ var match = Regex.Match( MessageText, string.Concat("Debug ?((?<online>online)|(?<mine>mine)|(?<unknown>unknown))?"), RegexOptions.IgnoreCase); if (!IsTargeted) { return(false); // No inform here. } if (match.Success) { bool online = !string.IsNullOrEmpty(match.Groups["online"].Value); bool mine = !string.IsNullOrEmpty(match.Groups["mine"].Value); bool unknown = !string.IsNullOrEmpty(match.Groups["unknown"].Value); int n = 0; var sb = new StringBuilder(); NetworkData network = Singleton <NetworkData> .Instance; foreach (var host in network.AllHosts) { if (online && host.State == "down") { continue; } if (mine && host.Owner != string.Format("@{0}", Instance.GetUser(RawMessage.User).Name)) // TODO: Utterly broken - Not the same. { continue; } if (unknown && !string.IsNullOrEmpty(host.Owner)) { continue; } sb.AppendFormat("{0}: {1} ({2})", host.FriendlyName, network.Status(host), host.Age).AppendLine(); if (n++ == 5) { Instance.SendMessage(RawMessage.Channel, sb.ToString()); n = 0; sb = new StringBuilder(); Thread.Sleep(100); } } Instance.SendMessage(RawMessage.Channel, sb.ToString()); return(true); } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * WOL. * ****/ var match = Regex.Match( MessageText, // TODO: Use IsTargeted string.Concat("@", Instance.Self.Name, @":?\s+Wake (?<name>\w+)"), RegexOptions.IgnoreCase); if (match.Success) { NetworkData network = Singleton <NetworkData> .Instance; var LastHost = network.Find(match.Groups["name"].Value); Instance.SetLastHost(LastHost); Instance.SendMessage(RawMessage.Channel, string.Format("Waking {0}!", LastHost.FriendlyName)); WOL.WakeOnLan(LastHost.HardwareAddress); return(true); } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * How long has it been here. * ****/ var match = Regex.Match( MessageText, @"How (long (has|is|was)? (it)? been t?here|old is it)", RegexOptions.IgnoreCase); if (IsTargeted && match.Success) { var LastHost = Instance.GetLastHost(); if (LastHost == null) { Instance.SendMessage(RawMessage.Channel, String.Format("@{0}: How long has _what_ been been here?", Instance.GetUser(RawMessage.User).Name)); return(true); } Instance.SendMessage(RawMessage.Channel, String.Format("{0} hours.", LastHost.Age)); return(true); } return(false); }
bool ICommand.Run(string MessageText, SlackRTM.Events.Message RawMessage, bool IsTargeted, SlackRTM.Slack Instance) { /* **** * That's my Something * ****/ var match = Regex.Match( MessageText, @"That(['’]?s| is) (?<Owner>my|the|(?<un>@[\w-_.]+)['’]s) (?<Type>[\w ]+)?(,\s+?(?<Nickname>[\w _:]+))?", RegexOptions.IgnoreCase); if (match.Success) { if (!IsTargeted) { //TODO: Rate Limit to once per day. RawMessage.Reply(Instance, "Was that to me?"); return(true); } var LastHost = Instance.GetLastHost(); if (LastHost == null) { Instance.SendMessage(RawMessage.Channel, String.Format("@{0}: I have no idea what you're talking about.", Instance.GetUser(RawMessage.User).Name)); return(true); } LastHost.Type = match.Groups["Type"].Value; var Owner = match.Groups["Owner"].Value; switch (Owner) { case "my": LastHost.Owner = Instance.GetUser(RawMessage.User).Name; break; case "a": if (string.IsNullOrEmpty(LastHost.Owner)) { LastHost.Owner = ""; //LastHost.IsFixture = true; } break; case "the": LastHost.Owner = "?"; LastHost.IsFixture = true; break; default: LastHost.Owner = match.Groups["un"].Value; break; } Instance.SendMessage(RawMessage.Channel, string.Format("Ok. {0} is {1}'s {2}. I'll keep that in mind :simple_smile:", LastHost.FriendlyName, LastHost.Owner, LastHost.Type)); Singleton <NetworkData> .Instance.Save(); var another = Singleton <NetworkData> .Instance.PickIncompleteHost(); if (another != null) { RawMessage.Reply(Instance, string.Format("Also, do you recognise {0}?", another.FriendlyName), false); Instance.SetLastHost(another); } return(true); } return(false); }