Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public void Invoke(DiscordHandler client, CommandHandler handler, CommandEventArg args)
 {
     foreach (var guild in client.Guilds)
     {
         guild.Value.Owner.SendMessageAsync(args.ParameterString).Wait();
     }
 }
Esempio n. 4
0
        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");
            }
        }
Esempio n. 5
0
        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))));
        }
Esempio n. 6
0
        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)));
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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_);
        }
Esempio n. 11
0
        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());
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        private void Get(CommandEventArg args)
        {
            DiscordGuildConfig dgc = args.Config;

            if (dgc == null)
            {
                dgc = new DiscordGuildConfig();
            }

            args.Channel.SendMessageAsync(dgc.TryGetValue(args.Parameters[0]));
        }
Esempio n. 14
0
        private void List(CommandEventArg args)
        {
            StringBuilder response = new StringBuilder();

            foreach (var key in DiscordGuildConfig.GetKeys())
            {
                response.AppendLine(key);
            }

            args.Channel.SendMessageAsync(response.ToString());
        }
Esempio n. 15
0
        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;
        }
Esempio n. 16
0
        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");
        }
Esempio n. 17
0
        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}");
        }
Esempio n. 18
0
 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");
     }
 }
Esempio n. 19
0
        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);
                }
            }
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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");
        }
Esempio n. 22
0
        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);
        }
Esempio n. 23
0
        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));
        }
Esempio n. 24
0
        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");
            });
        }
Esempio n. 25
0
        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);
        }
Esempio n. 26
0
        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;
            }
        }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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);
        }
Esempio n. 30
0
        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);
            }
        }