Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }