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