public async Task PruneAsync(IDiscordMessage e, int amount, ulong target) { Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong()); if (amount > 100) { await e.Channel.SendMessage(locale.GetString("miki_module_admin_prune_error_max")); return; } List <IDiscordMessage> messages = await e.Channel.GetMessagesAsync(amount); List <IDiscordMessage> deleteMessages = new List <IDiscordMessage>(); for (int i = 0; i < messages.Count(); i++) { if (messages.ElementAt(i)?.Author.Id == target) { if (messages.ElementAt(i).Timestamp.AddDays(14) > DateTime.Now) { deleteMessages.Add(messages.ElementAt(i)); } } } if (deleteMessages.Count > 0) { await e.Channel.DeleteMessagesAsync(deleteMessages); } Task.WaitAll(); IDiscordMessage m = await e.Channel.SendMessage(locale.GetString("miki_module_admin_prune_success", new object[] { deleteMessages.Count })); await Task.Delay(5000); await m.DeleteAsync(); }
public async Task PruneAsync(EventContext e, int _amount = 100, ulong _target = 0) { IDiscordGuildUser invoker = await e.Guild.GetSelfAsync(); if (!(await(e.Channel as IDiscordGuildChannel).GetPermissionsAsync(invoker)).HasFlag(GuildPermission.ManageMessages)) { e.Channel.QueueMessageAsync(e.GetResource("miki_module_admin_prune_error_no_access")); return; } int amount = _amount; string[] argsSplit = e.Arguments.ToString().Split(' '); ulong target = e.message.MentionedUserIds.Count > 0 ? (await e.Guild.GetUserAsync(e.message.MentionedUserIds.First())).Id : _target; if (!string.IsNullOrEmpty(argsSplit[0])) { if (int.TryParse(argsSplit[0], out amount)) { if (amount < 0) { Utils.ErrorEmbed(e, e.GetResource("miki_module_admin_prune_error_negative")) .ToEmbed().QueueToChannel(e.Channel); return; } if (amount > 100) { Utils.ErrorEmbed(e, e.GetResource("miki_module_admin_prune_error_max")) .ToEmbed().QueueToChannel(e.Channel); return; } } else { Utils.ErrorEmbed(e, e.GetResource("miki_module_admin_prune_error_parse")) .ToEmbed().QueueToChannel(e.Channel); return; } } await e.message.DeleteAsync(); // Delete the calling message before we get the message history. //IEnumerable<IDiscordMessage> messages = await e.Channel.GetMessagesAsync(amount).FlattenAsync(); List <IDiscordMessage> deleteMessages = new List <IDiscordMessage>(); //amount = messages.Count(); // Checks if the amount of messages to delete is more than the amount of messages availiable. //if (amount < 1) //{ // string prefix = await e.commandHandler.GetPrefixAsync(e.Guild.Id); // await e.message.DeleteAsync(); // e.ErrorEmbed(e.GetResource("miki_module_admin_prune_no_messages", prefix)) // .ToEmbed().QueueToChannel(e.Channel); // return; //} //for (int i = 0; i < amount; i++) //{ // if (target != 0 && messages.ElementAt(i)?.Author.Id != target) // continue; // if (messages.ElementAt(i).Timestamp.AddDays(14) > DateTime.Now) // { // deleteMessages.Add(messages.ElementAt(i)); // } //} //if (deleteMessages.Count > 0) //{ // await e.Channel.DeleteMessagesAsync(deleteMessages); //} Task.WaitAll(); string[] titles = new string[] { "POW!", "BANG!", "BAM!", "KAPOW!", "BOOM!", "ZIP!", "ZING!", "SWOOSH!", "POP!" }; EmbedBuilder embed = Utils.Embed; embed.Title = titles[MikiRandom.Next(titles.Length - 1)]; embed.Description = e.GetResource("miki_module_admin_prune_success", deleteMessages.Count); embed.Color = new Color(1, 1, 0.5f); IDiscordMessage _dMessage = await embed.ToEmbed().SendToChannel(e.Channel); Task.Run(async() => { await Task.Delay(5000); await _dMessage.DeleteAsync(); }); }
public async Task PruneAsync(EventContext e, int _amount = 100, ulong _target = 0) { Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong()); IDiscordUser invoker = await e.Guild.GetUserAsync(Bot.instance.Client.GetShard(0).CurrentUser.Id); if (!invoker.HasPermissions(e.Channel, DiscordGuildPermission.ManageMessages)) { await e.Channel.SendMessage(locale.GetString("miki_module_admin_prune_error_no_access")); return; } string[] argsSplit = e.arguments.Split(' '); int amount = string.IsNullOrEmpty(argsSplit[0]) ? _amount : int.Parse(argsSplit[0]) + 1; ulong target = e.message.MentionedUserIds.Count > 0 ? (await e.Guild.GetUserAsync(e.message.MentionedUserIds.First())).Id : _target; if (amount > 100) { await e.Channel.SendMessage(locale.GetString("miki_module_admin_prune_error_max")); return; } List <IDiscordMessage> messages = await e.Channel.GetMessagesAsync(amount); List <IDiscordMessage> deleteMessages = new List <IDiscordMessage>(); if (messages.Count < amount) { amount = messages.Count; // Checks if the amount of messages to delete is more than the amount of messages availiable. } if (amount <= 1) { // Update this to use localization. string prefix = await PrefixInstance.Default.GetForGuildAsync(e.Guild.Id); await e.message.DeleteAsync(); IDiscordEmbed errorMessage = Utils.ErrorEmbed(e, locale.GetString("miki_module_admin_prune_no_messages", new object[] { prefix })); await errorMessage.SendToChannel(e.Channel); return; } for (int i = 0; i < amount; i++) { if (target != 0 && messages[i]?.Author.Id != target) { continue; } if (messages[i].Timestamp.AddDays(14) > DateTime.Now) { deleteMessages.Add(messages[i]); } } if (deleteMessages.Count > 0) { await e.Channel.DeleteMessagesAsync(deleteMessages); } Task.WaitAll(); string[] titles = new string[] { "POW!", "BANG!", "BAM!", "KAPOW!", "BOOM!", "ZIP!", "ZING!", "SWOOSH!", "POP!" }; IDiscordEmbed embed = Utils.Embed; embed.Title = titles[MikiRandom.Next(titles.Length - 1)]; embed.Description = e.GetResource("miki_module_admin_prune_success", deleteMessages.Count - 1); embed.Color = IA.SDK.Color.GetColor(IAColor.YELLOW); IDiscordMessage _dMessage = await embed.SendToChannel(e.Channel); await Task.Delay(5000); await _dMessage.DeleteAsync(); }
public async Task PruneAsync(EventContext e, int _amount = 100, ulong _target = 0) { Locale locale = new Locale(e.Channel.Id); IDiscordSelfUser invoker = Bot.Instance.CurrentUser; if (!invoker.HasPermissions(e.Channel, DiscordGuildPermission.ManageMessages)) { e.Channel.QueueMessageAsync(locale.GetString("miki_module_admin_prune_error_no_access")); return; } int amount = _amount; string[] argsSplit = e.arguments.Split(' '); ulong target = e.message.MentionedUserIds.Count > 0 ? (await e.Guild.GetUserAsync(e.message.MentionedUserIds.First())).Id : _target; if (!string.IsNullOrEmpty(argsSplit[0])) { if (int.TryParse(argsSplit[0], out amount)) { if (amount < 0) { Utils.ErrorEmbed(e, locale.GetString("miki_module_admin_prune_error_negative")) .QueueToChannel(e.Channel); return; } if (amount > 100) { Utils.ErrorEmbed(e, locale.GetString("miki_module_admin_prune_error_max")) .QueueToChannel(e.Channel); return; } } else { Utils.ErrorEmbed(e, locale.GetString("miki_module_admin_prune_error_parse")) .QueueToChannel(e.Channel); return; } } await e.message.DeleteAsync(); // Delete the calling message before we get the message history. List <IDiscordMessage> messages = await e.Channel.GetMessagesAsync(amount); List <IDiscordMessage> deleteMessages = new List <IDiscordMessage>(); if (messages.Count < amount) { amount = messages.Count; // Checks if the amount of messages to delete is more than the amount of messages availMiki.Frameworkble. } if (amount <= 1) { string prefix = await PrefixInstance.Default.GetForGuildAsync(e.Guild.Id); await e.message.DeleteAsync(); e.ErrorEmbed(locale.GetString("miki_module_admin_prune_no_messages", prefix)) .QueueToChannel(e.Channel); return; } for (int i = 0; i < amount; i++) { if (target != 0 && messages[i]?.Author.Id != target) { continue; } if (messages[i].Timestamp.AddDays(14) > DateTime.Now) { deleteMessages.Add(messages[i]); } } if (deleteMessages.Count > 0) { await e.Channel.DeleteMessagesAsync(deleteMessages); } Task.WaitAll(); string[] titles = new string[] { "POW!", "BANG!", "BAM!", "KAPOW!", "BOOM!", "ZIP!", "ZING!", "SWOOSH!", "POP!" }; IDiscordEmbed embed = Utils.Embed; embed.Title = titles[MikiRandom.Next(titles.Length - 1)]; embed.Description = e.GetResource("miki_module_admin_prune_success", deleteMessages.Count); embed.Color = new Miki.Common.Color(1, 1, 0.5f); IDiscordMessage _dMessage = await embed.SendToChannel(e.Channel); await Task.Delay(5000); await _dMessage.DeleteAsync(); }
// TODO: probable rewrite at some point public async Task ValidateBet(EventContext e, Func <EventContext, int, Task> callback = null, int maxBet = 1000000) { ArgObject arg = e.Arguments.FirstOrDefault(); if (arg != null) { const int noAskLimit = 10000; using (MikiContext context = new MikiContext()) { User user = await context.Users.FindAsync(e.Author.Id.ToDbLong()); if (user == null) { // TODO: add user null error return; } string checkArg = arg.Argument; if (int.TryParse(checkArg, out int bet)) { } else if (checkArg.ToLower() == "all" || checkArg == "*") { bet = user.Currency > maxBet ? maxBet : user.Currency; } else { e.ErrorEmbed(e.GetResource("miki_error_gambling_parse_error")) .ToEmbed().QueueToChannel(e.Channel); return; } if (bet < 1) { e.ErrorEmbed(e.GetResource("miki_error_gambling_zero_or_less")) .ToEmbed().QueueToChannel(e.Channel); } else if (bet > user.Currency) { e.ErrorEmbed(e.GetResource("miki_mekos_insufficient")) .ToEmbed().QueueToChannel(e.Channel); } else if (bet > maxBet) { e.ErrorEmbed($"you cannot bet more than {maxBet} mekos!") .ToEmbed().QueueToChannel(e.Channel); return; } else if (bet > noAskLimit) { IDiscordMessage confirmationMessage = null; Framework.Events.CommandMap map = new Framework.Events.CommandMap(); map.AddCommand(new CommandEvent() { Name = "yes", ProcessCommand = async(ec) => { await confirmationMessage.DeleteAsync(); await ValidateGlitch(ec, callback, bet); } }); SimpleCommandHandler commandHandler = new SimpleCommandHandler(map); commandHandler.AddPrefix(""); e.EventSystem.GetCommandHandler <SessionBasedCommandHandler>() .AddSession(new CommandSession { ChannelId = e.Channel.Id, UserId = e.Author.Id }, commandHandler, new TimeSpan(0, 2, 0)); EmbedBuilder embed = Utils.Embed; embed.Description = $"Are you sure you want to bet **{bet}**? You currently have `{user.Currency}` mekos.\n\nType `yes` to confirm."; embed.Color = new Color(0.4f, 0.6f, 1f); confirmationMessage = await embed.ToEmbed().SendToChannel(e.Channel); } else { if (callback != null) { await callback(e, bet); } } } } else { e.ErrorEmbed(e.GetResource("miki_error_gambling_no_arg")) .ToEmbed().QueueToChannel(e.Channel); } }