Exemple #1
0
        public async Task HelpCommand([Summary("The command to search for.")] string query, [Summary("Whehter or not to force search for a command.")] bool forceCmd = false)
        {
            query = query.ToLower();

            // first search modules
            var moduleResult = Program.DiscordIO.Commands.Modules.FirstOrDefault(m => query.Equals(GetModuleQueryableName(m)));

            if (moduleResult != null && !forceCmd)
            {
                await ReplyAsync(GenerateModuleEmbed(moduleResult));

                return;
            }

            // now search modules
            var cmdResult = Program.DiscordIO.Commands.Search(Context, query);

            if (!cmdResult.IsSuccess || cmdResult.Commands == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the command {(forceCmd ? "" : "or module ")}**{query}**."));

                return;
            }

            var result_ = cmdResult.Commands.Where(c => c.Command.Summary == null || !c.Command.Summary.Contains("(Easter Egg)")).ToList();

            string prefix  = Program.prefix.ToString();
            var    builder = new EmbedBuilder()
            {
                Color = new Color(114, 137, 218),
            };

            sbyte displayedCnt = 0;

            foreach (var match in result_)
            {
                var cmd = match.Command;

                if (shouldDisplay(cmd))
                {
                    ++displayedCnt;
                    builder.AddField(x =>
                    {
                        x.Name     = GenerateCommandTitle(cmd);
                        x.Value    = GenerateHelpText(cmd);
                        x.IsInline = false;
                    });
                }
            }

            if (displayedCnt != 0)
            {
                await ReplyAsync(builder.Build());
            }
            else
            {
                builder.Description = $"Found **{result_.Count}** command{(result_.Count == 1 ? "" : "s")}:";
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed("You do not have permission to view this command."));
            }
        }
Exemple #2
0
        public async Task LinkPlayerCommand(
            [Summary("The player's name.")] string name,
            [Summary("The Discord ID of the player.")] ulong id
            )
        {
            var player = Program.CurLeaderboard.FuzzySearch(name);

            if (player == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the player **{name}**."));

                return;
            }

            var user = Program.DiscordIO.GetUser(id);

            if (user == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"The ID `{id}` is invalid."));

                return;
            }

            player.LinkDiscord(id);
            await player.UpdateRank(true);

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"**{player.IGN}** is now linked to **{user.Username}#{user.DiscriminatorValue}**"));
        }
Exemple #3
0
        public Embed GenerateModuleEmbed(ModuleInfo module)
        {
            var f = new EmbedBuilder();

            f.Title       = module.Name;
            f.Description = module.Summary;
            f.Color       = Discord.Color.Blue;

            bool displayedAny = false;

            foreach (var cmd in module.Commands)
            {
                if (shouldDisplay(cmd))
                {
                    displayedAny = true;
                    f.AddField(GenerateCommandUsage(cmd) + " " + GenerateCommandAliases(cmd), cmd.Summary ?? "No description");
                }
            }

            if (displayedAny)
            {
                return(f.Build());
            }
            else
            {
                return(EmbedHelper.GenerateErrorEmbed("You do not have permission to view the commands under this query."));
            }
        }
Exemple #4
0
        public async Task CreateLinkedPlayerCommand(
            [Summary("The player's name.")] string name,
            [Summary("The ID of the player.")] ulong id,
            [Summary("The displayed TrueSkill of the player.")] double skill = double.NaN,
            [Summary("The RD of the player.")] double rd = double.NaN

            )
        {
            var np = createPlayer(name, skill, rd);

            var user = Program.DiscordIO.GetUser(id);

            if (user == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"The ID `{id}` is invalid."));

                return;
            }

            np.LinkDiscord(id);
            await np.UpdateRank(true);

            Program.Controller.CurLeaderboard.AddPlayer(np);

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed(
                                 $"Added player **{name}** with skill {np.DisplayedSkill} RD {np.Sigma},"
                                 + $" and linked them to the Discord User {user.Mention}.", "Player ID: " + np.UUId)
                             );
        }
Exemple #5
0
        // allow this code to also be used for !tournamentstartmatch (!tsm)
        public static async Task <Tuple <PendingMatch, Embed> > StartMatch(string team1, string team2, bool force, bool isTourney = false)
        {
            try {
                Team t1;
                Team t2;
                try {
                    t1 = StrToTeam(team1);
                    t2 = StrToTeam(team2);
                }
                catch (Exception e) {
                    return(new Tuple <PendingMatch, Embed>(null, EmbedHelper.GenerateErrorEmbed(e.Message)));
                }

                var t1_s = string.Join(", ", t1.Players.Select(x => x.IGN));
                var t2_s = string.Join(", ", t2.Players.Select(x => x.IGN));

                var match = await Program.Controller.StartMatchAction(t1, t2, isTourney, force);

                if (match == null)
                {
                    return(new Tuple <PendingMatch, Embed>(null, EmbedHelper.GenerateErrorEmbed(
                                                               $"One or more of the players you specified are already playing. Please set `force` to `true` if you wish to override this protection.")));
                }

                string output = $"Started the match between **{t1_s}** and **{t2_s}**.";

                return(new Tuple <PendingMatch, Embed>(match, EmbedHelper.GenerateSuccessEmbed(output)));
            }
            catch (Exception e) {
                return(new Tuple <PendingMatch, Embed>(null, EmbedHelper.GenerateErrorEmbed(e.Message)));
            }
        }
        public async Task RemoveAchievementCommand(
            [Summary("The name, UUID or Discord message ID of the achievement.")] string achievement,
            [Remainder][Summary("The player to revoke the achievement from.")] string players
        ) {
            var achv = Program.Controller.Achievements.FindAchievement(achievement);
            if (achv == null) {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the achievement from the query **{achievement}**."));
                return;
            }

            var teams = TournamentCommands.StrListToTeams(players);

            var output = "";
            foreach (var t in teams) {
                foreach (var p in t.Players) {
                    if (await achv.AddPlayer(p)) {
                        output += p.IGN + Environment.NewLine;
                    }
                    else {
                        await ReplyAsync(EmbedHelper.GenerateWarnEmbed($"Could not revoke the player **{p.IGN}** of the achievement **{achv.Name}**."));
                    }
                }
            }

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed(
                $"Successfully revoked the following players of the achievement **{achv.Name}**:" + Environment.NewLine + Environment.NewLine + output));
        }
 public async Task CreateAchievementCommand(
     [Summary("The achievement's name.")] string name,
     [Summary("The description of the achievement.")] string description
 ) {
     var result = await Program.Controller.Achievements.AddAchievement(name, description);
     if (result) await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"Successfully added the achievement **{name}**."));
     else await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not create the achievement **{name}**. Please try again."));
 }
 public async Task DeleteAchievementCommand(
     [Summary("The name, UUID or Discord message ID of the achievement to delete.")] string achievement
 ) {
     var achv = Program.Controller.Achievements.FindAchievement(achievement);
     if (achv != null) {
         if (await Program.Controller.Achievements.DeleteAchievement(achv)) {
             await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"Deleted the achievement **{achv.Name}**."));
         } else {
             await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not delete the achievement **{achv.Name}**."));
         }
     } else {
         await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the achievement from the query **{achievement}**."));
     }
 }
Exemple #9
0
        public async Task AutoCreatePlayer(
            [Remainder][Summary("The player's name. Leave empty to set to their Discord username.")] string name = null
            )
        {
            if (Program.CurLeaderboard.LatestJoinedPlayer == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed("Could not identify the latest player who has joined."));

                return;
            }

            (string Name, ulong DiscordID)p = ((string Name, ulong DiscordID))Program.CurLeaderboard.LatestJoinedPlayer;

            await CreateLinkedPlayerCommand(string.IsNullOrWhiteSpace(name)?p.Name : name, p.DiscordID);
        }
        public async Task EditAchievementCommand(
            [Summary("The name, UUID or Discord message ID of the achievement.")] string achievement,
            [Summary("The achievement's name.")] string name,
            [Summary("The description of the achievement.")] string description
        ) {
            var achv = Program.Controller.Achievements.FindAchievement(achievement);
            if (achv == null) {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the achievement from the query **{achievement}**."));
                return;
            }

            await achv.Edit(name, description);
            
            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"Successfully edited the achievement **{name}**."));
        }
Exemple #11
0
        public async Task DeletePlayer([Summary("The player's name, ID, or Discord ID.")] string name)
        {
            var player = FindPlayer(name);

            if (player == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the user with name or ID `{name}`."));

                return;
            }

            player.MarkedForDeletion = true;

            Program.CurLeaderboard.InvokeChange();

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"**{player.IGN}** has been removed from the leaderboard."));
        }
Exemple #12
0
        public async Task EditPlayerCommand(
            [Summary("The player's name, ID, or Discord ID.")] string name,
            [Summary("What to change the player's name to.")] string newName,
            [Summary("What to change the player's TrueSkill to.")] string newTs = "~",
            [Summary("What to change the player's RD to.")] string newRd        = "~",
            [Summary("What to change the player's alias to.")] string newAlias  = "~"
            )
        {
            var player = FindPlayer(name);

            if (player == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the user with name or ID `{name}`."));

                return;
            }

            if (!newName.Equals("~"))
            {
                player.IGN = newName;
            }

            double d_newSigma;

            if (!newTs.Equals("~") && Double.TryParse(newRd, out d_newSigma))
            {
                player.Sigma = d_newSigma;
            }

            double d_newTs;

            if (!newTs.Equals("~") && Double.TryParse(newTs, out d_newTs))
            {
                player.Mu = d_newTs + player.Sigma * Program.Config.TrueSkillDeviations;
            }

            if (!newAlias.Equals("~"))
            {
                player.Alias = newAlias;
            }

            Program.CurLeaderboard.InvokeChange();

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"**{player.IGN}**'s data has been updated to the following: {Environment.NewLine}{Environment.NewLine}"
                                                              + player.GenerateSummary()));
        }
Exemple #13
0
        public async Task UnlinkPlayerCommand(
            [Summary("The player's name, ID, or Discord ID.")] string name
            )
        {
            var player = FindPlayer(name);

            if (player == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the user with name or ID `{name}`."));

                return;
            }

            player.UnlinkDiscord();

            await ReplyAsync(EmbedHelper.GenerateSuccessEmbed($"**{player.IGN}** has been unlinked."));
        }
Exemple #14
0
        public async Task FindPlayerCommand([Summary("The player's name, ID, or Discord ID.")] string name)
        {
            var player = FindPlayer(name);

            if (player == null)
            {
                await ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Could not find the user with name or ID `{name}`."));

                return;
            }

            var embed = new EmbedBuilder().WithTitle(player.IGN).WithColor(Discord.Color.Green);

            embed.AddField("Info", player.GenerateSummary());
            if (player.DiscordUser != null)
            {
                embed.ThumbnailUrl = player.DiscordUser.GetAvatarUrl();
            }

            await ReplyAsync(embed.Build());
        }
Exemple #15
0
 public Task DecipherCommand([Summary("The string to decipher.")][Remainder] string toDecipher)
 {
     return(ReplyAsync(EmbedHelper.GenerateErrorEmbed($"Failed to decipher the message." +
                                                      Environment.NewLine + Environment.NewLine +
                                                      "**Most Likely Cause:**" + Environment.NewLine + "The message was composed by Cistic.")));
 }