/// <summary> /// Executes the action in <paramref name="actionOnStop"/>. /// </summary> /// <param name="message"> /// The message. /// </param> /// <param name="actionOnStop"> /// The action to do. /// </param> public async Task OnStopAsync(IUserMessage message, ActionOnTimeout actionOnStop) { Interactive.RemoveReactionCallback(message); switch (actionOnStop) { case ActionOnTimeout.DeleteMessage: await message.DeleteAsync(); break; case ActionOnTimeout.DeleteReactions: bool manageMessages = message.Channel is SocketGuildChannel guildChannel && guildChannel.GetUser(message.Author.Id).GetPermissions(guildChannel).ManageMessages; if (manageMessages) { await message.RemoveAllReactionsAsync(); } else { await message.RemoveReactionsAsync(message.Author, message.Reactions.Where(x => x.Value.IsMe).Select(x => x.Key).ToArray()); } break; case ActionOnTimeout.Nothing: default: break; } }
/// <summary> /// Executes the action in <paramref name="actionOnStop"/>. /// </summary> /// <param name="message"> /// The message. /// </param> /// <param name="actionOnStop"> /// The action to do. /// </param> /// <returns> /// A task representing the asynchronous operation. /// </returns> private async Task OnStopAsync(IMessage message, ActionOnTimeout actionOnStop) { if (!Interactive.ContainsKey(message.Id)) { return; } Interactive.RemoveReactionCallback(message); switch (actionOnStop) { case ActionOnTimeout.DeleteMessage: await message.DeleteAsync().ConfigureAwait(false); break; case ActionOnTimeout.DeleteReactions: bool manageMessages = !Context.IsPrivate && Context.Guild.CurrentUser.GetPermissions((IGuildChannel)Context.Channel).ManageMessages; if (manageMessages) { await message.RemoveAllReactionsAsync().ConfigureAwait(false); } break; case ActionOnTimeout.Nothing: default: break; } }