Esempio n. 1
0
        public void TestSend()
        {
            var slack = new Slack();

            Assert.IsTrue(slack.Init(Token), "Invalid Token");
            Assert.IsTrue(slack.Connect(), "Failed to Connect");
            while (!slack.RecievedHello)
            {
                Thread.Sleep(0);
            }
            slack.SendMessage(slack.GetChannel("#botspam").Id, "Test!");
            slack.SendMessage("#botspam", "Test2");
        }
Esempio n. 2
0
        bool ICommand.Run(string MessageText, Message RawMessage, bool IsTargeted, Slack Instance)
        {
            // ’
            var match = Regex.Match(
                MessageText,
                @"(Who['’]?s|(Any|Some)(one|body)) in\?",
                RegexOptions.IgnoreCase);

            if (match.Success)
            {
                Singleton <NetworkData> .Instance.Refresh();

                var hosts = Singleton <NetworkData> .Instance.CertainHosts().ToList();

                var unknowns = Singleton <NetworkData> .Instance.UnknownHosts().Count();

                var  people = new List <string>();
                Host h      = null;
                foreach (var host in hosts.ToArray())
                {
                    if (people.Contains(host.Owner))
                    {
                        hosts.Remove(host);
                    }
                    else
                    {
                        people.Add(host.Owner);
                    }
                }

                if (hosts.Count > 0)
                {
                    Instance.SendMessage(RawMessage.Channel, string.Format("{0} {1} here. {2}",
                                                                           string.Join(", ", hosts.Select(host => String.Format("{0}'s {1} '{2}'", host.Owner, host.Type, host.FriendlyName))),
                                                                           hosts.Count == 1 ? "is" : "are",
                                                                           unknowns > 0 ? string.Format("There are also {0} unknown devices.", unknowns) : ""));
                }
                else if ((h = Singleton <NetworkData> .Instance.PickIncompleteHost()) != null)
                {
                    Instance.SendMessage(RawMessage.Channel, String.Format("I don't know. But there is a device I don't recognise: {0}", h.FriendlyName));
                }
                else
                {
                    Instance.SendMessage(RawMessage.Channel, "Nobody. It's lonely here :frowning:");
                }
                Instance.SetLastHost(h);
                return(true);
            }
            return(false);
        }
Esempio n. 3
0
        public static void Introduce(Slack instance, Channel channel)
        {
            var settings = PersistentSingleton <Settings> .Instance;

            instance.SendMessage(channel, "Hi, I'm {0}!", instance.Self.Name);
            instance.SendMessage(channel,
                                 "I'm here to keep an eye on your building while you're not around.\n" +
                                 "I do this by watching your wifi network. " +
                                 "I'll keep notes on each device that connects to the wifi, and with your help, be able to work out who's in the building.\n");
            instance.SendMessage(channel, "If you ever need me, just ask _Who's in?_ or _Anyone in?_, and I'll let you know.\n" +
                                 "If there's a device I don't recognise, just say _@{0}: That's my iThing_, or _@{0}: That's @somebody's bright pink phone_.\n" +
                                 "I try to work out what belongs here, and try not to ask about the router or printer, but if I ever do, feel free to let me know by saying _@{0}: Ignore that_.", instance.Self.Name);
            settings.HasDoneIntroSpiel = true;
        }
Esempio n. 4
0
        internal void Check(Slack slack)
        {
            try
            {
                var whosin = Singleton <NetworkData> .Instance.CertainHosts().Select(h => h.Owner).Distinct();

                foreach (var item in Notes.ToArray())
                {
                    var who  = slack.GetUser(item.Who);
                    var name = "@" + who.Name;
                    if (whosin.Contains(name, System.StringComparer.CurrentCultureIgnoreCase))
                    {
                        var im = slack.Ims.FirstOrDefault(i => i.Name == who.Id);
                        if (im == null)
                        {
                            im = who.OpenIm();
                        }
                        slack.SendMessage(im.Id, "Reminder: " + item.Text);
                        Notes.Remove(item);
                    }
                }
                PersistentSingleton <Reminders> .Dirty();
            }
            catch (Exception c)
            {
                Console.WriteLine(c);
            }
        }
Esempio n. 5
0
 public static void Reply(this Message message, Slack Instance, string Text, bool targeted = false)
 {
     if (targeted)
     {
         Text = string.Format("{1}: {0}", Text, Instance.GetUser(message.User).Name);
     }
     Instance.SendMessage(message.Channel, Text);
 }
Esempio n. 6
0
        private static Action IdleFunc(Slack slack)
        {
            return(() =>
            {
                try
                {
                    Thread.CurrentThread.Name = slack.TeamInfo.Domain + "_idlefunc";
                    Thread.CurrentThread.IsBackground = true;
                    if (!PersistentSingleton <Settings> .Instance.HasDoneIntroSpiel)
                    {
                        Thread.Sleep(TimeSpan.FromMinutes(1));
                    }
                    DateTime LastQuestion = new DateTime();
                    int askchannel = random.Next(0, slack.JoinedChannels.Count());
                    while (true)
                    {
                        Singleton <NetworkData> .Instance.Refresh();

#if REMINDERS
                        try
                        {
                            PersistentSingleton <Reminders> .Instance.Check(slack);
                        }
                        catch (Exception)
                        { }
#endif
                        if (DateTime.Now.Hour < 7)
                        {
                            continue;
                        }
                        var inc = Singleton <NetworkData> .Instance.PickIncompleteHost();

                        if (inc != null && LastQuestion.Date != DateTime.Now.Date)
                        {
                            LastQuestion = DateTime.Now;
                            string chan = slack.JoinedChannels.ElementAt(askchannel).Id;
                            slack.SendMessage(chan, "Excuse me, but does anyone recognise '{0}'?", inc.FriendlyName);
                            askchannel++;
                            if (askchannel == slack.JoinedChannels.Count())
                            {
                                askchannel = 0;
                            }
                            slack.SetLastHost(inc);
                        }
                        Thread.Sleep(new TimeSpan(0, 5, 0));
                    }
                }
                catch (Exception c)
                {
                    Console.WriteLine("!An Error has been caught!\n{0}", c);
                    File.WriteAllText("Idlefunc_error.txt", c.ToString());
                }
            });
        }
Esempio n. 7
0
        public void Process()
        {
            try
            {
                var stats = Get();
                if (stats == null)
                {
                    return;
                }

                foreach (var x in stats.members)
                {
                    foreach (var m in x)
                    {
                        if (!Stars.ContainsKey(m.name.ToString()))
                        {
                            Stars.Add(m.name.ToString(), new List <int>());
                            if (!Initializing)
                            {
                                Slack.SendMessage($"{m.name} joined the Advent of Code challenge! Welcome to the team!", "#aoc", ":aoc:", "Advent of Code");
                            }
                        }

                        foreach (var s in m.completion_day_level)
                        {
                            foreach (var y in s)
                            {
                                foreach (var p in y)
                                {
                                    var star = int.Parse(s.Name) * 100 + int.Parse(p.Name);
                                    if (Stars[m.name.ToString()].Contains(star))
                                    {
                                        continue;
                                    }

                                    Stars[m.name.ToString()].Add(star);
                                    if (!Initializing)
                                    {
                                        Slack.SendMessage($"{m.name} solved part {p.Name} of day {s.Name}.", "#aoc", ":aoc:", "Advent of Code");
                                    }
                                }
                            }
                        }
                    }
                }

                Initializing = false;
            }
            catch
            {
                // ignored
            }
        }
Esempio n. 8
0
        public bool Run(string MessageText, Message RawMessage, bool IsTargeted, Slack Instance)
        {
            var match = Regex.Match(
                MessageText,
                @"(Call|Name|Nickname) it (?<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)
                {
                    RawMessage.Reply(Instance, "I have no idea what you're talking about.", true);
                    return(true);
                }
                var oldname = LastHost.FriendlyName;
                LastHost.Name = match.Groups["Nickname"].Value;
                RawMessage.Reply(Instance, string.Format("Ok. It'll call {0} \"{1}\" from now on.", oldname, LastHost.FriendlyName));
                return(true);
            }
            match = Regex.Match(
                MessageText,
                @"(Call|Name|Nickname) (?<name>[\w:]+) (as|to) (?<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);
                }
                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 anything by that name");
                    return(true);
                }
                var oldname = LastHost.FriendlyName;
                LastHost.Name = match.Groups["Nickname"].Value;
                RawMessage.Reply(Instance, string.Format("Ok. It'll call {0} \"{1}\" from now on.", oldname, LastHost.FriendlyName));
                return(true);
            }
            return(false);
        }
Esempio n. 9
0
        public static void Score(IDbConnection conn, string winner, string loser)
        {
            const int k = 40;

            var winnerRating       = conn.Query <int>("SELECT Rating FROM [User] WHERE Id = @Winner", new { Winner = winner }).First();
            var loserRating        = conn.Query <int>("SELECT Rating FROM [User] WHERE Id = @Loser", new { Loser = loser }).First();
            var loserIsProvisional = conn.Query <int>("SELECT COUNT(*) FROM Match WHERE (Winner = @Loser OR Loser = @Loser) AND IsWinnerConfirmed = 1 AND IsLoserConfirmed = 1", new { Loser = loser }).First() < 10;

            var odds = (10 ^ (winnerRating / 400)) / ((double)(10 ^ (winnerRating / 400)) + (10 ^ (loserRating / 400)));

            var newWinnerRating = winnerRating + (int)(k * (1 - odds) * (loserIsProvisional ? 0.5 : 1));
            var newLoserRating  = loserRating - (int)(k * (1 - odds));

            Slack.SendMessage($"{winner} (+{newWinnerRating - winnerRating}) [{newWinnerRating}] just won from {loser} (-{loserRating - newLoserRating}) [{newLoserRating}]!", "#ranked", ":ranked:", "Ranked");

            conn.Execute(
                @"UPDATE [User] SET Rating = @WinnerRating WHERE Id = @Winner; UPDATE [User] SET Rating = @LoserRating WHERE Id = @Loser",
                new { Winner = winner, WinnerRating = newWinnerRating, Loser = loser, LoserRating = newLoserRating });
        }
Esempio n. 10
0
        public void Process()
        {
            try
            {
                var games = new Dictionary <long, GameStats>();

                foreach (var s in Summoners)
                {
                    // do API call and get response
                    var json = GetJSON(string.Format(MatchUrl, s.SummonerID, ApiKey));
                    if (json == null)
                    {
                        continue;
                    }

                    // get and compare game ID
                    var game   = json["games"][0];
                    var gameId = long.Parse((string)game["gameId"]);
                    if (!s.LastMatchID.HasValue)
                    {
                        s.LastMatchID = gameId;
                    }
                    if (s.LastMatchID == gameId)
                    {
                        continue;
                    }

                    // save game data
                    if (!games.ContainsKey(gameId))
                    {
                        games[gameId] = new GameStats(game);
                    }
                    games[gameId].Players[s.Name] = new PlayerStats(s.Name, game);

                    // update last game ID
                    s.LastMatchID = gameId;
                }

                // report
                foreach (var game in games)
                {
                    // report quadrakills
                    foreach (var p in game.Value.Players.Where(p => p.Value.QuadraKills > 0 && p.Value.PentaKills == 0))
                    {
                        Slack.SendMessage(string.Format("{0} had {1} QUADRAKILL{2}!!",
                                                        p.Value.ToString(),
                                                        p.Value.QuadraKills == 1 ? "A" : p.Value.QuadraKills.ToString(CultureInfo.InvariantCulture),
                                                        p.Value.QuadraKills > 1 ? "S" : ""
                                                        ), "#lol", ":quadra:", "League of Legends");
                    }

                    // report pentakills
                    foreach (var p in game.Value.Players.Where(p => p.Value.PentaKills > 0))
                    {
                        Slack.SendMessage(string.Format("{0} had {1} PENTAKILL{2}!! @channel",
                                                        p.Value.ToString(),
                                                        p.Value.PentaKills == 1 ? "A" : p.Value.PentaKills.ToString(CultureInfo.InvariantCulture),
                                                        p.Value.PentaKills > 1 ? "S" : ""
                                                        ), "#lol", ":penta:", "League of Legends");
                    }

                    // report game stats
                    Slack.SendMessage(game.Value.ToString(), "#lol", ":lol:", "League of Legends");
                }
            }
            catch
            {
                // ignored
            }
        }
Esempio n. 11
0
 public void Test1()
 {
     Hale.Alert.Slack slack = new Slack();
     slack.SendMessage();
 }
Esempio n. 12
0
        private static void OnSlackMessage(SlackMessage message)
        {
            Console.WriteLine($"[{message.Sender}] : {message.Message}");

            foreach (var handler in Handlers)
            {
                var inst        = handler.Value.ServiceInstance;
                var regex       = handler.Key;
                var handlerInfo = handler.Value;
                var methodInfo  = handler.Value.Handler;

                // SUBSCRIBER TARGET
                if (handlerInfo.Target == SubscribeTarget.All)
                {
                    ; // skip
                }
                if (handlerInfo.Target == SubscribeTarget.Myself &&
                    message.Sender.IsMe == false)
                {
                    continue;
                }
                if (handlerInfo.Target == SubscribeTarget.BotUser &&
                    message.Sender.IsBot == false)
                {
                    continue;
                }
                if (handlerInfo.Target == SubscribeTarget.OtherUser &&
                    message.Sender.IsMe)
                {
                    continue;
                }

                var matches = regex.Match(message.Message);

                if (matches.Success == false)
                {
                    continue;
                }
                if (handlerInfo.PermissionGroupName != null)
                {
                    if (message.Sender.Permissions.Contains(handlerInfo.PermissionGroupName) == false)
                    {
                        continue;
                    }
                }

                var parameters    = methodInfo.GetParameters();
                var args          = new List <object>();
                var errorContinue = false;

                try
                {
                    args.Add(message);
                    for (int i = 1; i < matches.Groups.Count; i++)
                    {
                        var type = parameters[i].ParameterType;

                        if (type == typeof(string))
                        {
                            args.Add(matches.Groups[i].Value);
                        }
                        else if (type == typeof(int))
                        {
                            args.Add(Convert.ToInt32(matches.Groups[i].Value));
                        }
                        else if (type == typeof(long))
                        {
                            args.Add(Convert.ToInt64(matches.Groups[i].Value));
                        }
                        else if (type == typeof(float))
                        {
                            args.Add(Convert.ToSingle(matches.Groups[i].Value));
                        }
                        else if (type == typeof(double))
                        {
                            args.Add(Convert.ToDouble(matches.Groups[i].Value));
                        }
                    }
                }
                catch (Exception e)
                {
                    if (handlerInfo.Usage != null)
                    {
                        Slack.SendMessage(message.Channel.Name, "@" + message.Sender + " : " + handlerInfo.Usage);
                    }
                    errorContinue = true;
                }

                if (errorContinue)
                {
                    continue;
                }
                try
                {
                    methodInfo?.Invoke(inst, args.ToArray());
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }