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); } }
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))); } } }
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); } } } }
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(); } }
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 }); } }
/// <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 { } }
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); }
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; } }