Ejemplo n.º 1
0
        public async Task <RuntimeResult> DisableCurrentThread(string duration, [Remainder][Optional] string note)
        {
            if (CommandHandler.FeatureFlagDisabled(FeatureFlag.MODMAIL))
            {
                return(CustomResult.FromIgnored());
            }
            TimeSpan mutedTime = Extensions.GetTimeSpanFromString(duration);
            var      until     = DateTime.Now + mutedTime;
            var      manager   = new ModMailManager();
            await manager.LogForDisablingAction(Context.Channel, note, until, Context.User);

            manager.DisableModMailForUserWithExistingThread(Context.Channel, until);
            return(CustomResult.FromIgnored());
        }
Ejemplo n.º 2
0
        public async Task <RuntimeResult> ContactUser(IGuildUser user)
        {
            if (CommandHandler.FeatureFlagDisabled(FeatureFlag.MODMAIL))
            {
                return(CustomResult.FromIgnored());
            }
            var existing = ModMailManager.GetOpenModmailForUser(user);

            if (existing != null)
            {
                await Context.Channel.SendMessageAsync(embed : ModMailEmbedHandler.GetThreadAlreadyExistsEmbed(existing));
            }
            else
            {
                await ModMailManager.ContactUser(user, Context.Channel, true);
            }
            return(CustomResult.FromSuccess());
        }
Ejemplo n.º 3
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());
        }
Ejemplo n.º 4
0
        public async Task <RuntimeResult> DisableCurrentThread(params string[] arguments)
        {
            var    durationStr = arguments[0];
            string note;

            if (arguments.Length > 1)
            {
                string[] noteParts = new string[arguments.Length - 1];
                Array.Copy(arguments, 1, noteParts, 0, arguments.Length - 1);
                note = string.Join(" ", noteParts);
            }
            else
            {
                return(CustomResult.FromError("You need to provide a note."));
            }
            TimeSpan mutedTime = Extensions.GetTimeSpanFromString(durationStr);
            var      until     = DateTime.Now + mutedTime;
            var      manager   = new ModMailManager();
            await manager.LogForDisablingAction(Context.Channel, note, until);

            manager.DisableModMailForUserWithExistingThread(Context.Channel, until);

            return(CustomResult.FromIgnored());
        }