public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { char prefix = args.Config?.Prefix ?? Program.DiscordHandler.CommandHandler.CommandPrefix; int page = 1; if (args.Parameters.Count > 0) { if (char.IsDigit(args.Parameters[0][0])) { if (int.TryParse(args.Parameters[0], out int page_)) { args.Parameters.RemoveAt(0); page = page_; } } if (args.Parameters.Count > 0 && ShowHelp(handler, args, prefix)) { return; } } ListCommands(handler, args, prefix, page); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { bool globalBan = false; //discordId, osuId (ulong, ulong)ids = ParseIds(args, ref globalBan); if (ids.Item1 == 0 && ids.Item2 == 0) { if (args.Parameters[0].Equals("list", StringComparison.CurrentCultureIgnoreCase) && TryListBans(args)) { return; } HelpCommand.ShowHelp(args.Channel, this, "Failed to parse parameters"); return; } else if (globalBan && args.AccessLevel < AccessLevel.Dev) { HelpCommand.ShowHelp(args.Channel, this, "You do not have enough permissions to use this command"); return; } string reason = globalBan ? args.ParameterString.Remove(0, args.Parameters[0].Length + args.Parameters[1].Length + args.Parameters[2].Length + 2).TrimStart(' ') : args.ParameterString.Remove(0, args.Parameters[0].Length + args.Parameters[1].Length + 1).TrimStart(' '); if (string.IsNullOrEmpty(reason)) { reason = null; } BanManager.BanUser((long)ids.Item1, (long)ids.Item2, globalBan ? 0 : (long)args.Guild.Id, reason); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { foreach (var guild in client.Guilds) { guild.Value.Owner.SendMessageAsync(args.ParameterString).Wait(); } }
private void Set(CommandEventArg args, DBContext c) { DiscordGuildConfig dgc = args.Config; if (dgc == null) { dgc = c.DiscordGuildConfig.Add(new DiscordGuildConfig() { GuildId = (long)args.Guild.Id }).Entity; c.SaveChanges(); } string val = (args.Parameters.Count == 2 ? args.Parameters[1] : args.ParameterString.Remove(0, args.Parameters[0].Length)).TrimStart(' ').TrimEnd(' '); bool result = dgc.TrySetValue(args.Parameters[0], val); c.DiscordGuildConfig.Update(dgc); c.SaveChanges(); if (result) { args.Channel.SendMessageAsync("Set value"); } else { args.Channel.SendMessageAsync("Failed to set value"); } }
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))); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { string param = args.Parameters[0].ToLower(CultureInfo.CurrentCulture); args.Parameters.RemoveAt(0); switch (param) { default: HelpCommand.ShowHelp(args.Channel, this); return; case "player": case "p": OnPlayerCommand(client, args); return; case "team": case "t": OnTeamCommand(client, args); return; case "match": case "m": OnMatchCommand(client, args); return; } }
private void OnPlayerCommand(DiscordHandler client, CommandEventArg args) { string param = args.Parameters[0].ToLower(CultureInfo.CurrentCulture); args.Parameters.RemoveAt(0); switch (param) { case "profile": case "p": OnPlayerProfile(client, args); return; case "top": case "t": OnPlayerTopList(client, args); return; case "last": case "l": OnPlayerTopList(client, args, true); return; default: HelpCommand.ShowHelp(args.Channel, this); return; } }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { switch (args.Parameters[0].ToLower()) { default: break; case "-get": args.Parameters.RemoveAt(0); OnGet(args.Parameters, args); return; case "-set": args.Parameters.RemoveAt(0); OnSet(args.Parameters, args); return; case "-priority": args.Channel.SendMessageAsync("Priority:\n```\nLow = 0\nNormal = 1\nHigh = 2\nASAP = 3\n```"); return; case "-status": args.Channel.SendMessageAsync("Priority:\n```\nUnread = 0\nOpen = 1\nNeedsConfirmation = 2\nWIP = 3\nClosed = 4\nArchived = 5\n```"); return; case "-tag": args.Channel.SendMessageAsync("Priority:\n```\nNone = 0\nCommentator = 1\nStreamer = 2\nMappoolSelector = 4\nReferee = 8\nDeveloper = 16\nOrganizer = 32\n```"); return; } OnAdd(args); }
private (ulong, ulong) ParseIds(CommandEventArg args, ref bool globalBan) { if (!ulong.TryParse(args.Parameters[0], out ulong discordUserId)) { if (!args.Parameters[0].Equals("global", StringComparison.CurrentCultureIgnoreCase)) { return(0, 0); } globalBan = true; if (!ulong.TryParse(args.Parameters[1], out discordUserId)) { return(0, 0); } if (!ulong.TryParse(args.Parameters[2], out ulong osuUserId)) { return(0, 0); } return(discordUserId, osuUserId); } if (!ulong.TryParse(args.Parameters[1], out ulong osuUserId_)) { return(0, 0); } return(discordUserId, osuUserId_); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { args.Parameters[0] = args.Parameters[0].Trim('<', '>', '@', '!'); DiscordUser user = null; if (ulong.TryParse(args.Parameters[0], out ulong uid)) { try { user = client.GetUserAsync(uid).ConfigureAwait(false).GetAwaiter().GetResult(); } catch (Exception) { } } if (user == null) { args.Channel.SendMessageAsync($"User {args.Parameters[0]} not found"); return; } DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = $"Userinfo for {user.Username} ({user.Id})", ThumbnailUrl = user.AvatarUrl, Timestamp = DateTime.UtcNow }; using DBContext c = new DBContext(); User u = c.User.FirstOrDefault(u => u.DiscordUserId == (long)uid); if (u != null) { builder.AddField("Osu UserId", u.OsuUserId.ToString(CultureInfo.CurrentCulture)); } if (args.Guild != null) { try { DiscordMember dmember = args.Guild.GetMemberAsync(uid).ConfigureAwait(false).GetAwaiter().GetResult(); builder.AddField("Join Date", dmember.JoinedAt.ToString(CultureInfo.CurrentCulture)); } catch (Exception) { } } builder.AddField("Created On", user.CreationTimestamp.UtcDateTime.ToString(CultureInfo.CurrentCulture)); builder.AddField("Verified", (u != null).ToString(CultureInfo.CurrentCulture)); args.Channel.SendMessageAsync(embed: builder.Build()); }
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); }
private void Get(CommandEventArg args) { DiscordGuildConfig dgc = args.Config; if (dgc == null) { dgc = new DiscordGuildConfig(); } args.Channel.SendMessageAsync(dgc.TryGetValue(args.Parameters[0])); }
private void List(CommandEventArg args) { StringBuilder response = new StringBuilder(); foreach (var key in DiscordGuildConfig.GetKeys()) { response.AppendLine(key); } args.Channel.SendMessageAsync(response.ToString()); }
private void ListCommands(CommandHandler handler, CommandEventArg args, char prefix, int page = 1) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } else if (args == null) { throw new ArgumentNullException(nameof(args)); } List <(ICommand, AccessLevel)> commands = handler.Commands.Values.Select(s => (s, s.AccessLevel)).ToList(); for (int i = 0; i < commands.Count; i++) { AccessLevel newAccess = CommandHandler.GetCommandAccessLevel(commands[i].Item1, args.Guild?.Id ?? 0); if (newAccess > args.AccessLevel) { commands.RemoveAt(i); i--; continue; } commands[i] = (commands[i].Item1, newAccess); } DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = "Command List", Description = "Prefix: " + prefix, Timestamp = DateTime.UtcNow }; EmbedPageBuilder epb = new EmbedPageBuilder(3); epb.AddColumn("Command"); epb.AddColumn("Access"); epb.AddColumn("Description"); for (int i = 0; i < commands.Count; i++) { epb.Add("Command", commands[i].Item1.Command); epb.Add("Access", commands[i].Item2.ToString()); epb.Add("Description", commands[i].Item1.Description); } DiscordEmbed embed = epb.BuildPage(builder, page); args.Channel.SendMessageAsync(embed: embed).Wait(); return; }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { using DBContext c = new DBContext(); Action <long> ac; switch (args.Parameters[0].ToLower()) { default: case "add": ac = new Action <long>(l => { WarmupBeatmap wb = c.WarmupBeatmaps.FirstOrDefault(wb => wb.BeatmapId == l); if (wb != null) { return; } wb = new WarmupBeatmap() { BeatmapId = l, DiscordGuildId = (long)args.Guild.Id }; c.WarmupBeatmaps.Add(wb); c.SaveChanges(); }); break; case "delete": ac = new Action <long>(l => { WarmupBeatmap wb = c.WarmupBeatmaps.FirstOrDefault(wb => wb.BeatmapId == l); if (wb == null) { return; } c.WarmupBeatmaps.Remove(wb); c.SaveChanges(); }); break; } foreach (long mapId in GetMaps(args.Parameters)) { ac(mapId); } args.Channel.SendMessageAsync("Added/Deleted maps"); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (!bool.TryParse(args.Parameters[0], out bool status)) { HelpCommand.ShowHelp(args.Channel, this, "Failed to parse status"); return; } string message = args.ParameterString.Remove(0, args.Parameters[0].Length + 1); Program.MaintenanceScanner.SetMaintenanceStatus(status, message); args.Channel.SendMessageAsync($"Set status to: {status} and message to: {message}"); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (OsuAnalyzer.ClearMatches(args.Guild)) { args.Channel.SendMessageAsync($"All matches removed\nCache is getting updated, this might take a moment"); OsuAnalyzer.UpdateCaches(args.Guild); args.Channel.SendMessageAsync("Cache was updated"); } else { args.Channel.SendMessageAsync("No matches found"); } }
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 void GetUser(CommandEventArg args) { if (args.Parameters.Count == 0) { HelpCommand.ShowHelp(args.Channel, this, ResourceExceptions.NotEnoughParameters); return; } if (!long.TryParse(args.Parameters[0], out long osuId)) { HelpCommand.ShowHelp(args.Channel, this, "Could not parse osu id"); return; } args.Channel.SendMessageAsync(embed: GSStatisticHandler.BuildPlayerProfile(osuId)).ConfigureAwait(false); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { if (!long.TryParse(args.Parameters[0], out long matchId)) { return; } OsuAnalyzer.RemoveMatch(matchId, args.Guild); args.Channel.SendMessageAsync($"Removed match {matchId}\nCache is getting updated, this might take a moment").ConfigureAwait(false).GetAwaiter().GetResult(); OsuAnalyzer.UpdateCaches(args.Guild); args.Channel.SendMessageAsync("Cache was updated"); }
public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args) { switch (args.Parameters[0].ToLower(System.Globalization.CultureInfo.CurrentCulture)) { case "list": args.Parameters.RemoveAt(0); ShowList(args); return; case "remove": args.Parameters.RemoveAt(0); Remove(args); return; default: if (args.Parameters.Count < 2) { HelpCommand.ShowHelp(args.Channel, this); return; } break; } DateTime?date = ParseDate(args.Parameters, 0, 62); if (!date.HasValue) { HelpCommand.ShowHelp(args.Channel, this, "Could not parse date"); return; } args.Parameters.RemoveAt(0); StringBuilder msg = new StringBuilder(args.Parameters[0]); for (int i = 1; i < args.Parameters.Count; i++) { msg.Append(' ' + args.Parameters[i]); } using DBContext c = new DBContext(); var reminder = c.Reminder.Add(new SkyBot.Database.Models.Reminder((long)args.User.Id, (long)args.Channel.Id, msg.ToString(), date.Value)).Entity; c.SaveChanges(); args.Channel.SendMessageAsync("Created your reminder with id " + reminder.Id + " for date: " + reminder.EndDate); }
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 void OnAdd(CommandEventArg e) { if (e.Parameters.Count == 0) { HelpCommand.ShowHelp(e.Channel, this); return; } StringBuilder msgBuilder = new StringBuilder(e.Parameters[0]); for (int i = 1; i < e.Parameters.Count; i++) { msgBuilder.Append(" " + e.Parameters[i]); } Ticket ticket = new Ticket((long)e.User.Id, (long)e.Guild.Id, 0, 0, 1, DateTime.Now, msgBuilder.ToString()); using (DBContext c = new DBContext()) { ticket = c.Ticket.Add(ticket).Entity; c.SaveChanges(); } var duser = e.User; DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = $"New ticket by {duser.Username}#{duser.Discriminator} ({duser.Mention} (copy&paste for mention))", Description = $"ID: {ticket.Id}" }; builder.AddField("Message", ticket.Message); DiscordChannel ticketChannel = e.Guild.GetChannel(GetTicketRoomId(e.Guild)); ticketChannel.SendMessageAsync(embed: builder.Build()); e.Message.DeleteAsync("Ticket submitted").Wait(); System.Threading.Tasks.Task.Run(() => { e.Member.CreateDmChannelAsync().ConfigureAwait(false).GetAwaiter().GetResult() .SendMessageAsync($"Submitted your ticket"); }); }
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) { switch (args.Parameters[0].ToLower(CultureInfo.CurrentCulture)) { case "exampleprofile": case "ep": args.Channel.SendMessageAsync(embed: GSStatisticHandler.GetTestProfile()).ConfigureAwait(false); break; case "get": args.Parameters.RemoveAt(0); GetUser(args); break; default: HelpCommand.ShowHelp(args.Channel, this); return; } }
private bool TryListBans(CommandEventArg args) { List <BannedUser> bans = BanManager.GetBans(guildId: args.Parameters.Count < 2 ? 0 : args.Parameters[1].Equals("global", StringComparison.CurrentCultureIgnoreCase) ? 0 : args.Parameters[1].Equals("local", StringComparison.CurrentCultureIgnoreCase) ? (long)args.Guild.Id : 0); if (bans.Count == 0) { HelpCommand.ShowHelp(args.Channel, this, "No bans found"); return(true); } int page = 1; if (args.Parameters.Count >= 3 && int.TryParse(args.Parameters[2], out int page_)) { page = page_; } DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = "Ban list", Description = Resources.InvisibleCharacter }; EmbedPageBuilder epb = new EmbedPageBuilder(3); epb.AddColumn("Discord ID"); epb.AddColumn("Osu ID"); epb.AddColumn("Reason"); for (int i = 0; i < bans.Count; i++) { epb.Add("Discord ID", bans[i].DiscordUserId.ToString(CultureInfo.CurrentCulture)); epb.Add("Osu ID", bans[i].OsuUserId.ToString(CultureInfo.CurrentCulture)); epb.Add("Reason", string.IsNullOrEmpty(bans[i].Reason) ? "none" : bans[i].Reason); } DiscordEmbed embed = epb.BuildPage(builder, page); args.Channel.SendMessageAsync(embed: embed).ConfigureAwait(false); return(true); }
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); }
private static bool ShowHelp(CommandHandler handler, CommandEventArg args, char prefix, string notice = null) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } else if (args == null) { throw new ArgumentNullException(nameof(args)); } string command = args.Parameters[0].Trim('!'); if (handler.Commands.TryGetValue(command, out ICommand cmd)) { ShowHelp(args.Channel, cmd, prefix, notice); return(true); } return(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); } }