public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (!args.Parameters[0].Equals("reset", StringComparison.CurrentCultureIgnoreCase)) { AccessLevel newAccess; if (args.Parameters[1].TryParseEnum(out AccessLevel acc)) { newAccess = acc; } else { HelpCommand.ShowHelp(args.Channel, this, string.Format(CultureInfo.CurrentCulture, ResourceExceptions.FailedParseException, "Access Level")); return; } if (newAccess == AccessLevel.Dev) { HelpCommand.ShowHelp(args.Channel, this, "Dev can only be set via DB"); return; } if (!handler.SetCommandAccessLevel(args.Parameters[0], args.Guild.Id, newAccess)) { client.SendSimpleEmbed(args.Channel, "Failed to change accesslevel", "Command not found or command not overwrittable").ConfigureAwait(false); } else { client.SendSimpleEmbed(args.Channel, "Accesslevel changed", "Changed commands accesslevel").ConfigureAwait(false); } } else { using DBContext c = new DBContext(); CommandAccess ca = c.CommandAccess.FirstOrDefault(ca => ca.DiscordGuildId == (long)args.Guild.Id && ca.TypeName.StartsWith(args.Parameters[1], StringComparison.CurrentCultureIgnoreCase)); if (ca != null) { c.CommandAccess.Remove(ca); c.SaveChanges(); client.SendSimpleEmbed(args.Channel, "Resetted", "Resetted command " + args.Parameters[1]).ConfigureAwait(false); } else { client.SendSimpleEmbed(args.Channel, "Not Found/Resetted", "Could not find command or command already resetted").ConfigureAwait(false); } } }
private static void OnTeamTopList(DiscordHandler client, CommandEventArg args, bool reverse = false) { int page = 1; if (args.Parameters.Count > 0 && int.TryParse(args.Parameters[0], out int p)) { page = p; } page--; List <SeasonTeamCardCache> teams = GetTeams(args.Guild).OrderByDescending(sp => sp.TeamRating).ToList(); if (teams.Count == 0) { client.SendSimpleEmbed(args.Channel, "Could not find any stats").ConfigureAwait(false); return; } if (reverse) { teams.Reverse(); } args.Channel.SendMessageAsync(embed: GetListAsEmbed <SeasonTeamCardCache>(teams, page * 10, 10, "Teams", new Func <SeasonTeamCardCache, string>(sp => sp.TeamName), new Func <SeasonTeamCardCache, double>(sp => Math.Round(sp.TeamRating, 2, MidpointRounding.AwayFromZero)))); }
private static void OnPlayerTopList(DiscordHandler client, CommandEventArg args, bool reverse = false) { int page = 1; if (args.Parameters.Count > 0 && int.TryParse(args.Parameters[0], out int p)) { page = p; } page--; List <SeasonPlayerCardCache> players = GetPlayers(args.Guild).OrderByDescending(sp => sp.OverallRating).ToList(); if (players.Count == 0) { client.SendSimpleEmbed(args.Channel, "Could not find any stats").ConfigureAwait(false); return; } else if (reverse) { players.Reverse(); } args.Channel.SendMessageAsync(embed: GetListAsEmbed <SeasonPlayerCardCache>(players, page * 10, 10, "Players", new Func <SeasonPlayerCardCache, string>(sp => sp.Username), new Func <SeasonPlayerCardCache, double>(sp => sp.OverallRating))); }
private void OnMatchCommand(DiscordHandler client, CommandEventArg args) { using DBContext c = new DBContext(); long matchId = -1; //team a vs team b if (args.Parameters.Count > 1) { StringBuilder vsSb = new StringBuilder(); for (int i = 0; i < args.Parameters.Count; i++) { vsSb.Append(" " + args.Parameters[i]); } vsSb.Remove(0, 1); string matchName = vsSb.ToString(); matchId = c.SeasonResult.FirstOrDefault(sr => sr.MatchName.Equals(matchName, StringComparison.CurrentCultureIgnoreCase) && sr.DiscordGuildId == (long)args.Guild.Id)?.Id ?? -1; } else //matchid { if (!int.TryParse(args.Parameters[0], out int mid)) { HelpCommand.ShowHelp(args.Channel, this); return; } matchId = mid; if (!c.SeasonResult.Any(sr => sr.MatchId == matchId && sr.DiscordGuildId == (long)args.Guild.Id)) { client.SendSimpleEmbed(args.Channel, "Could not find match " + matchId).ConfigureAwait(false); return; } } DiscordEmbed embed = GetMatchEmbedFromDB((int)matchId); if (embed == null) { DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = "Could not find match ", Description = Resources.InvisibleCharacter }; embed = builder.Build(); } args.Channel.SendMessageAsync(embed: embed); }
public void SendEmbed(ulong channel, string title, string description) { var dchannel = _discord.GetChannelAsync(_guildId, channel).ConfigureAwait(false).GetAwaiter().GetResult(); if (dchannel == null) { return; } _discord.SendSimpleEmbed(dchannel, title, description).ConfigureAwait(false); }
private static void OnPlayerProfile(DiscordHandler client, CommandEventArg args) { try { using DBContext c = new DBContext(); (string, long)userParsed = TryParseIdOrUsernameString(args.Parameters); long osuUserId = -1; if (userParsed.Item1 != null) { osuUserId = c.SeasonPlayer.FirstOrDefault(sp => sp.LastOsuUsername.Equals(userParsed.Item1, StringComparison.CurrentCultureIgnoreCase) && sp.DiscordGuildId == (long)args.Guild.Id).OsuUserId; } else if (userParsed.Item2 != -1) { osuUserId = userParsed.Item2; } if (osuUserId == -1) { client.SendSimpleEmbed(args.Channel, "Could not find player " + osuUserId).ConfigureAwait(false); return; } SeasonPlayerCardCache spcc = GetPlayer(args.Guild, osuUserId); if (spcc == null) { client.SendSimpleEmbed(args.Channel, "Could not find player " + osuUserId).ConfigureAwait(false); return; } args.Channel.SendMessageAsync(embed: GetPlayerEmbed(spcc.Username, spcc.TeamName, spcc.OsuUserId, spcc.AverageAccuracy, (int)spcc.AverageScore, spcc.AverageMisses, (int)spcc.AverageCombo, spcc.AveragePerformance, spcc.MatchMvps, spcc.OverallRating)); } catch (Exception) { client.SendSimpleEmbed(args.Channel, "Profile not found").ConfigureAwait(false); } }
private static void OnTeamProfile(DiscordHandler client, CommandEventArg args) { (string, long)userParsed = TryParseIdOrUsernameString(args.Parameters); string teamName = userParsed.Item1; SeasonTeamCardCache stcc = GetTeam(args.Guild, teamName); if (stcc == null) { client.SendSimpleEmbed(args.Channel, "Could not find team " + teamName).ConfigureAwait(false); return; } args.Channel.SendMessageAsync(embed: GetTeamEmbed(stcc.TeamName, stcc.AverageAccuracy, (int)stcc.AverageScore, stcc.AverageMisses, (int)stcc.AverageCombo, stcc.AverageGeneralPerformanceScore, stcc.TotalMatchMVPs, stcc.AverageOverallRating, stcc.TeamRating, stcc.MVPName)); }
private static void EditEmbed(DiscordHandler client, CommandEventArg args, DiscordEmbed embed, string content, ulong channelId, ulong messageId, DiscordGuild guild) { DiscordChannel channel; DiscordMessage message; try { channel = guild.GetChannel(channelId); message = channel.GetMessageAsync(messageId).ConfigureAwait(false).GetAwaiter().GetResult(); } catch (DSharpPlus.Exceptions.NotFoundException) { throw new ReadableCmdException("Could not find the discord channel"); } message.ModifyAsync(string.IsNullOrEmpty(content) ? default : content, embed).ConfigureAwait(false).GetAwaiter().GetResult(); client.SendSimpleEmbed(args.Channel, "Embed modified").ConfigureAwait(false); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (!int.TryParse(args.Parameters[0], out int rank)) { HelpCommand.ShowHelp(args.Channel, this, $"Could not parse the rank {args.Parameters[0]}"); return; } if (!int.TryParse(args.Parameters[1], out int badgeCount)) { HelpCommand.ShowHelp(args.Channel, this, $"Could not parse the badge count {args.Parameters[1]}"); return; } if (args.Parameters.Count >= 3 && args.Parameters[2].Equals("test", StringComparison.CurrentCultureIgnoreCase)) { return; } client.SendSimpleEmbed(args.Channel, "BWS Rank", GSStatisticHandler.CalculateBWS(rank, badgeCount).ToString()).ConfigureAwait(false); }
/// <summary> /// Sends an embed to a specific channel /// </summary> /// <param name="content">message content</param> /// <param name="webhook">Use webhook or message</param> /// <param name="webhookUser">Webhook username</param> private static void SendEmbed(DiscordHandler client, ICommand cmd, CommandEventArg args, DiscordEmbed embed, string content, ulong channelId, DiscordGuild guild, bool webhook, string webhookUser, string webhookAvatar = null) { DiscordChannel channel; try { channel = guild.GetChannel(channelId); } catch (DSharpPlus.Exceptions.NotFoundException) { throw new ReadableCmdException("Could not find the discord channel"); } //TODO: make it so webhook and default can both send up to 5 embeds max at once if (webhook) { try { using (WebHookHandler whh = new WebHookHandler(channel, webhookUser, webhookAvatar)) { whh.SendEmbed(content, new DiscordEmbed[] { embed }).ConfigureAwait(false).GetAwaiter().GetResult(); } } catch (UriFormatException) { HelpCommand.ShowHelp(args.Channel, cmd, "Invalid link"); return; } } else { channel.SendMessageAsync(content: content, embed: embed).ConfigureAwait(false).GetAwaiter().GetResult(); } client.SendSimpleEmbed(args.Channel, "Sent Embed").ConfigureAwait(false); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (args.Parameters[0].Equals("list", StringComparison.CurrentCultureIgnoreCase)) { int page = 1; if (args.Parameters.Count > 1 && int.TryParse(args.Parameters[1], out int newPage)) { page = newPage; } using DBContext c = new DBContext(); List <DiscordRoleBind> drbs = c.DiscordRoleBind.Where(drb => drb.GuildId == (long)args.Guild.Id).ToList(); if (drbs.Count == 0) { client.SendSimpleEmbed(args.Channel, "Could not find any role binds").ConfigureAwait(false); return; } StringBuilder roleIdBuilder = new StringBuilder(); StringBuilder accessBuilder = new StringBuilder(); for (int i = 0; i < drbs.Count; i++) { roleIdBuilder.AppendLine(((ulong)drbs[i].RoleId).ToString(CultureInfo.CurrentCulture)); accessBuilder.AppendLine(drbs[i].AccessLevel.ToString(CultureInfo.CurrentCulture)); } EmbedPageBuilder epb = new EmbedPageBuilder(2); epb.AddColumn("RoleId", roleIdBuilder.ToString()); epb.AddColumn("Access Level", accessBuilder.ToString()); args.Channel.SendMessageAsync(embed: epb.BuildPage(page)); return; } else if (args.Parameters.Count < 2) { HelpCommand.ShowHelp(args.Channel, this, ResourceExceptions.NotEnoughParameters); return; } if (!ulong.TryParse(args.Parameters[1], out ulong roleId)) { HelpCommand.ShowHelp(args.Channel, this, string.Format(CultureInfo.CurrentCulture, ResourceExceptions.FailedParseException, args.Parameters[1])); return; } else if (args.Guild.GetRole(roleId) == null) { HelpCommand.ShowHelp(args.Channel, this, $"Discord Role {args.Parameters[1]} not found!"); return; } AccessLevel?access = null; if (args.Parameters.Count > 2) { if (args.Parameters[2].TryParseEnum(out AccessLevel acc)) { access = acc; } else { HelpCommand.ShowHelp(args.Channel, this, $"Access Level {args.Parameters[2]} not found!"); return; } if (access.HasValue) { switch (access.Value) { case AccessLevel.Dev: args.Channel.SendMessageAsync("You do not have enough permissions"); return; case AccessLevel.Admin: case AccessLevel.Host: if (args.AccessLevel < AccessLevel.Host) { args.Channel.SendMessageAsync("You do not have enough permissions"); return; } break; } } } switch (args.Parameters[0].ToLower(CultureInfo.CurrentCulture)) { case "bind": if (!access.HasValue) { HelpCommand.ShowHelp(args.Channel, this, $"Access Level {args.Parameters[2]} not found!"); return; } if (CommandHandler.BindPermssion(args.Guild, roleId, access.Value)) { args.Channel.SendMessageAsync("Binded permission"); } else { args.Channel.SendMessageAsync("Already binded or failed to bind"); } break; case "unbind": if (CommandHandler.UnbindPermission(args.Guild, roleId, access)) { args.Channel.SendMessageAsync("Unbinded permission"); } else { args.Channel.SendMessageAsync("Already unbinded or failed to unbind"); } break; } }