Exemple #1
0
        private Embed Responding(RpsActors authorActor, RpsUserData authorUd, RpsUserData mentionUd, RpsPlayData authorPlayData, RpsPlayData mentionPlayData)
        {
            authorUd.Actor = authorActor;
            int    mentionActor     = (int)mentionUd.Actor;
            string authorMention    = authorPlayData.Mention;
            string mentionedMention = mentionPlayData.Mention;
            string result           =
                $"{mentionedMention} chose {ConvertActorToEmoji(mentionUd.Actor)}\n" +
                $"{authorMention} chose {ConvertActorToEmoji(authorUd.Actor)}\n\n";

            GameState mentionState, authorState;
            string    thumbnailWinner = string.Empty;

            //Responding wins
            if ((mentionActor + 1) % (int)RpsActors.Max == (int)authorActor)
            {
                result      += $"{authorMention} wins! {CoinsInKeyText}";
                authorState  = GameState.Win;
                mentionState = GameState.Lose;

                thumbnailWinner = authorPlayData.ThumbnailIconUrl;
            }
            //Instigator wins
            else if (((int)authorActor + 1) % (int)RpsActors.Max == mentionActor)
            {
                result         += $"{mentionedMention} wins! {CoinsInKeyText}";
                mentionState    = GameState.Win;
                authorState     = GameState.Lose;
                thumbnailWinner = mentionPlayData.ThumbnailIconUrl;
            }
            //Draw
            else
            {
                result      += "Draw game.";
                mentionState = authorState = GameState.Draw;
            }

            ProcessResults(mentionUd, mentionState, result, mentionedMention, out result);
            ProcessResults(authorUd, authorState, result, authorMention, out result);

            _usersActiveVs.Remove(authorUd);
            _usersActiveVs.Remove(mentionUd);

            if (_usersActiveVs.Count == 0)
            {
                _timerVs.Stop();
            }

            return(new EmbedBuilder()
                   .WithAuthor(TitleBuilder(authorPlayData))
                   .WithTitle("*GAME*")
                   .WithThumbnailUrl(thumbnailWinner)
                   .WithColor(Color.DarkOrange)
                   .WithDescription(result).Build());
        }
Exemple #2
0
        public Embed Play(RpsPlayData authorData, RpsPlayData?mentionData, RpsActors botActor = RpsActors.Max)
        {
            RpsActors rpsActor = ConvertInputIntoActor(authorData.Input);

            if (rpsActor == RpsActors.Max)
            {
                return(new EmbedBuilder().WithDescription("Wrong input. \nType either rock(r), paper(p), or scissors(s) to play.").Build());
            }

            if (mentionData.HasValue)
            {
                return(VsPlayer(authorData, mentionData.Value));
            }

            return(VsBot(authorData, botActor));
        }
Exemple #3
0
        private string ConvertActorToEmoji(RpsActors actor)
        {
            switch (actor)
            {
            case RpsActors.Rock:
                return(":rock:");

            case RpsActors.Paper:
                return(":roll_of_paper:");

            case RpsActors.Scissors:
                return(":scissors:");
            }

            return(string.Empty);
        }
Exemple #4
0
        private Embed Challenging(RpsActors playerActor, RpsUserData authorUd, RpsUserData mentionUd, RpsPlayData authorPlayData, RpsPlayData mentionPlayData)
        {
            authorUd.UserIdVs = mentionUd.UserId;
            authorUd.Actor    = playerActor;
            authorUd.DateVs   = DateTime.Now.AddDays(1);
            int i = FindIndex(authorUd.UserId);

            _users[i] = authorUd;
            _fileSystem.UpdateFile(authorUd);

            mentionUd.UserIdVs = authorUd.UserId;
            mentionUd.Actor    = RpsActors.Max;
            mentionUd.DateVs   = authorUd.DateVs;
            i         = FindIndex(mentionUd.UserId);
            _users[i] = mentionUd;
            _fileSystem.UpdateFile(mentionUd);

            _usersActiveVs.Add(authorUd);
            _usersActiveVs.Add(mentionUd);

            if (!_timerVs.Enabled)
            {
                _timerVs.Start();
            }

            string rps =
                $"{ConvertActorToEmoji(RpsActors.Rock)}{ConvertActorToEmoji(RpsActors.Paper)}{ConvertActorToEmoji(RpsActors.Scissors)}";

            return(new EmbedBuilder()
                   .WithTitle($"{rps}*GET READY FOR THE NEXT BATTLE*{rps}")
                   .WithAuthor(TitleBuilder(authorPlayData))
                   .WithDescription($"{authorPlayData.Mention} " +
                                    "**VS** " +
                                    $"{mentionPlayData.Mention}\n\n" +
                                    $"{authorPlayData.Username} has already made a move.")
                   .WithFields(new EmbedFieldBuilder {
                IsInline = true, Name = "Ends", Value = authorUd.DateVs
            })
                   .WithColor(Color.DarkOrange).Build());
        }
Exemple #5
0
        private Embed VsBot(RpsPlayData playData, RpsActors botActor)
        {
            string userMention = playData.Mention;

            Random    random      = new Random();
            int       bot         = botActor == RpsActors.Max ? random.Next(0, (int)RpsActors.Max) : (int)botActor;
            RpsActors playerActor = ConvertInputIntoActor(playData.Input);
            int       player      = (int)playerActor;
            string    competition =
                $"{userMention} threw {ConvertActorToEmoji(playerActor)}\nBot threw {ConvertActorToEmoji((RpsActors)bot)}\n\n";

            if (!Exists(playData.UserId, out RpsUserData ud))
            {
                ud = CreateUser(playData);
            }

            GameState state;
            string    processed = string.Empty;

            if ((bot + 1) % (int)RpsActors.Max == player)
            {
                state     = GameState.Win;
                processed = CoinsInKeyText;
            }
            else if ((player + 1) % (int)RpsActors.Max == bot)
            {
                state = GameState.Lose;
            }
            else
            {
                state = GameState.Draw;
            }

            ud.Actor = playerActor;
            ProcessResults(ud, state, processed, userMention, out processed);

            Color             color = new Color(0, 0, 0);
            EmbedFieldBuilder field = null;
            string            icon  = "";

            switch (state)
            {
            case GameState.Win:
                processed = processed.Replace(userMention ?? string.Empty, "");
                field     = new EmbedFieldBuilder {
                    IsInline = true, Name = "You won", Value = processed
                };
                icon = _config[Statics.RpsLoseImage];
                break;

            case GameState.Lose:
                color     = Color.Red;
                processed = processed.Replace(userMention ?? string.Empty, "");
                field     = new EmbedFieldBuilder {
                    IsInline = true, Name = "You lost", Value = processed
                };
                icon = _config[Statics.RpsWinImage];
                break;

            case GameState.Draw:
                color = Color.Gold;
                field = new EmbedFieldBuilder {
                    IsInline = true, Name = "Draw game", Value = "+0 Rings"
                };
                icon = _config[Statics.RpsDrawImage];
                break;
            }

            return(new EmbedBuilder()
                   .WithDescription(competition)
                   .WithAuthor(TitleBuilder(playData))
                   .WithTitle("ARCADE MODE")
                   .WithColor(color)
                   .WithFields(field)
                   .WithThumbnailUrl(icon)
                   .Build());
        }