Example #1
0
        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();
        }
Example #2
0
        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();
            });
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        // 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);
            }
        }