Example #1
0
        public RolesInlineCommand(InlineQuery q)
        {
            User u = q.From;

            Command = "roles";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    Player p;
                    if (String.IsNullOrWhiteSpace(q.Query))
                    {
                        p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                        if (p == null)
                        {
                            //remove the command
                            Command = "";
                            return;
                        }
                    }
                    else
                    {
                        p = db.Players.FirstOrDefault(x => x.UserName.Equals(q.Query.Substring(1).Trim(), StringComparison.CurrentCultureIgnoreCase));
                        if (p == null)
                        {
                            Description = $"Erro encontrando jogador com username {q.Query} para mostrar seus {Command}";
                            Content     = $"Erro encontrando jogador com username {q.Query} para mostrar seus {Command}";
                            return;
                        }
                        Command += $" ({p.Name})";
                    }
                    Description = $"Obtem os papΓ©is que {p.Name} mais jogou";

                    var totalRoles = db.PlayerRoles(p.TelegramId).Sum(x => x.times);
                    var roleInfo   = db.PlayerRoles(p.TelegramId).ToList().OrderByDescending(x => x.times).Take(5);
                    Content += $"\nPapΓ©is que <a href=\"https://telegram.me/{p.UserName}\">{p.Name.FormatHTML()}</a> mais jogou:\n";
                    foreach (var a in roleInfo)
                    {
                        var role = Commands.GetLocaleString(a.role, p.Language);
                        Content += $"<code>{a.times.ToString().PadLeft(3)} ({(((double)a.times/(double)totalRoles)*100.0).ToString("#0.0").PadLeft(4)}%)</code> {role.ToBold()}\n";
                    }
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load roles: " + e.Message;
            }
        }
Example #2
0
        public JsonResult PlayerStats(int pid)
        {
            using (var DB = new WWContext())
            {
                var p = DB.Players.FirstOrDefault(x => x.TelegramId == pid);
                if (p == null)
                {
                    return(Json("", JsonRequestBehavior.AllowGet));
                }
                var gamesPlayed  = p.GamePlayers.Count();
                var won          = p.GamePlayers.Count(x => x.Won);
                var lost         = gamesPlayed - won;
                var survived     = p.GamePlayers.Count(x => x.Survived);
                var roleInfo     = DB.PlayerRoles(pid).ToList();
                var killed       = DB.PlayerMostKilled(pid).FirstOrDefault();
                var killedby     = DB.PlayerMostKilledBy(pid).FirstOrDefault();
                var killedlink   = killed != null ? $"<a href='../Player/{killed.TelegramId}'>{killed.Name}</a>" : "No kills?";
                var killedbylink = killedby != null ? $"<a href='../Player/{killedby.TelegramId}'>{killedby.Name}</a>" : "Not killed?";
                var reply        =
                    "<table class=\"table table-hover\"><tbody>" +
                    $"<tr><td>Games played total</td><td><b>{gamesPlayed}</b></td></tr>" +
                    $"<tr><td>Games won</td><td><b>{won}</td><td>{(won * 100 / gamesPlayed)}%</b></td></tr>" +
                    $"<tr><td>Games lost</td><td><b>{lost}</td><td>{(lost * 100 / gamesPlayed)}%</b></td></tr>" +
                    $"<tr><td>Games survived</td><td><b>{survived}</td><td>{(survived * 100 / gamesPlayed)}%</b></td></tr>" +
                    $"<tr><td>Most common role</td><td><b>{roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "WHAT? YOU HAVEN'T PLAYED?"}</td><td>{roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.times ?? 0} times</b></td></tr>" +
                    $"<tr><td>Most killed</td><td><b>{killedlink}</td><td>{killed.times} times</b></td></tr>" +
                    $"<tr><td>Most killed by</td><td><b>{killedbylink}</td><td>{killedby.times} times</b></td></tr>" +
                    "</tbody></table>";



                return(Json(reply, JsonRequestBehavior.AllowGet));
            }
        }
Example #3
0
 public JsonResult PlayerStats(int pid, bool json = false)
 {
     using (var DB = new WWContext())
     {
         var p = DB.Players.FirstOrDefault(x => x.TelegramId == pid);
         if (p == null || p.GamePlayers.Count == 0)
         {
             return(Json("", JsonRequestBehavior.AllowGet));
         }
         var gamesPlayed  = p.GamePlayers.Count();
         var won          = p.GamePlayers.Count(x => x.Won);
         var lost         = gamesPlayed - won;
         var survived     = p.GamePlayers.Count(x => x.Survived);
         var roleInfo     = DB.PlayerRoles(pid).ToList();
         var killed       = DB.PlayerMostKilled(pid).FirstOrDefault();
         var killedby     = DB.PlayerMostKilledBy(pid).FirstOrDefault();
         var killedlink   = killed != null ? $"<a href='../Player/{killed.TelegramId}'>{killed.Name}</a>" : "No kills?";
         var killedbylink = killedby != null ? $"<a href='../Player/{killedby.TelegramId}'>{killedby.Name}</a>" : "Not killed?";
         if (!json)
         {
             var reply =
                 "<table class=\"table table-hover\"><tbody>" +
                 $"<tr><td>Games played total</td><td><b>{gamesPlayed}</b></td></tr>" +
                 $"<tr><td>Games won</td><td><b>{won}</td><td>{(won * 100 / gamesPlayed)}%</b></td></tr>" +
                 $"<tr><td>Games lost</td><td><b>{lost}</td><td>{(lost * 100 / gamesPlayed)}%</b></td></tr>" +
                 $"<tr><td>Games survived</td><td><b>{survived}</td><td>{(survived * 100 / gamesPlayed)}%</b></td></tr>" +
                 $"<tr><td>Most common role</td><td><b>{roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "WHAT? YOU HAVEN'T PLAYED?"}</td><td>{roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.times ?? 0} times</b></td></tr>" +
                 $"<tr><td>Most killed</td><td><b>{killedlink}</td><td>{killed.times} times</b></td></tr>" +
                 $"<tr><td>Most killed by</td><td><b>{killedbylink}</td><td>{killedby.times} times</b></td></tr>" +
                 "</tbody></table>";
             return(Json(reply, JsonRequestBehavior.AllowGet));
         }
         else
         {
             var reply = new
             {
                 gamesPlayed    = gamesPlayed,
                 won            = new { total = won, percent = won * 100 / gamesPlayed },
                 lost           = new { total = lost, percent = lost * 100 / gamesPlayed },
                 survived       = new { total = survived, percent = survived * 100 / gamesPlayed },
                 mostCommonRole = roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "WHAT? YOU HAVEN'T PLAYED?",
                 mostKilled     = killed != null ? new { name = killed.Name, id = killed.TelegramId, link = killedlink, times = killed.times } : null,
                 mostKilledBy   = killedby != null ? new { name = killedby.Name, id = killedby.TelegramId, link = killedbylink, times = killedby.times } : null,
                 //achievements = p.Achievements // achievements aren't stored this way anymore anyway
             };
             return(Json(reply, JsonRequestBehavior.AllowGet));
         }
     }
 }
Example #4
0
        public StatsInlineCommand(User u)
        {
            Description = "Get personal stats";
            Command     = "stats";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    var p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                    if (p == null)
                    {
                        //remove the command
                        Command = "";
                        return;
                    }

                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(u.Id).ToList();
                    var killed      = db.PlayerMostKilled(u.Id).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(u.Id).FirstOrDefault();
                    var ach         = (Achievements)(p.Achievements ?? 0);
                    var count       = ach.GetUniqueFlags().Count();

                    Content = String.IsNullOrWhiteSpace(u.Username)
                        ? $"{u.FirstName.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}"
                        : $"<a href=\"https://telegram.me/{u.Username}\">{u.FirstName.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}</a>";
                    Content += $"\n{count.Pad()}Achievements Unlocked!\n" +
                               $"{won.Pad()}Games won ({won*100/gamesPlayed}%)\n" +
                               $"{lost.Pad()}Games lost ({lost*100/gamesPlayed}%)\n" +
                               $"{survived.Pad()}Games survived ({survived*100/gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()}Total Games\n" +
                               $"<code>{killed?.times}</code>\ttimes I've gleefully killed {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\ttimes I've been slaughted by {killedby?.Name.FormatHTML()}";
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
        }
Example #5
0
        public StatsInlineCommand(InlineQuery q)
        {
            User u = q.From;

            Description = "Obtem estatΓ­sticas pessoais\n(Dica: Experimente digitar um @username para consultar seus stats!)";
            Command     = "stats";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    Player p;
                    if (String.IsNullOrWhiteSpace(q.Query))
                    {
                        p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                        if (p == null)
                        {
                            //remove the command
                            Command = "";
                            return;
                        }
                    }
                    else
                    {
                        p = db.Players.FirstOrDefault(x => x.UserName.Equals(q.Query.Substring(1).Trim(), StringComparison.CurrentCultureIgnoreCase));
                        if (p == null)
                        {
                            Description = $"Erro encontrando jogador com username {q.Query} para mostrar seus {Command}";
                            Content     = $"Erro encontrando jogador com username {q.Query} para mostrar seus {Command}";
                            return;
                        }
                        Description = $"Obtem estatΓ­sticas do jogador {p.Name}";
                        Command    += $" ({p.Name})";
                    }

                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(p.TelegramId).ToList();
                    var killed      = db.PlayerMostKilled(p.TelegramId).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(p.TelegramId).FirstOrDefault();
                    var ach         = (Achievements)(p.Achievements ?? 0);
                    var count       = ach.GetUniqueFlags().Count();
                    var totalAch    = Enum.GetValues(typeof(Achievements)).Length;

                    Content = String.IsNullOrWhiteSpace(p.UserName)
                        ? $"{p.Name.FormatHTML()}, {Commands.GetLocaleString(roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role, p.Language) ?? "Noob"}"
                        : $"<a href=\"https://telegram.me/{p.UserName}\">{p.Name.FormatHTML()}, {Commands.GetLocaleString(roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role, p.Language) ?? "Noob"}</a>";
                    Content += $"\n<code>{(count+"/"+ totalAch).PadRight(5)}</code> {Commands.GetLocaleString("AchievementsUnlocked", p.Language)}\n" +
                               $"{won.Pad()} {Commands.GetLocaleString("GamesWon", p.Language)} ({won * 100 / gamesPlayed}%)\n" +
                               $"{lost.Pad()} {Commands.GetLocaleString("GamesLost", p.Language)} ({lost * 100 / gamesPlayed}%)\n" +
                               $"{survived.Pad()} {Commands.GetLocaleString("GamesSurvived", p.Language)} ({survived * 100 / gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()} {Commands.GetLocaleString("TotalGames", p.Language)} \n" +
                               $"<code>{killed?.times}</code>\t{Commands.GetLocaleString("TimesKilled", p.Language)} {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\t{Commands.GetLocaleString("TimesKilledBy", p.Language)} {killedby?.Name.FormatHTML()}";

                    var json = p.CustomGifSet;
                    if (!String.IsNullOrEmpty(json))
                    {
                        var data = JsonConvert.DeserializeObject <CustomGifData>(json);
                        if (data.ShowBadge)
                        {
                            if ((p.DonationLevel ?? 0) >= 100)
                            {
                                Content += "Donation Level: πŸ₯‡";
                            }
                            else if ((p.DonationLevel ?? 0) >= 50)
                            {
                                Content += "Donation Level: πŸ₯ˆ";
                            }
                            else if ((p.DonationLevel ?? 0) >= 10)
                            {
                                Content += "Donation Level: πŸ₯‰";
                            }
                            if (p.Founder ?? false)
                            {
                                Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating</i>";
                            }
                        }
                    }
                    else
                    {
                        if ((p.DonationLevel ?? 0) >= 100)
                        {
                            Content += "Donation Level: πŸ₯‡";
                        }
                        else if ((p.DonationLevel ?? 0) >= 50)
                        {
                            Content += "Donation Level: πŸ₯ˆ";
                        }
                        else if ((p.DonationLevel ?? 0) >= 10)
                        {
                            Content += "Donation Level: πŸ₯‰";
                        }

                        if (p.Founder ?? false)
                        {
                            Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating</i>";
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
        }
Example #6
0
        public StatsInlineCommand(User u)
        {
            Description = "Get personal stats";
            Command     = "stats";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    var p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                    if (p == null)
                    {
                        //remove the command
                        Command = "";
                        return;
                    }

                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(u.Id).ToList();
                    var killed      = db.PlayerMostKilled(u.Id).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(u.Id).FirstOrDefault();
                    var ach         = (Achievements)(p.Achievements ?? 0);
                    var count       = ach.GetUniqueFlags().Count();

                    Content = String.IsNullOrWhiteSpace(u.Username)
                        ? $"{u.FirstName.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}"
                        : $"<a href=\"https://telegram.me/{u.Username}\">{u.FirstName.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}</a>";
                    Content += $"\n{count.Pad()}Achievements Unlocked!\n" +
                               $"{won.Pad()}Games won ({won*100/gamesPlayed}%)\n" +
                               $"{lost.Pad()}Games lost ({lost*100/gamesPlayed}%)\n" +
                               $"{survived.Pad()}Games survived ({survived*100/gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()}Total Games\n" +
                               $"<code>{killed?.times}</code>\ttimes I've gleefully killed {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\ttimes I've been slaughted by {killedby?.Name.FormatHTML()}\n";

                    var json = p.CustomGifSet;
                    if (!String.IsNullOrEmpty(json))
                    {
                        var data = JsonConvert.DeserializeObject <CustomGifData>(json);
                        if (data.ShowBadge)
                        {
                            if ((p.DonationLevel ?? 0) >= 100)
                            {
                                Content += "Donation Level: πŸ₯‡";
                            }
                            else if ((p.DonationLevel ?? 0) >= 50)
                            {
                                Content += "Donation Level: πŸ₯ˆ";
                            }
                            else if ((p.DonationLevel ?? 0) >= 10)
                            {
                                Content += "Donation Level: πŸ₯‰";
                            }
                            if (p.Founder ?? false)
                            {
                                Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating)</i>";
                            }
                        }
                    }
                    else
                    {
                        if ((p.DonationLevel ?? 0) >= 100)
                        {
                            Content += "Donation Level: πŸ₯‡";
                        }
                        else if ((p.DonationLevel ?? 0) >= 50)
                        {
                            Content += "Donation Level: πŸ₯ˆ";
                        }
                        else if ((p.DonationLevel ?? 0) >= 10)
                        {
                            Content += "Donation Level: πŸ₯‰";
                        }

                        if (p.Founder ?? false)
                        {
                            Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating</i>";
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
        }
Example #7
0
        public StatsInlineCommand(User u)
        {
            Description = "Get personal stats";
            Command     = "stats";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    var p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                    if (p == null)
                    {
                        //remove the command
                        Command = "";
                        return;
                    }

                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(u.Id).ToList();
                    var killed      = db.PlayerMostKilled(u.Id).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(u.Id).FirstOrDefault();
                    var ach         = p.NewAchievements == null ? new System.Collections.BitArray(200) : new System.Collections.BitArray(p.NewAchievements);

                    // copy existing achievements to new achievements field
                    var oldAchList = ((Achievements)(p.Achievements ?? 0)).GetUniqueFlags();
                    foreach (var achv in oldAchList)
                    {
                        var newAchv = (AchievementsReworked)Enum.Parse(typeof(AchievementsReworked), achv.ToString());
                        ach.Set(newAchv);
                    }
                    p.NewAchievements = ach.ToByteArray();
                    db.SaveChanges();

                    var count = ach.GetUniqueFlags().Count();

                    Content  = $"<a href='tg://user?id={p.TelegramId}'>{p.Name.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}</a>";
                    Content += $"\n{count.Pad()}Achievements Unlocked!\n" +
                               $"{won.Pad()}Games won ({won*100/gamesPlayed}%)\n" +
                               $"{lost.Pad()}Games lost ({lost*100/gamesPlayed}%)\n" +
                               $"{survived.Pad()}Games survived ({survived*100/gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()}Total Games\n" +
                               $"<code>{killed?.times}</code>\ttimes I've gleefully killed {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\ttimes I've been slaughted by {killedby?.Name.FormatHTML()}\n";

                    var json = p.CustomGifSet;
                    if (!String.IsNullOrEmpty(json))
                    {
                        var data = JsonConvert.DeserializeObject <CustomGifData>(json);
                        if (data.ShowBadge)
                        {
                            if ((p.DonationLevel ?? 0) >= 100)
                            {
                                Content += "Donation Level: πŸ₯‡";
                            }
                            else if ((p.DonationLevel ?? 0) >= 50)
                            {
                                Content += "Donation Level: πŸ₯ˆ";
                            }
                            else if ((p.DonationLevel ?? 0) >= 10)
                            {
                                Content += "Donation Level: πŸ₯‰";
                            }
                            if (p.Founder ?? false)
                            {
                                Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating)</i>";
                            }
                        }
                    }
                    else
                    {
                        if ((p.DonationLevel ?? 0) >= 100)
                        {
                            Content += "Donation Level: πŸ₯‡";
                        }
                        else if ((p.DonationLevel ?? 0) >= 50)
                        {
                            Content += "Donation Level: πŸ₯ˆ";
                        }
                        else if ((p.DonationLevel ?? 0) >= 10)
                        {
                            Content += "Donation Level: πŸ₯‰";
                        }

                        if (p.Founder ?? false)
                        {
                            Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating</i>";
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
        }
Example #8
0
        public static void GetStats(Update u, string[] args)
        {
            //var reply = $"[Global Stats](www.tgwerewolf.com/Stats)\n";
            //if (update.Message.Chat.Type != ChatType.Private)
            //    reply += $"[Group Stats](www.tgwerewolf.com/Stats/Group/{update.Message.Chat.Id}) ({update.Message.Chat.Title})\n";
            //reply += $"[Player Stats](www.tgwerewolf.com/Stats/Player/{update.Message.From.Id}) ({update.Message.From.FirstName})";
            var name     = u.Message.From.FirstName;
            var id       = u.Message.From.Id;
            var username = u.Message.From.Username;

            if (u.Message.ReplyToMessage != null)
            {
                var m = u.Message.ReplyToMessage;
                while (m.ReplyToMessage != null)
                {
                    m = m.ReplyToMessage;
                }
                //check for forwarded message
                name     = m.From.FirstName;
                id       = m.From.Id;
                username = m.From.Username;
                if (m.ForwardFrom != null)
                {
                    id       = m.ForwardFrom.Id;
                    name     = m.ForwardFrom.FirstName;
                    username = m.ForwardFrom.Username;
                }

                /*
                 * var buttons = new List<InlineKeyboardButton[]>
                 * {
                 *  new[]
                 *  {
                 *  new InlineKeyboardButton
                 *  {
                 *      Text = $"{name} Stats",
                 *      Url = "http://www.tgwerewolf.com/Stats/Player/" + id + "?referrer=stats"
                 *  }
                 * }
                 *
                 * };
                 * var menu = new InlineKeyboardMarkup(buttons.ToArray());
                 */
            }
            string Content;

            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    var p = db.Players.FirstOrDefault(x => x.TelegramId == id);
                    if (p == null)
                    {
                        //remove the command
                        throw new Exception("Player has never played a game.");
                    }

                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(id).ToList();
                    var killed      = db.PlayerMostKilled(id).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(id).FirstOrDefault();
                    var ach         = (Achievements)(p.Achievements ?? 0);
                    var count       = ach.GetUniqueFlags().Count();

                    Content = String.IsNullOrWhiteSpace(username)
                        ? $"{name.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}"
                        : $"<a href=\"https://telegram.me/{username}\">{name.FormatHTML()} the {roleInfo.OrderByDescending(x => x.times).FirstOrDefault()?.role ?? "Noob"}</a>";
                    Content += $"\n{count.Pad()}Achievements Unlocked!\n" +
                               $"{won.Pad()}Games won ({won * 100 / gamesPlayed}%)\n" +
                               $"{lost.Pad()}Games lost ({lost * 100 / gamesPlayed}%)\n" +
                               $"{survived.Pad()}Games survived ({survived * 100 / gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()}Total Games\n" +
                               $"<code>{killed?.times}</code>\ttimes I've gleefully killed {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\ttimes I've been slaughted by {killedby?.Name.FormatHTML()}";
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
            Bot.Api.SendTextMessage(u.Message.Chat.Id, Content, parseMode: ParseMode.Html, disableWebPagePreview: true);
        }
Example #9
0
        public StatsInlineCommand(User u)
        {
            Description = "Get personal stats";
            Command     = "stats";
            try
            {
                using (var db = new WWContext())
                {
                    Content = "";
                    //find the player
                    var p = db.Players.FirstOrDefault(x => x.TelegramId == u.Id);
                    if (p == null)
                    {
                        //remove the command
                        Command = "";
                        return;
                    }

                    // var topPlayers = db.Players.OrderByDescending(x => x.Score);
                    var gamesPlayed = p.GamePlayers.Count();
                    var won         = p.GamePlayers.Count(x => x.Won);
                    var lost        = gamesPlayed - won;
                    var survived    = p.GamePlayers.Count(x => x.Survived);
                    var roleInfo    = db.PlayerRoles(u.Id).ToList();
                    var killed      = db.PlayerMostKilled(u.Id).FirstOrDefault();
                    var killedby    = db.PlayerMostKilledBy(u.Id).FirstOrDefault();
                    var ach         = p.Achievements == null ? new System.Collections.BitArray(200) : new System.Collections.BitArray(p.Achievements);
                    var score       = p.Score;
                    var rankEmoji   = "";

                    if (score > 2200)
                    {
                        rankEmoji = " πŸ†";
                    }
                    else if (score > 2000)
                    {
                        rankEmoji = " πŸ’Ž";
                    }
                    else if (score > 1800)
                    {
                        rankEmoji = " πŸ₯‡";
                    }
                    else if (score > 1600)
                    {
                        rankEmoji = " πŸ₯ˆ";
                    }
                    else if (score > 1400)
                    {
                        rankEmoji = " πŸ₯‰";
                    }
                    else if (score > 1200)
                    {
                        rankEmoji = " πŸ”†";
                    }
                    else if (score > 1000)
                    {
                        rankEmoji = " πŸ”…";
                    }

                    var count = ach.GetUniqueFlags().Count();

                    Content  = $"<a href='tg://user?id={p.TelegramId}'>{p.Name.FormatHTML()}, {GetLocaleString(roleInfo.OrderByDescending(x => x.times).FirstOrDefault(x => x.role != "Villager" && x.role != "Mason" && x.role != "Police")?.role, "Spanish.xml") ?? "Noob"}</a>";
                    Content += $"\n{count.Pad()}Logros desbloqueados\n" +
                               $"{score.Pad()}Puntos{rankEmoji}\n" +
                               $"{won.Pad()}Partidas ganadas ({won*100/gamesPlayed}%)\n" +
                               $"{lost.Pad()}Partidas perdidas ({lost*100/gamesPlayed}%)\n" +
                               $"{survived.Pad()}Partidas sobrevividas ({survived*100/gamesPlayed}%)\n" +
                               $"{gamesPlayed.Pad()}Partidas totales\n" +
                               $"<code>{killed?.times}</code>\tveces he matado a {killed?.Name.FormatHTML()}\n" +
                               $"<code>{killedby?.times}</code>\tveces me ha matado {killedby?.Name.FormatHTML()}\n";

                    var json = p.CustomGifSet;
                    if (!String.IsNullOrEmpty(json))
                    {
                        var data = JsonConvert.DeserializeObject <CustomGifData>(json);
                        if (data.ShowBadge)
                        {
                            if ((p.DonationLevel ?? 0) >= 100)
                            {
                                Content += "Donation Level: πŸ₯‡";
                            }
                            else if ((p.DonationLevel ?? 0) >= 50)
                            {
                                Content += "Donation Level: πŸ₯ˆ";
                            }
                            else if ((p.DonationLevel ?? 0) >= 10)
                            {
                                Content += "Donation Level: πŸ₯‰";
                            }
                            if (p.Founder ?? false)
                            {
                                Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating)</i>";
                            }
                        }
                    }
                    else
                    {
                        if ((p.DonationLevel ?? 0) >= 100)
                        {
                            Content += "Donation Level: πŸ₯‡";
                        }
                        else if ((p.DonationLevel ?? 0) >= 50)
                        {
                            Content += "Donation Level: πŸ₯ˆ";
                        }
                        else if ((p.DonationLevel ?? 0) >= 10)
                        {
                            Content += "Donation Level: πŸ₯‰";
                        }

                        if (p.Founder ?? false)
                        {
                            Content += "\nπŸ’Ž FOUNDER STATUS! πŸ’Ž\n<i>(This player donated at least $10USD before there was any reward for donating</i>";
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Content = "Unable to load stats: " + e.Message;
            }
        }