예제 #1
0
 public static void AllowStop(ulong id)
 {
     if (SmashDatabase.HasUser(id))
     {
         SmashDatabase.Data[id].RatedBy.Add(0);
     }
 }
예제 #2
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);
        }
예제 #3
0
 public static void ListAll()
 {
     foreach (var entry in SmashDatabase.Data)
     {
         DisplayPlayerScore(SmashDatabase.GetEntry(entry.Key));
     }
 }
예제 #4
0
 public static void List(string[] userNames)
 {
     foreach (var entry in SmashDatabase.Data)
     {
         if (userNames.Contains(entry.Value.Name))
         {
             DisplayPlayerScore(SmashDatabase.GetEntry(entry.Key));
         }
     }
 }
예제 #5
0
        public static void Score(ulong id)
        {
            foreach (var entry in SmashDatabase.Data)
            {
                if (entry.Key != id)
                {
                    continue;
                }

                DisplayPlayerScore(SmashDatabase.GetEntry(id));
                return;
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        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
            });
        }
예제 #8
0
        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());
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }