Exemple #1
0
            public Task <Result> Execute(CommandMetadata data)
            {
                var leaderboard = ParentPlugin.GetShipLeaderboard(data.Message.GetGuild());

                EmbedBuilder builder = new EmbedBuilder().
                                       WithAuthor(ParentPlugin.GuildHandler.BotUser).
                                       WithTitle("All ships on " + data.Message.GetGuild().Name + ".");

                foreach (var pair in leaderboard)
                {
                    SocketGuildUser shippie = ParentPlugin.GuildHandler.GetUser(pair.Key);
                    string          ships   = "";

                    foreach (Shipping.Ship ship in pair.Value)
                    {
                        ships += $"{ParentPlugin.ShipToString (ship)}\n";
                    }

                    builder.AddField($"{shippie.GetShownName ()} has been shipped {pair.Value.Count} times in the following ships:", ships);
                }

                LargeEmbed largeEmbed = new LargeEmbed();

                largeEmbed.CreateFrom(builder);
                return(TaskResult(largeEmbed, null));
            }
Exemple #2
0
        public async Task <Result> Execute(CommandMetadata metadata, string url) // Perhaps add URLs to the command framework?
        {
            (ulong channelId, ulong messageId) = url.ParseMessageUrl();
            SocketTextChannel channel = ParentPlugin.GuildHandler.FindTextChannel(channelId);

            if (channel == null)
            {
                throw new ArgumentException($"The message URL does not point to any channel on this server.");
            }

            var message = await channel.GetMessageAsync(messageId);

            if (message == null)
            {
                throw new ArgumentException($"The message URL does not point to any message in channel '{channel.Name}'. Perhaps it has been deleted.");
            }
            if (message is IUserMessage userMessage)
            {
                if (!string.IsNullOrEmpty(userMessage.Content))
                {
                    Quote quote = new Quote(userMessage.Content, userMessage.Author.GetShownName(), userMessage.Timestamp.Year);
                    ParentPlugin.AddQuote(quote);
                    return(new Result(ParentPlugin.GetQuoteEmbed(quote), $"Succesfully quoted {userMessage.Author.GetShownName()} in their infinite wisdom."));
                }
                else
                {
                    throw new ArgumentException($"The message URL points to a message without any text content, perhaps an embed-only message. There must be some raw text to quote.");
                }
            }
            else
            {
                throw new ArgumentException($"The message URL points to a non-user message. Only messages sent by users or bots can be used.");
            }
        }
Exemple #3
0
            public async Task <Result> Execute(CommandMetadata data, string username)
            {
                IUser user  = ParentPlugin.GuildHandler.GetUser(username);
                var   karma = ParentPlugin.GetKarma(user.Id);

                return(new Result(await GetKarmaEmbed(karma, user.GetShownName(), 3, ParentPlugin.GuildHandler), string.Empty));
            }
Exemple #4
0
            public async Task <Result> Execute(CommandMetadata data, string colorName)
            {
                SocketGuildUser          guildUser    = data.Message.Author as SocketGuildUser;
                IEnumerable <SocketRole> currentRoles = guildUser.Roles.Where(x => ParentPlugin.GetRoles().Any(y => x.Id == y.Id));

                SocketRole role = null;

                foreach (var entry in ParentPlugin.GetRoles())
                {
                    string roleName = entry.Name.Substring(ParentPlugin._colourRolePrefix.GetValue().Length).ToUpperInvariant();
                    if (colorName.ToUpperInvariant() == roleName)
                    {
                        role = entry;
                        break;
                    }
                }

                await guildUser.RemoveRolesAsync(currentRoles);

                if (role != null)
                {
                    await guildUser.AddRoleAsync(role);
                }

                return(new Result(null, role == null ? "Failed to colour you, colour not found." : $"You've been succesfully coloured **{colorName}**!"));
            }
Exemple #5
0
            public Task <Result> Execute(CommandMetadata _, string pluginName)
            {
                ParentPlugin.RemovePlugin(pluginName);
                var state = ParentPlugin.GuildHandler.State;

                return(TaskResult(state.ChangesToEmbed($"Successfully disabled plugin '{Plugin.GetName(PluginLoader.GetPlugin(pluginName))}' on this server."), string.Empty));
            }
Exemple #6
0
        public Task <Result> Execute(CommandMetadata metadata, string content, string author, int year)
        {
            Quote quote = new Quote(content, author, year);

            ParentPlugin.AddQuote(quote);
            return(TaskResult(ParentPlugin.GetQuoteEmbed(quote), $"Succesfully quoted {author} in their eternal brilliancy."));
        }
Exemple #7
0
        public Task <Result> Execute(CommandMetadata metadata, string content, string author)
        {
            Quote quote = new Quote(content, author, DateTime.Now.Year);

            ParentPlugin.AddQuote(quote);
            return(TaskResult(ParentPlugin.GetQuoteEmbed(quote), $"Succesfully quoted {author} in their endless genius."));
        }
Exemple #8
0
        public Task <Result> Execute(CommandMetadata data, int amount)
        {
            var allKarma = ParentPlugin.GetKarmaDictionary();
            List <SocketGuildUser> inGuild = new List <SocketGuildUser> ();

            foreach (var entry in allKarma)   // Man I'm getting lazy with dictionary type naming. All those generic parameters yo.
            {
                SocketGuildUser user = data.Message.GetGuild()?.GetUser(entry.Key);
                if (user == null)
                {
                    continue;
                }
                inGuild.Add(user);
            }

            inGuild.OrderByDescending(x => ParentPlugin.GetKarma(x.Id).Total);
            inGuild = inGuild.GetRange(0, Math.Min(amount, inGuild.Count));

            string result = "```";

            foreach (SocketGuildUser user in inGuild)
            {
                result += StringExtensions.UniformStrings(user.GetShownName(), ParentPlugin.GetKarma(user.Id).ToString()) + "\n";
            }
            result += "```";

            return(TaskResult(inGuild, result));
        }
Exemple #9
0
            public Task <Result> Execute(CommandMetadata data, int day, int month, int year)
            {
                Consent.AssertConsent((data.Author as SocketGuildUser).Guild.Id, data.AuthorID);;
                DateTime date = new DateTime(year, month, day, 12, 0, 0);

                ParentPlugin.SetBirthday(data.Message.Author.Id, date);
                return(TaskResult(null, $"Succesfully set birthday date to **{date.ToShortDateString ()}**."));
            }
Exemple #10
0
            public Task <Result> Execute(CommandMetadata data, int amount)
            {
                var allKarma = ParentPlugin.GetLeaderboard();

                return(TaskResult(GetLeaderboardEmbed(allKarma, (x, y) => y.Total - x.Total, x => ParentPlugin.GuildHandler.FindUser(x.UserId),
                                                      x => x.ToString(), "No one has yet to recieve any karma :(", "Karma Leaderboard", "Top [amount] of karma hoarders are..",
                                                      amount), string.Empty));
            }
Exemple #11
0
 public Task <Result> Execute(CommandMetadata data, SocketGuildUser shippieOne, SocketGuildUser shippieTwo)
 {
     Shipping.Ship ship = ParentPlugin.Sink(data.Message.Author as SocketGuildUser, shippieOne, shippieTwo, out bool succesful);
     if (succesful)
     {
         return(TaskResult(null, "Succesfully sunk " + ParentPlugin.GetShipName(ship) + ", at least for you."));
     }
     return(TaskResult(null, $"Failed to sink {ParentPlugin.GetShipName (ship)} - You have not shipped them yet."));
 }
Exemple #12
0
 public Task <Result> Execute(CommandMetadata data, SocketGuildUser shippieOne, SocketGuildUser shippieTwo)
 {
     Shipping.Ship ship = ParentPlugin.Ship(data.Message.Author as SocketGuildUser, shippieOne, shippieTwo, out bool succesful);
     if (succesful)
     {
         return(TaskResult(ship, "Succesfully shipped " + shippieOne.GetShownName() + " and " + shippieTwo.GetShownName() + ", now known as " + ParentPlugin.GetShipName(ship) + "."));
     }
     return(TaskResult(ship, $"Failed to ship {shippieOne.GetShownName ()} x {shippieTwo.GetShownName ()} - You've already shipped them."));
 }
            public Task <Result> Execute(CommandMetadata data, SocketGuildUser shippieOne, SocketGuildUser shippieTwo)
            {
                var succesful = ParentPlugin.Sink(data.AuthorID, shippieOne.Id, shippieTwo.Id);

                if (succesful)
                {
                    return(TaskResult(true, "Succesfully sunk " + ParentPlugin.GetShipName(ParentPlugin.GetShipByShippies(shippieOne.Id, shippieTwo.Id)) + ", at least for you."));
                }
                return(TaskResult(false, $"Failed to sink that ship, as you have not shipped them yet."));
            }
            public Task <Result> Execute(CommandMetadata data, SocketGuildUser shippieOne, SocketGuildUser shippieTwo)
            {
                var succesful = ParentPlugin.Ship(data.AuthorID, shippieOne.Id, shippieTwo.Id);

                if (succesful)
                {
                    return(TaskResult(succesful, "Succesfully shipped " + shippieOne.GetShownName() + " and " + shippieTwo.GetShownName() + ", now known as " + ParentPlugin.GetShipName(ParentPlugin.GetShipByShippies(shippieOne.Id, shippieTwo.Id)) + "."));
                }
                return(TaskResult(succesful, $"Failed to ship {shippieOne.GetShownName ()} x {shippieTwo.GetShownName ()} - You've already shipped them."));
            }
        public async Task <Result> Execute(CommandMetadata data, string word)
        {
            var def = await UrbanDefinition.Get(word, ParentPlugin.EnableHyperlinkReactions);

            Embed embed = def.ToEmbed();

            var message = await data.Message.Channel.SendMessageAsync(null, false, embed);

            await ParentPlugin.AddNestedDefReactions(def, message);

            return(new Result(null, string.Empty));
        }
 public Task <Result> Execute(CommandMetadata metadata, string pluginName)
 {
     ParentPlugin.AddPlugin(pluginName);
     if (ParentPlugin.GuildHandler.Plugins.IsPluginActive(pluginName))
     {
         return(TaskResult(null, $"Succesfully enabled plugin '{Plugin.GetFullName(PluginLoader.GetPlugin(pluginName))}' in this server."));
     }
     else
     {
         return(TaskResult(null, $"Failed to add plugin '{pluginName}'. An error may have occured in its initialization."));
     }
 }
            public async Task <Result> Execute(CommandMetadata metadata, string query)
            {
                JObject result = await ParentPlugin.QueryAsync(SourceUrl, query);

                Embed embed = ParentPlugin.BuildPageEmbed(result);

                if (embed == null)
                {
                    return(new Result(null, "Sorry fam, the wiki fetch failed."));
                }
                return(new Result(embed, string.Empty));
            }
Exemple #18
0
            public Task <Result> Execute(CommandMetadata data)
            {
                var allKarma = ParentPlugin.GetLeaderboard();
                var allVotes = allKarma.SelectMany(x => x.GetMessages()).SelectMany(x => _voteSelector(x));
                var groups   = allVotes.GroupBy(x => x);
                var dict     = groups.ToDictionary(x => x.Key, x => allVotes.Count(y => x.Key == y));
                var users    = dict.Keys.ToArray();

                return(TaskResult(GetLeaderboardEmbed(users, (x, y) => dict[y] - dict[x], x => ParentPlugin.GuildHandler.FindUser(x),
                                                      x => dict[x].ToString() + " " + _voteType, $"No one has yet to be {_adjective}", $"{_type} Leaderboard", $"The most {_adjective} people on this server are..",
                                                      dict.Count), string.Empty));
            }
            public Task <Result> Execute(CommandMetadata data, SocketGuildUser user)
            {
                var           allShips = ParentPlugin.GetAllShipperShips(user);
                StringBuilder result   = new StringBuilder($"{user.GetShownName ()} has shipped the following ships:```\n");

                foreach (Shipping.Ship ship in allShips)
                {
                    result.Append(ParentPlugin.ShipToString(ship) + "\n");
                }
                result.Append("```");
                return(TaskResult(result, result.ToString()));
            }
Exemple #20
0
            public async Task <Result> Execute(CommandMetadata data, string name)
            {
                SocketGuildUser user = data.Message.Author as SocketGuildUser;

                if (user.VoiceChannel != null)
                {
                    await ParentPlugin.SetCustomName(user.VoiceChannel, name);

                    return(new Result(null, $"Succesfully set custom voice channel name to {name}."));
                }
                return(new Result(null, "You aren't in a voice channel at the moment. At least not on this server."));
            }
Exemple #21
0
            public Task <Result> Execute(CommandMetadata data, SocketGuildUser user)
            {
                var    allShips = ParentPlugin.GetAllShipperShips(user);
                string result   = $"{user.GetShownName ()} has shipped the following ships:```\n";

                foreach (Shipping.Ship ship in allShips)
                {
                    result += ParentPlugin.ShipToString(ship) + "\n";
                }
                result += "```";
                return(TaskResult(result, result));
            }
Exemple #22
0
        public Task <Result> Execute(CommandMetadata data, string user)
        {
            SocketGuildUser userObj = ParentPlugin.GuildHandler.FindUser(user);

            if (userObj != null)
            {
                return(Execute(data, ParentPlugin.GuildHandler.GetUser(user)));
            }
            else
            {
                return(TaskResult(null, ParentPlugin.SelectGenerator().Insult(user)));
            }
        }
            public Task <Result> Execute(CommandMetadata metadata, double value, string from)
            {
                Converter fromConverter = ParentPlugin.FindConverter(from);

                if (fromConverter != null)
                {
                    Converter toConverter = ParentPlugin.FindRandomOfType(fromConverter.Type, fromConverter);
                    return(Execute(metadata, value, from, toConverter.Name)); // don't question it.
                }
                else
                {
                    throw new InvalidOperationException("Cannot convert from unit type " + from);
                }
            }
Exemple #24
0
            public Task <Result> Execute(CommandMetadata data)
            {
                string message;
                string suffix;

                if (ParentPlugin.TryNut(out message))
                {
                    suffix = $"You have made me nut {ParentPlugin.AddNutter(data.AuthorID)} time(s) now, be proud mortal.";
                }
                else
                {
                    suffix = "You have failed to make me nut. " + (ParentPlugin.IsPrecious(data.AuthorID) ? "But that's okay I still love you." : "You are worthless.");
                }
                return(TaskResult(message + "\n" + suffix, message + "\n" + suffix));
            }
            public Task <Result> Execute(CommandMetadata data)
            {
                var leaderboard = ParentPlugin.GetShipLeaderboard(data.Message.GetGuild());

                EmbedBuilder builder = new EmbedBuilder().
                                       WithAuthor(ParentPlugin.GuildHandler.BotUser).
                                       WithTitle("All ships on " + data.Message.GetGuild().Name + ".");

                List <EmbedFieldBuilder> embedFields = new List <EmbedFieldBuilder>();

                foreach (var pair in leaderboard)
                {
                    SocketGuildUser shippie = ParentPlugin.GuildHandler.GetUser(pair.Key);
                    var             ships   = string.Join("\n", ParentPlugin.GetShippieShips(shippie.Id).Select(x => ParentPlugin.ShipToString(x)));
                    embedFields.Add(new EmbedFieldBuilder().WithName($"{shippie.GetShownName ()} has been shipped {pair.Value.Count} times in the following ships:\n").WithValue(ships));
                }

                LargeEmbed largeEmbed = new LargeEmbed(builder, embedFields);

                return(TaskResult(largeEmbed, null));
            }
            public Task <Result> Execute(CommandMetadata metadata, double value, string from, string to)
            {
                Converter fromConverter = ParentPlugin.FindConverter(from);
                Converter toConverter   = ParentPlugin.FindConverter(to);

                if (fromConverter != null && toConverter != null)
                {
                    value = toConverter.FromSI(toConverter.ToSI(value));
                    return(TaskResult(value, ParentPlugin.GetConversionString(value, fromConverter, toConverter)));
                }
                else if (fromConverter == null)
                {
                    throw new InvalidOperationException("Cannot convert from unit type " + from);
                }
                else if (toConverter == null)
                {
                    throw new InvalidOperationException("Cannot convert to unit type " + to);
                }
                else
                {
                    throw new InvalidOperationException("You shouldn't be able to get this error message, if you do I'll give you a hug.");
                }
            }
Exemple #27
0
            public Task <Result> Execute(CommandMetadata data, SocketGuildUser user)
            {
                var ships       = ParentPlugin.GetShippieShips(user);
                var catagorized = ships.GroupBy(x => x.GetCompanionTo(user.Id));

                EmbedBuilder builder = new EmbedBuilder();

                builder.WithAuthor(user).
                WithTitle("Ships containing " + user.GetShownName() + ".");

                foreach (var ship in catagorized)
                {
                    var shippers = ship.Select(x => ParentPlugin.GuildHandler.GetUser(x.Shipper));

                    SocketGuildUser companion = ParentPlugin.GuildHandler.GetUser(ship.Key);
                    builder.AddField("Shipped with " + companion.GetShownName() + " as " + ParentPlugin.GetShipName(ship.FirstOrDefault()) + " " + ship.Count() + " times by:", string.Join(", ", shippers));
                }

                LargeEmbed largeEmbed = new LargeEmbed();

                largeEmbed.CreateFrom(builder);
                return(TaskResult(largeEmbed, null));
            }
Exemple #28
0
            public async Task <Result> Execute(CommandMetadata metadata, string pluginName)
            {
                Type plugin = PluginLoader.GetPlugin(pluginName);

                if (plugin != null)
                {
                    string name = Plugin.GetName(plugin);
                    if (!ParentPlugin.GuildHandler.Plugins.IsPluginActive(pluginName))
                    {
                        QuestionMessage question = new QuestionMessage($"Are you sure you wish to enable plugin '{name}'?", async() =>
                        {
                            ParentPlugin.AddPlugin(pluginName);
                            if (ParentPlugin.GuildHandler.Plugins.IsPluginActive(pluginName))
                            {
                                var state = ParentPlugin.GuildHandler.State;
                                await metadata.Message.Channel.SendMessageAsync(string.Empty, false, state.ChangesToEmbed($"Succesfully enabled plugin '{name}' on this server."));
                            }
                            else
                            {
                                IEnumerable <string> exceptions = ParentPlugin.GuildHandler.Plugins.GetInitializationExceptions().Select(x => x.InnerException.Message);
                                await metadata.Message.Channel.SendMessageAsync($"Failed to add plugin '{name}'. Issues occured during initialization:\n\t{string.Join("\n\t", exceptions)}");
                            }
                        }, async() => await metadata.Message.Channel.SendMessageAsync($"Cancelled enabled plugin '{name}'.")).SetRecipient(metadata.AuthorID);
                        await metadata.Message.Channel.SendMessageAsync(null, false, GetModuleEmbed(PluginLoader.GetPlugin(pluginName)));

                        return(new Result(question, string.Empty));
                    }
                    else
                    {
                        return(new Result(null, $"Failed to enable plugin: '{name}' is already enabled."));
                    }
                }
                else
                {
                    return(new Result(null, $"Failed to enable plugin: No available plugins matches '{pluginName}' Check `!plugin available` to get a list of available plugins."));
                }
            }
Exemple #29
0
            public async Task <Result> Execute(CommandMetadata data, ulong channelId, ulong messageId)
            {
                ITextChannel channel = ParentPlugin.GuildHandler.FindTextChannel(channelId);
                IMessage     message = await channel?.GetMessageAsync(messageId);

                if (channel == null)
                {
                    throw new ArgumentException("The channel could not be found.");
                }

                if (message == null)
                {
                    throw new ArgumentException("The message could not be found.");
                }

                var karma        = ParentPlugin.GetKarma(message.Author.Id);
                var karmaMessage = karma.GetMessages().FirstOrDefault(x => x.Id == message.Id);

                if (karmaMessage == null)
                {
                    throw new ArgumentException("The message given has neither upvotes or downvotes.");
                }

                var    upvoters   = karmaMessage.GetUpvotes().Select(x => ParentPlugin.GuildHandler.FindUser(x));
                var    downvoters = karmaMessage.GetDownvotes().Select(x => ParentPlugin.GuildHandler.FindUser(x));
                string ups        = string.Join(", ", upvoters.Select(x => UserToString(x)));
                string downs      = string.Join(", ", downvoters.Select(x => UserToString(x)));

                string UserToString(IUser user) => user == null ? "*Missing User*" : user.GetShownName();

                return(new Result(new EmbedBuilder().WithTitle("Voters of Message")
                                  .WithDescription($"> [{message.Content.Replace('\n', ' ')}]({message.GetJumpUrl ()}) - {karmaMessage.ToString()}")
                                  .AddField("The following people upvoted the message..", upvoters.Count() == 0 ? "```No one :(```" : $"```{ups}```")
                                  .AddField("The following people downvoted the message..", downvoters.Count() == 0 ? "```No one! :)```" : $"```{downs}```")
                                  .Build(), string.Empty));
            }
Exemple #30
0
 public Task <Result> Execute(CommandMetadata _, SocketGuildUser user)
 {
     return(TaskResult(null, ParentPlugin.SelectGenerator().Insult(user.GetShownName())));
 }