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.")); } }
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}**")); }
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.")); } }
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) ); }
// 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}**.")); } }
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}**.")); }
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.")); }
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())); }
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.")); }
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()); }
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."))); }