public static void Stats(Message msg, string[] args)
 {
     using (var db = new CrimDanceDb())
     {
         var isGroup   = !(msg.Chat.Type == ChatType.Private);
         var player    = msg.ReplyToMessage?.From ?? msg.From;
         var playerId  = player.Id;
         var temp      = db.Players.FirstOrDefault(x => x.TelegramId == playerId).Achievements ?? 0;
         var achv      = (Achievements)temp;
         var achvCount = achv.GetUniqueFlags().Count();
         if (!db.GamePlayers.Any(x => x.Player.TelegramId == playerId))
         {
             msg.Reply(GetTranslation("StatsHaveNotPlayed", GetLanguage(playerId)));
             return;
         }
         var playerName    = $"{player.GetName()} (<code>{playerId}</code>)";
         int numOfWins     = db.GetNumOfWins(playerId).First().Value;
         var numOfGames    = db.GetPlayerNumOfGames(playerId).First().Value;
         var numOfCrimWins = db.getCrimWinTimes(playerId).First().Value;
         var numOfDogWins  = db.getDogWinTimes(playerId).First().Value;
         var send          = GetTranslation("StatsDetails", GetLanguage(isGroup == true ? msg.Chat.Id : playerId),
                                            playerName,
                                            achvCount.ToBold(),
                                            numOfGames.ToBold(),
                                            $"{numOfWins} ({Math.Round((double)numOfWins * 100 / numOfGames, 0)}%)".ToBold(),
                                            $"{numOfGames - numOfWins} ({Math.Round((double)(numOfGames - numOfWins) * 100 / numOfGames, 0)}%)".ToBold(),
                                            numOfCrimWins.ToBold(),
                                            numOfDogWins.ToBold()
                                            );
         msg.Reply(send);
     }
 }
示例#2
0
        public static void NextGame(Message msg, string[] args)
        {
            if (msg.Chat.Type == ChatType.Private)
            {
                return;
            }
            var grpId = msg.Chat.Id;

            using (var db = new CrimDanceDb())
            {
                var dbGrp = db.Groups.FirstOrDefault(x => x.GroupId == grpId);
                if (dbGrp != null)
                {
                    var notified = db.NotifyGames.FirstOrDefault(x => x.GroupId == grpId && x.UserId == msg.From.Id);
                    if (notified != null)
                    {
                        Bot.Send(msg.From.Id, GetTranslation("AlreadyInWaitingList", GetLanguage(msg.From.Id)));
                        return;
                    }
                    else
                    {
                    }
                    db.Database.ExecuteSqlCommand($"INSERT INTO NotifyGame VALUES ({msg.From.Id}, {msg.Chat.Id})");
                    db.SaveChanges();
                    Bot.Send(msg.From.Id, GetTranslation("NextGame", GetLanguage(msg.From.Id)));
                }
            }
        }
示例#3
0
        public static void Sql(Message msg, string[] args)
        {
            if (args.Length == 1)
            {
                msg.Reply("You must enter a sql query.");
                return;
            }
            using (var db = new CrimDanceDb())
            {
                var conn = db.Database.Connection;
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                string raw = "";

                var queries = args[1].Split(';');
                foreach (var sql in queries)
                {
                    using (var comm = conn.CreateCommand())
                    {
                        comm.CommandText = sql;
                        if (string.IsNullOrEmpty(sql))
                        {
                            continue;
                        }
                        var reader = comm.ExecuteReader();
                        var result = "";
                        if (reader.HasRows)
                        {
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                raw += $"<code>{reader.GetName(i).FormatHTML()}</code>" + (i == reader.FieldCount - 1 ? "" : " - ");
                            }
                            result += raw + Environment.NewLine;
                            raw     = "";
                            while (reader.Read())
                            {
                                for (int i = 0; i < reader.FieldCount; i++)
                                {
                                    raw += (reader.IsDBNull(i) ? "<i>NULL</i>" : $"<code>{reader[i].ToString().FormatHTML()}</code>") + (i == reader.FieldCount - 1 ? "" : " - ");
                                }
                                result += raw + Environment.NewLine;
                                raw     = "";
                            }
                        }

                        result += reader.RecordsAffected == -1 ? "" : (reader.RecordsAffected + " records affected");
                        result  = !String.IsNullOrEmpty(result) ? result : (sql.ToLower().StartsWith("select") ? "Nothing found" : "Done.");
                        msg.Reply(result);
                    }
                }
            }
        }
示例#4
0
 public static void SetLanguage(long chatId, string lang)
 {
     using (var db = new CrimDanceDb())
     {
         var grp = db.Groups.FirstOrDefault(x => x.GroupId == chatId);
         if (grp == null)
         {
             return;
         }
         grp.Language = lang;
         db.SaveChanges();
     }
 }
示例#5
0
 public static void SetLanguage(int userId, string lang)
 {
     using (var db = new CrimDanceDb())
     {
         var user = db.Players.FirstOrDefault(x => x.TelegramId == userId);
         if (user == null)
         {
             return;
         }
         user.Language = lang;
         db.SaveChanges();
     }
 }
 public static void Achievements(Message msg, string[] args)
 {
     using (var db = new CrimDanceDb())
     {
         var p        = db.Players.FirstOrDefault(x => x.TelegramId == msg.From.Id);
         var temp     = p.Achievements ?? 0;
         var achv     = (Achievements)temp;
         var lang     = GetLanguage(msg.From.Id);
         var achvList = achv.GetUniqueFlags().ToList();
         var msg1     = $"{GetTranslation("AchievementsGot", lang, achvList.Count)}\n\n";
         msg1 = achvList.Aggregate(msg1, (current, a) => current + $"{a.GetAchvName(lang).ToBold()}\n{a.GetAchvDescription(lang)}\n\n");
         var noAchvList = achv.GetUniqueFlags(true).ToList();
         var msg2       = $"{GetTranslation("AchievementsLack", lang, noAchvList.Count)}\n\n";
         msg2 = noAchvList.Aggregate(msg2, (current, a) => current + $"{a.GetAchvName(lang).ToBold()}\n{a.GetAchvDescription(lang)}\n\n");
         msg.ReplyPM(new[] { msg1, msg2 });
     }
 }
示例#7
0
 /// <summary>
 /// Get the language for a chat. May be used for both players and groups
 /// </summary>
 public static string GetLanguage(long id)
 {
     using (var db = new CrimDanceDb())
     {
         Player p   = null;
         var    grp = db.Groups.FirstOrDefault(x => x.GroupId == id);
         if (grp == null)
         {
             p = db.Players.FirstOrDefault(x => x.TelegramId == id);
         }
         if (p != null && String.IsNullOrEmpty(p.Language))
         {
             p.Language = "English";
             db.SaveChanges();
         }
         return(grp?.Language ?? p?.Language ?? "English");
     }
 }
        public static void Config(Message msg, string[] args)
        {
            var id = msg.Chat.Id;

            //make sure the group is in the database
            using (var db = new CrimDanceDb())
            {
                var grp = db.Groups.FirstOrDefault(x => x.GroupId == id);
                if (grp == null)
                {
                    grp = Helper.MakeDefaultGroup(msg.Chat);
                    db.Groups.Add(grp);
                }

                grp.UserName = msg.Chat.Username;
                grp.Name     = msg.Chat.Title;
                db.SaveChanges();
            }

            var menu = Handler.GetConfigMenu(msg.Chat.Id);

            Bot.Send(msg.From.Id, GetTranslation("WhatToDo", GetLanguage(msg.From.Id)), replyMarkup: menu);
        }
        public static void ChangeGroupLang(Message msg, string[] args)
        {
            if (args == null)
            {
                return;
            }
            var lang = args[1];

            try
            {
                using (var db = new CrimDanceDb())
                {
                    var p = db.Groups.FirstOrDefault(x => x.GroupId == msg.Chat.Id);
                    if (p != null)
                    {
                        p.Language = lang;
                        db.SaveChanges();
                        Bot.Send(msg.Chat.Id, "OK");
                    }
                }
            }
            catch { }
        }
示例#10
0
        public static void SetLang(Message msg, string[] args)
        {
            var id = msg.From.Id;

            //make sure the user is in the database
            using (var db = new CrimDanceDb())
            {
                var user = db.Players.FirstOrDefault(x => x.TelegramId == id);
                if (user == null)
                {
                    user = Helper.MakeDefaultPlayer(msg.From);
                    db.Players.Add(user);
                }

                user.UserName = msg.From.Username;
                user.Name     = msg.From.FirstName;
                db.SaveChanges();
            }

            var menu = Handler.GetConfigLangMenu(msg.From.Id, true);

            Bot.Send(msg.From.Id, GetTranslation("ChoosePMLanguage", GetLanguage(msg.From.Id)), replyMarkup: menu);
        }
示例#11
0
        public static void HandleMessage(Message msg)
        {
            switch (msg.Type)
            {
            case MessageType.Text:
                string   text = msg.Text;
                string[] args = text.Contains(' ')
                                    ? new[] { text.Split(' ')[0].ToLower(), text.Remove(0, text.IndexOf(' ') + 1) }
                                    : new[] { text.ToLower(), null };
                if (args[0].EndsWith('@' + Bot.Me.Username.ToLower()))
                {
                    args[0] = args[0].Remove(args[0].Length - Bot.Me.Username.Length - 1);
                }
                if (msg.Text.StartsWith("/"))
                {
                    args[0] = args[0].Substring(1);
                    var cmd = Bot.Commands.FirstOrDefault(x => x.Trigger == args[0]);
                    if (cmd != null)
                    {
                        if (new[] { ChatType.Supergroup, ChatType.Group }.Contains(msg.Chat.Type))
                        {
                            using (var db = new CrimDanceDb())
                            {
                                var DbGroup = db.Groups.FirstOrDefault(x => x.GroupId == msg.Chat.Id);
                                if (DbGroup == null)
                                {
                                    DbGroup = Helper.MakeDefaultGroup(msg.Chat);
                                    db.Groups.Add(DbGroup);
                                    db.SaveChanges();
                                }
                            }
                        }
                        if (cmd.GroupOnly && !new[] { ChatType.Supergroup, ChatType.Group }.Contains(msg.Chat.Type))
                        {
                            msg.Reply("This command can only be used in groups!");
                            return;
                        }

                        if (cmd.AdminOnly && !Helper.IsGroupAdmin(msg))
                        {
                            msg.Reply("You aren't a group admin!");
                            return;
                        }

                        if (cmd.DevOnly && !Constants.Dev.Contains(msg.From.Id))
                        {
                            msg.Reply("You aren't a bot dev!");
                            return;
                        }

                        cmd.Method.Invoke(msg, args);
                        return;
                    }
                }
                if (msg.Chat.Type == ChatType.Supergroup && msg.Text.StartsWith("/startgame"))
                {
                    // nothing
                }
                else if (msg.Text.StartsWith("/chatid"))
                {
                    msg.Reply($"{msg.Chat.Id}");
                }
                else if (msg.Text.StartsWith("/join"))
                {
                    var g = Bot.Gm.GetGameByChatId(msg.Chat.Id);
                }
                break;

            case MessageType.SuccessfulPayment:
                var randomRef = Guid.NewGuid().ToString();
                randomRef = $"#crim_{randomRef.Substring(randomRef.Length - 12)}";
                using (var db = new CrimDanceDb())
                {
                    var donate = new Donation
                    {
                        TelegramId   = msg.From.Id,
                        Amount       = msg.SuccessfulPayment.TotalAmount / 100,
                        Reference    = randomRef,
                        DonationTime = DateTime.UtcNow
                    };
                    db.Donations.Add(donate);
                    db.SaveChanges();
                }
                // notify user successful donation, provide reference code for checking in case
                msg.Reply(GetTranslation("DonateSuccessful", GetLanguage(msg.From.Id), randomRef));
                // log who, how much, when and ref code to log group
                Bot.Send(Constants.LogGroupId, $"Donation from user <a href='tg://user?id={msg.From.Id}'>{msg.From.FirstName.FormatHTML()}</a>.\nAmount: {msg.SuccessfulPayment.TotalAmount / 100} HKD\nReference: {randomRef}");
                break;
            }
        }