Ejemplo n.º 1
0
        public async Task <RuntimeResult> PurgeAsync([Remainder] double delmsg)
        {
            if (CommandHandler.FeatureFlagDisabled(FeatureFlag.MODERATION))
            {
                return(CustomResult.FromIgnored());
            }
            if (delmsg > 100 || delmsg <= 0)
            {
                return(CustomResult.FromError("Use a number between 1-100"));
            }

            int   delmsgInt  = (int)delmsg;
            ulong oldmessage = Context.Message.Id;

            var isInModmailContext = Global.ModMailThreads.Exists(ch => ch.ChannelId == Context.Channel.Id);

            // Download all messages that the user asks for to delete
            var messages = await Context.Channel.GetMessagesAsync(oldmessage, Direction.Before, delmsgInt).FlattenAsync();

            var saveMessagesToDelete = new List <IMessage>();

            if (isInModmailContext)
            {
                var manager = new ModMailManager();
                foreach (var message in messages)
                {
                    var messageCanBeDeleted = await manager.DeleteMessageInThread(Context.Channel.Id, message.Id, false);

                    if (messageCanBeDeleted)
                    {
                        saveMessagesToDelete.Add(message);
                    }
                }
            }
            else
            {
                saveMessagesToDelete.AddRange(messages);
            }
            await((ITextChannel)Context.Channel).DeleteMessagesAsync(saveMessagesToDelete);

            await Context.Message.DeleteAsync();

            return(CustomResult.FromIgnored());
        }