コード例 #1
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var text  = Uri.EscapeUriString(match.Groups[3].Value);

                var client = new HttpClient();
                client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-us"));
                client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8"));
                client.GetAsync(String.Format(Url, text)).ContinueWith(task =>
                {
                    if (task.Result.IsSuccessStatusCode)
                    {
                        task.Result.Content.ReadAsStringAsync().ContinueWith(readTask =>
                        {
                            jabbrClient.SayToRoom(message.Room, readTask.Result);
                        });
                    }
                    else
                    {
                        jabbrClient.PrivateReply(message.From, "Error ascii'ing that for you.");
                    }
                });
            }
        }
コード例 #2
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match = PrivateMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var url   = string.Format("http://www.google.com/ig/calculator?hl=en&q={0}", Uri.EscapeDataString(match.Groups[3].Value));

                var client = new HttpClient();
                client.Timeout = new TimeSpan(0, 0, 2);
                client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-us"));
                client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8"));
                var request = client.GetAsync(url).ContinueWith(requestTask =>
                {
                    if (requestTask.Result.IsSuccessStatusCode)
                    {
                        requestTask.Result.Content.ReadAsStringAsync().ContinueWith(readTask =>
                        {
                            dynamic json    = JsonConvert.DeserializeObject(readTask.Result);
                            string solution = json.rhs;
                            jabbrClient.SayToRoom(message.Room, solution ?? "Does not compute.");
                        });
                    }
                    else
                    {
                        jabbrClient.SayToRoom(message.Room, "Does not compute.");
                    }
                });
            }
        }
コード例 #3
0
        public override bool CanHandle(IRoomMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            return RoomMessagePatterns.Any(p => p.Match(message.Content).Success);
        }
コード例 #4
0
        public virtual bool CanHandle(IRoomMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            return(false);
        }
コード例 #5
0
        public override bool CanHandle(IRoomMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            return(RoomMessagePatterns.Any(p => p.Match(message.Content).Success));
        }
コード例 #6
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                jabbrClient.SayToRoom(message.Room, Carltons.RandomElement());
            }
        }
コード例 #7
0
ファイル: BaseSprocket.cs プロジェクト: rbwestmoreland/Jabbot
        public virtual bool CanHandle(IRoomMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            return false;
        }
コード例 #8
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var formattedInformation = GetFormattedInformation();
                jabbrClient.SayToRoom(message.Room, formattedInformation);
            }
        }
コード例 #9
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var formattedInformation = GetFormattedInformation();
                jabbrClient.SayToRoom(message.Room, formattedInformation);
            }
        }
コード例 #10
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match   = PrivateMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var choices = match.Groups[1].Value.Split(new string[] { "\"" }, StringSplitOptions.None).Where(s => !string.IsNullOrWhiteSpace(s));
                jabbrClient.SayToRoom(message.Room, choices.RandomElement());
            }
        }
コード例 #11
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var id  = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content).Groups[2].Value;
                var url = string.IsNullOrWhiteSpace(id) ? GetRandomUrl() : GetComicUrl(id);
                jabbrClient.SayToRoom(message.Room, url);
            }
        }
コード例 #12
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var location             = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content).Groups[3].Value;
                var formattedInformation = GetWeather(location);
                jabbrClient.SayToRoom(message.Room, formattedInformation);
            }
        }
コード例 #13
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                foreach (var rule in Rules)
                {
                    jabbrClient.SayToRoom(message.Room, rule);
                }
            }
        }
コード例 #14
0
ファイル: BaseSprocket.cs プロジェクト: rbwestmoreland/Jabbot
        public virtual void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (jabbrClient == null)
            {
                throw new ArgumentNullException("jabbrClient");
            }
        }
コード例 #15
0
        public virtual void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (jabbrClient == null)
            {
                throw new ArgumentNullException("jabbrClient");
            }
        }
コード例 #16
0
        private async void AddMessage(IRoom room, IRoomMessage roomMessage)
        {
            List <ChatBox> chatBoxLinkedToRoomList = _chatBoxList.Where(x => x.ID == room.ID).ToList();
            var            addedChatBoxMessageList = new List <ChatBoxMessage>();
            ChatBoxMessage chatBoxMessage;

            chatBoxLinkedToRoomList.ForEach(y =>
            {
                chatBoxMessage = CreateChatBoxMessage(roomMessage.Author, roomMessage.Message);
                y.RoomMessageList.Add(chatBoxMessage);
                MessageAdded?.Invoke(y, chatBoxMessage);
            });
        }
コード例 #17
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                Task.Factory.StartNew(() =>
                {
                    var match           = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                    var imageUrl        = match.Groups[2].Value;
                    var stachedImageUrl = String.Format("http://faceup.me/img.jpg?overlay={0}&src={1}", Accessories.RandomElement(), Uri.EscapeDataString(imageUrl));

                    jabbrClient.SayToRoom(message.Room, stachedImageUrl);
                }).ContinueWith(task =>
                {
                    var result = task.Exception;
                },
                                TaskContinuationOptions.OnlyOnFaulted);
            }
        }
コード例 #18
0
 public void ReceiveMessage(IRoomMessage message)
 {
     if (message == null || string.IsNullOrEmpty(message.Action) || message.PlayerId == 0)
     {
         throw new ArgumentNullException(nameof(message));
     }
     if (message.Action.ToUpperInvariant() == "MSG")
     {
         Message(Players.Single(a => a.PlayerId == message.PlayerId), message.Args[0].ToString());
     }
     else if (message.Action.ToUpperInvariant() == "WHISPER")
     {
         if (long.TryParse(message.Args[0].ToString(), out long toPlayerId))
         {
             Whisper(Players.Single(a => a.PlayerId == message.PlayerId),
                     Players.Single(a => a.PlayerId == toPlayerId),
                     message.Args[0].ToString());
         }
     }
 }
コード例 #19
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match       = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var achievement = Uri.EscapeUriString(match.Groups[2].Value);
                var email       = Uri.EscapeUriString(match.Groups[5].Value);

                var url = String.Format(Url, achievement);

                if (!String.IsNullOrWhiteSpace(email))
                {
                    url += String.Format("?email={0}.png", email);
                }

                jabbrClient.SayToRoom(message.Room, url);
            }
        }
コード例 #20
0
        public virtual async void ReceiveMessage(IRoomMessage message)
        {
            if (message == null || string.IsNullOrEmpty(message.Action))
            {
                return;
            }


            if (Players.TryGetValue(new Player(message.PlayerId), out IPlayer p))
            {
                if (message.Action == "READY")
                {
                    if (PlayerReadyState.ContainsKey(p))
                    {
                        SetPlayerReadyState(p);
                    }

                    await SendMessageAsync().ConfigureAwait(false);
                }
            }
        }
コード例 #21
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                if (RoomMessagePatterns.ElementAt(0).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, new string[] { "(ノಠ益ಠ)ノ︵┻━┻", "(╯°□°)╯︵ ┻━┻" }.RandomElement());
                }
                else if (RoomMessagePatterns.ElementAt(1).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "┬──┬◡ノ(° -°ノ)");
                }
                else if (RoomMessagePatterns.ElementAt(2).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "(ケ¬◟¬)ケ");
                }
                else if (RoomMessagePatterns.ElementAt(3).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "ლ(ಠ益ಠლ)");
                }
                else if (RoomMessagePatterns.ElementAt(4).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, new string[] { "♪┏(・o・)┛♪", "♪┗ ( ・o・) ┓♪", "♪┏ (・o・) ┛♪", "♪┗ (・o・ ) ┓♪", "♪┏(・o・)┛♪" }.RandomElement());
                }
                else if (RoomMessagePatterns.ElementAt(5).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "ಠ_ಠ");
                }
                else if (RoomMessagePatterns.ElementAt(6).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, @"¯\_(ツ)_/¯");
                }
            }
        }
コード例 #22
0
        public async void ReceiveMessage(IRoomMessage message)
        {
            //Check parameters
            if (message == null || string.IsNullOrEmpty(message.Action) || message.PlayerId == 0 ||
                message.Args == null)
            {
                return;
            }

            //Check who's turn it's currently is
            if (CurrentPlayerTurn == message.PlayerId)
            {
                var      action = message.Action.ToUpperInvariant();
                object[] args;
                switch (action)
                {
                case "ROLL":
                    //Check if player already have roled
                    if (Roll == 0)
                    {
                        //Check have many rolls the player have
                        short totalRollAmount = RollAmount(message.PlayerId);
                        //Check if the player have any tries left
                        if (RollAttempts < totalRollAmount)
                        {
                            RollAttempts += 1;

                            //All pieces in start zone
                            if (totalRollAmount > 1)
                            {
                                var RollAmount = RollDie();
                                //Need to role a 6 to get a piece out of starting zone
                                if (RollAmount == 6)
                                {
                                    //Move a random piece from bench to board
                                    var pawn = pawns[message.PlayerId].FirstOrDefault(a => a.Position == -1);
                                    if (pawn != null)
                                    {
                                        pawn.Position = playerHomePads[message.PlayerId];
                                        await SendMessageAsync(new GameMessageUnity(RoomID, "MOVE",
                                                                                    pawn.Id + "|" + pawn.Position))
                                        .ConfigureAwait(false);

                                        var pawnsOnPosition = PawnsOnPosition(pawn.Position).ToList();
                                        foreach (var ludoPawn in pawnsOnPosition.Where(a =>
                                                                                       a.Owner != message.PlayerId))
                                        {
                                            await SendMessageAsync(new GameMessageUnity(RoomID, "MOVE",
                                                                                        ludoPawn.Id + "|-1"))
                                            .ConfigureAwait(false);
                                        }
                                    }

                                    AdvanceTurn();
                                    return;
                                }

                                if (RollAttempts == 3)
                                {
                                    //No roll left
                                    AdvanceTurn();
                                }

                                await SendMessageAsync(new GameMessageUnity(RoomID, "ROLL",
                                                                            RollAmount.ToString()))
                                .ConfigureAwait(false);
                            }
                            else
                            {
                                //Normal roll
                                Roll = RollDie();
                                await SendMessageAsync(new GameMessageUnity(RoomID, action, Roll.ToString()))
                                .ConfigureAwait(false);
                            }
                        }
                        else
                        {
                            //TODO should not be possible to hit this
                            throw new NotImplementedException();
                        }
                    }

                    break;

                case "MOVE":
                    if (Roll == 0)
                    {
                        return;
                    }

                    RollAttempts = 0;

                    //Check parameters
                    if (int.TryParse(message.Args[0].ToString(), out int pawnId) && Roll != 0)
                    {
                        //Find the pawn the player is trying to move
                        var playerPawn = pawns[message.PlayerId].Single(a => a.Id == pawnId);

                        //Check if pawn is done
                        if (playerPawn.Position == -2)
                        {
                            return;
                        }

                        //Check if pawn is in start position and roll a 6
                        if (playerPawn.Position == -1)
                        {
                            if (Roll == 6)
                            {
                                playerPawn.Position = playerHomePads[message.PlayerId];
                                await SendMessageAsync(new GameMessageUnity(RoomID, action,
                                                                            playerPawn.Id + "|" + playerPawn.Position)).ConfigureAwait(false);

                                AdvanceTurn();
                                return;
                            }
                            else
                            {
                                //Need to role a 6 before getting 1 more pawn out of start
                                return;
                            }
                        }

                        var playerGoalEntrance = goalEntrances[message.PlayerId];
                        var playerGoal         = 57 + (playerPawn.TeamId * 5);
                        var playerPosition     = playerPawn.Position;
                        var newPositionRaw     = playerPawn.Position + Roll;


                        if (playerPawn.Position > 51)
                        {
                            //Inside goal row
                            if (newPositionRaw == playerGoal)
                            {
                                await PawnToGoal(playerPawn).ConfigureAwait(false);
                            }
                            else
                            {
                                //Check if higher
                                if (newPositionRaw > playerGoal)
                                {
                                    var difference = newPositionRaw - playerGoal;
                                    playerPawn.Position = playerGoal - difference;
                                    //playerPawn.Position = newPositionRaw - playerGoal;
                                }
                                else
                                {
                                    playerPawn.Position = newPositionRaw;
                                }

                                await SendMessageAsync(new GameMessageUnity(RoomID, action,
                                                                            playerPawn.Id + "|" + playerPawn.Position)).ConfigureAwait(false);

                                AdvanceTurn();
                            }

                            return;
                        }
                        else
                        {
                            if (newPositionRaw > 51)
                            {
                                playerPosition = 0;
                                newPositionRaw = playerPawn.Position + Roll - 52;
                            }

                            if ((newPositionRaw >= playerGoalEntrance && playerGoalEntrance >= playerPosition))
                            {
                                //Check if land on start
                                if (newPositionRaw == playerGoalEntrance)
                                {
                                    await PawnToGoal(playerPawn).ConfigureAwait(false);

                                    return;
                                }

                                if (playerPosition == 0)
                                {
                                    playerPawn.Position = (playerGoal - 6) + newPositionRaw;
                                }
                                else
                                {
                                    playerPawn.Position =
                                        (playerGoal - 6) +
                                        (Roll - (playerGoalEntrance - playerPawn.Position));
                                }

                                if (playerPawn.Position == playerGoal)
                                {
                                    await PawnToGoal(playerPawn).ConfigureAwait(false);

                                    return;
                                }

                                await SendMessageAsync(new GameMessageUnity(RoomID, action,
                                                                            playerPawn.Id + "|" + playerPawn.Position)).ConfigureAwait(false);

                                AdvanceTurn();
                                return;
                            }
                        }

                        //Calculate new position for pawn
                        int newPosition = CalculateNewPosition(playerPawn.Position + Roll);

                        //Check if pawn lands on star then jump to next star
                        if ((tileMap[newPosition].Type & (int)TileType.STAR) == (int)TileType.STAR)
                        {
                            newPosition = JumpNextStar(newPosition);
                        }

                        //Get a list of pawns on the same position
                        var pawnsOnPosition = PawnsOnPosition(newPosition).ToList();

                        playerPawn.Position = newPosition;

                        //Loop other pawns if there are any
                        foreach (var otherPawn in pawnsOnPosition)
                        {
                            //Check if other player's pawns
                            if (otherPawn.Owner != message.PlayerId)
                            {
                                //If the player's pawn land on a globe where a other pawn is already standing it kill itself.
                                if ((tileMap[newPosition].Type & (int)TileType.GLOBE) == (int)TileType.GLOBE)
                                {
                                    //Suicide
                                    playerPawn.Position = -1;
                                }
                                else
                                {
                                    //Check if there is multiple pawns on the position
                                    if (pawnsOnPosition.Count > 1)
                                    {
                                        playerPawn.Position = -1;
                                    }
                                    else
                                    {
                                        //KILL otherPawn
                                        otherPawn.Position = -1;
                                        await SendMessageAsync(new GameMessageUnity(RoomID, action,
                                                                                    otherPawn.Id + "|" + "-1"))
                                        .ConfigureAwait(false);
                                    }
                                }
                            }
                        }

                        await SendMessageAsync(new GameMessageUnity(RoomID, action,
                                                                    playerPawn.Id + "|" + playerPawn.Position)).ConfigureAwait(false);

                        AdvanceTurn();
                    }

                    break;

                default:
                    break;
                }
            }
        }
コード例 #23
0
 public void AddMessage(IRoomMessage chatboxMessage)
 {
     RoomMessageList.Add((RoomMessage)chatboxMessage);
     NewMessage?.Invoke(chatboxMessage);
 }
コード例 #24
0
 public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
 {
     base.Handle(message, jabbrClient);
 }
コード例 #25
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                if (RoomMessagePatterns.ElementAt(0).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, new string[] { "(ノಠ益ಠ)ノ︵┻━┻", "(╯°□°)╯︵ ┻━┻" }.RandomElement());
                }
                else if (RoomMessagePatterns.ElementAt(1).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "┬──┬◡ノ(° -°ノ)");
                }
                else if (RoomMessagePatterns.ElementAt(2).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "(ケ¬◟¬)ケ");
                }
                else if (RoomMessagePatterns.ElementAt(3).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "ლ(ಠ益ಠლ)");
                }
                else if (RoomMessagePatterns.ElementAt(4).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, new string[] { "♪┏(・o・)┛♪", "♪┗ ( ・o・) ┓♪", "♪┏ (・o・) ┛♪", "♪┗ (・o・ ) ┓♪", "♪┏(・o・)┛♪" }.RandomElement());
                }
                else if (RoomMessagePatterns.ElementAt(5).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, "ಠ_ಠ");
                }
                else if (RoomMessagePatterns.ElementAt(6).IsMatch(message.Content))
                {
                    jabbrClient.SayToRoom(message.Room, @"¯\_(ツ)_/¯");
                }
            }
        }
コード例 #26
0
ファイル: HelpSprocket.cs プロジェクト: rbwestmoreland/Jabbot
 public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
 {
     base.Handle(message, jabbrClient);
 }
コード例 #27
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var location = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content).Groups[3].Value;
                var formattedInformation = GetWeather(location);
                jabbrClient.SayToRoom(message.Room, formattedInformation);
            }
        }
コード例 #28
0
ファイル: CoinSprocket.cs プロジェクト: rbwestmoreland/Jabbot
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                jabbrClient.SayToRoom(message.Room, Coin.RandomElement());
            }
        }
コード例 #29
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                foreach (var rule in Rules)
                {
                    jabbrClient.SayToRoom(message.Room, rule);
                }
            }
        }
コード例 #30
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match = PrivateMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var choices = match.Groups[1].Value.Split(new string[] { "\"" }, StringSplitOptions.None).Where(s => !string.IsNullOrWhiteSpace(s));
                jabbrClient.SayToRoom(message.Room, choices.RandomElement());
            }
        }
コード例 #31
0
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match = RoomMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var achievement = Uri.EscapeUriString(match.Groups[2].Value);
                var email = Uri.EscapeUriString(match.Groups[5].Value);

                var url = String.Format(Url, achievement);

                if (!String.IsNullOrWhiteSpace(email))
                {
                    url += String.Format("?email={0}.png", email);
                }

                jabbrClient.SayToRoom(message.Room, url);
            }
        }
コード例 #32
0
ファイル: MathSprocket.cs プロジェクト: rbwestmoreland/Jabbot
        public override void Handle(IRoomMessage message, IJabbrClient jabbrClient)
        {
            base.Handle(message, jabbrClient);

            if (this.CanHandle(message))
            {
                var match = PrivateMessagePatterns.First(p => p.Match(message.Content).Success).Match(message.Content);
                var url = string.Format("http://www.google.com/ig/calculator?hl=en&q={0}", Uri.EscapeDataString(match.Groups[3].Value));

                var client = new HttpClient();
                client.Timeout = new TimeSpan(0, 0, 2);
                client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-us"));
                client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8"));
                var request = client.GetAsync(url).ContinueWith(requestTask =>
                {
                    if (requestTask.Result.IsSuccessStatusCode)
                    {
                        requestTask.Result.Content.ReadAsStringAsync().ContinueWith(readTask =>
                        {
                            dynamic json = JsonConvert.DeserializeObject(readTask.Result);
                            string solution = json.rhs;
                            jabbrClient.SayToRoom(message.Room, solution ?? "Does not compute.");
                        });
                    }
                    else
                    {
                        jabbrClient.SayToRoom(message.Room, "Does not compute.");
                    }
                });
            }
        }