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."); }
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})."); } }
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()); } }
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); }
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); }