Exemplo n.º 1
0
        public async Task Command()
        {
            Server server = await DatabaseQueries.GetOrCreateServerAsync(Context.Guild.Id);

            IEnumerable <Quote> quotes = server.Quotes;
            int quoteCount             = quotes.Count();

            if (quoteCount == 0)
            {
                await SendBasicErrorEmbedAsync($"This server's quote collection is empty.\nCreate some with `{server.CommandPrefix}addquote`.");

                return;
            }

            if (quoteCount <= 5)
            {
                var embed = new KaguyaEmbedBuilder
                {
                    Title = $"Quotes for {Context.Guild}"
                };

                foreach (Quote quote in quotes)
                {
                    embed.AddField($"Quote #{quote.Id}", QuoteString(quote));
                }

                await SendEmbedAsync(embed);

                return;
            }

            DateTime n = DateTime.Now;

            using (var s = new MemoryStream())
            {
                var sw = new StreamWriter(s);
                await sw.WriteLineAsync($"### Quotes for: {Context.Guild.Name} ###");

                foreach (Quote quote in quotes)
                {
                    await sw.WriteLineAsync(QuoteString(quote, true));
                }

                await sw.FlushAsync();

                s.Seek(0, SeekOrigin.Begin);

                try
                {
                    await Context.User.SendFileAsync(s,
                                                     $"Quotes_{Context.Guild.Name}-{n.Day}-{n.Month}-{n.Year}--{n.Hour:00}-{n.Minute:00}-{n.Second:00}.txt");
                }
                catch (Exception)
                {
                    throw new KaguyaSupportException("Failed to DM you the quotes. Do you allow DMs from me/bots?");
                }
            }

            await SendBasicSuccessEmbedAsync("All quotes have been sent to your DM.");
        }
Exemplo n.º 2
0
        public async Task Command()
        {
            User user = await DatabaseQueries.GetOrCreateUserAsync(Context.User.Id);

            var expiration = new KaguyaEmbedBuilder(EmbedColor.GOLD);

            if (user.IsPremium)
            {
                var field = new EmbedFieldBuilder
                {
                    Name = "Kaguya Premium"
                };

                var includedServers = new List <Server>();
                foreach (PremiumKey key in await DatabaseQueries.GetAllForUserAsync <PremiumKey>(user.UserId, x => x.ServerId != 0))
                {
                    SocketGuild guild  = Client.GetGuild(key.ServerId);
                    Server      server = await DatabaseQueries.GetOrCreateServerAsync(key.ServerId);

                    if (includedServers.Any(x => x.ServerId == server.ServerId) || server.PremiumExpiration < DateTime.Now.ToOADate())
                    {
                        continue;
                    }

                    field.Value += $"Server: `{(guild == null ? $"Unknown Server: (ID {key.ServerId})" : guild.Name)}`\n" +
                                   $"\tExpiration: `{DateTime.FromOADate(server.PremiumExpiration):MMMM dd, yyyy}`\n\n";

                    includedServers.Add(server); // Skips duplicates
                }

                field.Value += $"User Benefits Expiration: `{DateTime.FromOADate(user.PremiumExpiration):MMMM dd, yyyy}`";
                expiration.AddField(field);
            }

            if (expiration.Fields.Count != 0)
            {
                await SendEmbedAsync(expiration);
            }
            else
            {
                await SendBasicErrorEmbedAsync($"You currently have no active subscriptions. You may " +
                                               $"purchase one [here]({ConfigProperties.KAGUYA_STORE_URL}).");
            }
        }
Exemplo n.º 3
0
        public async Task RemoveRole(params string[] roleNames)
        {
            if (roleNames.Length > 1)
            {
                var embed = new KaguyaEmbedBuilder
                {
                    Title = "Roles Created"
                };

                foreach (string role in roleNames)
                {
                    embed.AddField("Role Created", $"`{role}` has been created.");
                    await Context.Guild.CreateRoleAsync(role, GuildPermissions.None, Color.Default, false, false, null);
                }

                await ReplyAsync(embed : embed.Build());
            }
            else if (roleNames.Count() == 1)
            {
                var embed = new KaguyaEmbedBuilder
                {
                    Description = $"**{Context.User.Mention} Successfully created role `{roleNames[0]}`**"
                };

                await Context.Guild.CreateRoleAsync(roleNames[0], GuildPermissions.None, Color.Default, false, false, null);

                await ReplyAsync(embed : embed.Build());
            }
            else
            {
                var embed = new KaguyaEmbedBuilder
                {
                    Description = $"Please specify a role to create."
                };

                embed.SetColor(EmbedColor.RED);

                await ReplyAsync(embed : embed.Build());
            }
        }
Exemplo n.º 4
0
        public async Task Command()
        {
            User user = await DatabaseQueries.GetOrCreateUserAsync(Context.User.Id);

            Reminder[] reminders = user.Reminders.Where(x => x.Expiration > DateTime.Now.ToOADate()).ToArray();
            var        embed     = new KaguyaEmbedBuilder();

            int i = 0;

            if (!(reminders.Length == 0))
            {
                foreach (Reminder reminder in reminders)
                {
                    i++;

                    string expirationStr = DateTime.FromOADate(reminder.Expiration).Humanize(false);

                    var fSb = new StringBuilder();
                    fSb.AppendLine($"Reminder: `{reminder.Text}`");
                    fSb.AppendLine($"Expires: `{expirationStr}`");

                    var field = new EmbedFieldBuilder
                    {
                        IsInline = false,
                        Name     = $"#{i}",
                        Value    = fSb.ToString()
                    };

                    embed.AddField(field);
                }

                embed.Footer = new EmbedFooterBuilder
                {
                    Text = "To delete a reminder, click the corresponding reaction."
                };
            }

            else
            {
                var field = new EmbedFieldBuilder
                {
                    Name  = "No reminders active",
                    Value = "You currently don't have any active reminders."
                };

                embed.AddField(field);
            }

            int j    = 0;
            var data = new ReactionCallbackData("", embed.Build());

            foreach (Reminder reminder in reminders)
            {
                data.AddCallBack(GlobalProperties.EmojisOneThroughNine()[j],
                                 async(c, r) =>
                {
                    await DatabaseQueries.DeleteAsync(reminder);
                    await ReplyAsync($"{Context.User.Mention} Successfully deleted reminder #{j}.");
                });

                j++;
            }

            await InlineReactionReplyAsync(data);
        }
Exemplo n.º 5
0
        private async Task AdminPanelMethod(ulong id)
        {
            KaguyaEmbedBuilder embed;
            User user = await DatabaseQueries.GetOrCreateUserAsync(id);

            SocketUser socketUser = Client.GetUser(id);

            embed = new KaguyaEmbedBuilder
            {
                Title  = $"Data for {socketUser}",
                Fields = new List <EmbedFieldBuilder>()
            };

            Type t = user.GetType();

            foreach (PropertyInfo pi in t.GetProperties().Where(x => x.PropertyType == typeof(int) &&
                                                                !x.Name.ToLower().Contains("active") &&
                                                                x.CanWrite))
            {
                string value = pi.GetValue(user, null)?.ToString() ?? "Null";

                if (pi.PropertyType == typeof(double))
                {
                    double.TryParse(pi.GetValue(user, null).ToString(), out double oaTime);
                    DateTime dt = DateTime.FromOADate(DateTime.Now.ToOADate() - oaTime);
                    value = dt.Humanize();

                    if ((DateTime.Now.Year - dt.Year) >= 5) //More than 5 years ago? We don't care.
                    {
                        value = "Null";
                    }
                }

                embed.AddField(new EmbedFieldBuilder
                {
                    Name     = pi.Name,
                    Value    = $"`{value}`",
                    IsInline = true
                });
            }

            await ReplyAsync(embed : embed.Build());

            await SendBasicSuccessEmbedAsync("What value would you like to modify?");

            SocketMessage query = await NextMessageAsync(true, true, TimeSpan.FromSeconds(120));

            foreach (PropertyInfo prop in t.GetProperties())
            {
                if (query.Content.ToLower() == prop.Name.ToLower())
                {
                    await SendBasicSuccessEmbedAsync("What would you like to change the value to?");

                    SocketMessage valMsg = await NextMessageAsync();

                    if (prop.PropertyType == typeof(int))
                    {
                        prop.SetValue(user, valMsg.Content.AsInteger(), null);
                    }
                    else
                    {
                        throw new InvalidOperationException($"The object's type cannot be parsed from this string. " +
                                                            $"Please review `AdminPanel.cs line 118`.");
                    }

                    await SendBasicSuccessEmbedAsync($"Successfully updated `{socketUser}`'s " +
                                                     $"`{prop.Name}` value to `{valMsg.Content}`");
                }
            }

            await DatabaseQueries.UpdateAsync(user);
        }