public static void AllowStop(ulong id) { if (SmashDatabase.HasUser(id)) { SmashDatabase.Data[id].RatedBy.Add(0); } }
public async Task ConfirmStop(ulong id) { UserEntry entry = SmashDatabase.GetEntry(id); short score = 0; if (!entry.RatedBy.Contains(0)) { Logger.Log("User not marked!", "ConfirmStopSoP", LogSeverity.Error); } if (entry.Smashes != 0) { score = (short)Math.Round(entry.Smashes / (decimal)(entry.Smashes + entry.Passes) * 100, 0, MidpointRounding.AwayFromZero); } var embed = new EmbedBuilder(); embed.WithTitle("Smash Or Pass"); embed.WithDescription($"{entry.Name} ends his game!"); embed.AddInlineField(entry.Smashes.ToString(), "Smashes"); embed.AddInlineField(entry.Passes.ToString(), "Passes"); embed.AddField(CommentScore(score, entry.Name, score < 50 ? "passed" : "smashed"), $"({score}%)"); embed.WithImageUrl(entry.Url); embed.WithColor(score > 50 ? new Color(0, 165, 249) : new Color(212, 12, 00)); await Context.Channel.SendMessageAsync("", false, embed); SmashDatabase.RemoveEntry(entry.Id); Logger.Log($"Ending SoP on user {entry.Name}", "ConfirmStopSoP", LogSeverity.Info); }
public static void ListAll() { foreach (var entry in SmashDatabase.Data) { DisplayPlayerScore(SmashDatabase.GetEntry(entry.Key)); } }
public static void List(string[] userNames) { foreach (var entry in SmashDatabase.Data) { if (userNames.Contains(entry.Value.Name)) { DisplayPlayerScore(SmashDatabase.GetEntry(entry.Key)); } } }
public static void Score(ulong id) { foreach (var entry in SmashDatabase.Data) { if (entry.Key != id) { continue; } DisplayPlayerScore(SmashDatabase.GetEntry(id)); return; } }
public async Task Pass([Optional] string target) { if (string.IsNullOrEmpty(target)) { Logger.Log("No user specified", "PassSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("Tell me who you want to pass by writing !pass {@user}"); return; } ulong id = Convert.ToUInt64(target.Substring(2, target.Length - 3).Replace("!", string.Empty)); UserEntry entry = null; if (!SmashDatabase.HasUser(id)) { Logger.Log("User not in database!", "PassSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("This user did not start his Smash Or Pass!"); return; } entry = SmashDatabase.GetEntry(id); if (entry.RatedBy.Contains(Context.User.Id)) { Logger.Log("User has already voted!", "PassSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync($"You have already rated {entry.Name}. To see current results write: !score @{entry.Name}"); return; } entry.Passes++; entry.RatedBy.Add(Context.User.Id); SmashDatabase.UpdateEntry(entry); var embed = new EmbedBuilder(); embed.WithTitle("Smash Or Pass"); embed.WithDescription($"{Context.User.Username} passed {entry.Name}!"); embed.AddInlineField(entry.Smashes.ToString(), "Total Smashes"); embed.AddInlineField(entry.Passes.ToString(), "Total Passes"); embed.WithImageUrl(entry.Url); embed.WithColor(new Color(12, 212, 00)); await Context.Channel.SendMessageAsync("", false, embed); Logger.Log($"User {Context.User.Username} passed {entry.Name}", "PassSoP", LogSeverity.Info); }
public async Task Start([Optional] string url) { if (string.IsNullOrEmpty(url)) { if (Context.Message.Attachments.Count > 0) { url = Context.Message.Attachments.First().Url; } else { Logger.Log("No photo attached!", "StartSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("Send me your photo to start!"); return; } } if (!IsImage(url)) { Logger.Log($"{MimeTypes.GetMimeType(url)} is not a photo!", "StartSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("Send me your photo to start!"); return; } var embed = new EmbedBuilder(); embed.WithTitle("Smash Or Pass"); embed.WithDescription($"{Context.User.Username} has started Smash Or Pass!"); embed.AddInlineField($"!smash @{Context.User.Username}", "Vote to smash"); embed.AddInlineField($"!pass @{Context.User.Username}", "Vote to pass"); embed.WithImageUrl(url); embed.WithColor(new Color(104, 44, 191)); await Context.Channel.SendMessageAsync("", false, embed); Logger.Log($"Starting SoP on user {Context.User.Username}", "StartSoP", LogSeverity.Info); SmashDatabase.AddEntry(new UserEntry() { Id = Context.User.Id, Url = url, Name = Context.User.Username }); }
static void Main(string[] args) { string tokenDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\secret.token"; string token = string.Empty; Logger.Log($"Token file location: {tokenDir}", "Init", LogSeverity.Info); if (!File.Exists(tokenDir)) { Logger.Log("No token found! Aborting...", "Init", LogSeverity.Critical); System.Threading.Thread.Sleep(3000); } try { token = File.ReadAllText(tokenDir); } catch (Exception e) { Logger.Log($"Exception occured while reading file: {e.Message}", "Init", LogSeverity.Critical); return; } if (string.IsNullOrEmpty(token)) { Logger.Log($"Empty token", "Init", LogSeverity.Critical); return; } Logger.Log($"Token imported", "Init", LogSeverity.Info); Bot bot = new Bot(token); SmashDatabase.Init(); Task.Run(bot.StartBot); while (true) { ConsoleCommands.Parse(Console.ReadLine()); } }
public async Task Stop() { ulong id = Context.User.Id; UserEntry entry = null; if (!SmashDatabase.HasUser(id)) { Logger.Log("User not in database!", "StopSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("You can't end something, that didn't start!"); return; } entry = SmashDatabase.GetEntry(id); short score = 0; if (entry.Smashes != 0) { score = (short)Math.Round(entry.Smashes / (decimal)(entry.Smashes + entry.Passes) * 100, 0, MidpointRounding.AwayFromZero); } var embed = new EmbedBuilder(); embed.WithTitle("Smash Or Pass"); embed.WithDescription($"{Context.User.Username} ends his game!"); embed.AddInlineField(entry.Smashes.ToString(), "Smashes"); embed.AddInlineField(entry.Passes.ToString(), "Passes"); embed.AddField(CommentScore(score, entry.Name, score < 50 ? "passed" : "smashed"), $"({score}%)"); embed.WithImageUrl(entry.Url); embed.WithColor(score > 50 ? new Color(0, 165, 249) : new Color(212, 12, 00)); await Context.Channel.SendMessageAsync("", false, embed); SmashDatabase.RemoveEntry(entry.Id); Logger.Log($"Ending SoP on user {entry.Name}", "EndSoP", LogSeverity.Info); }
public async Task Score([Optional] string target) { if (string.IsNullOrEmpty(target)) { Logger.Log("No user specified", "ScoreSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("Tell me whose score you want to see by writing !score {@user}"); return; } ulong id = Convert.ToUInt64(target.Substring(2, target.Length - 3)); UserEntry entry = null; if (!SmashDatabase.HasUser(id)) { Logger.Log("User not in database!", "ScoreSoP", LogSeverity.Error); await Context.Channel.SendMessageAsync("This user did not start his Smash Or Pass!"); return; } entry = SmashDatabase.GetEntry(id); var embed = new EmbedBuilder(); embed.WithTitle("Smash Or Pass"); embed.WithDescription($"{entry.Name} score"); embed.AddInlineField(entry.Smashes.ToString(), "Smashes"); embed.AddInlineField(entry.Passes.ToString(), "Passes"); embed.WithImageUrl(entry.Url); embed.WithColor(new Color(104, 44, 191)); await Context.Channel.SendMessageAsync("", false, embed); Logger.Log($"Show {entry.Name} score", "ScoreSoP", LogSeverity.Info); }