public static async Task <IUserMessage> SendInteractiveMessageAsync ( this InteractiveService @this, [NotNull] SocketCommandContext context, [NotNull] IInteractiveMessage interactiveMessage, [CanBeNull] ISocketMessageChannel channel = null ) { channel = channel ?? context.Channel; var message = await interactiveMessage.DisplayAsync(channel); if (interactiveMessage.ReactionCallback is null) { return(message); } @this.AddReactionCallback(message, interactiveMessage.ReactionCallback); if (interactiveMessage.Timeout.HasValue) { // ReSharper disable once AssignmentIsFullyDiscarded _ = Task.Delay(interactiveMessage.Timeout.Value).ContinueWith(c => { @this.RemoveReactionCallback(interactiveMessage.Message); interactiveMessage.Message.DeleteAsync(); }); } return(message); }
/// <summary> /// The display async. /// </summary> /// <returns> /// The <see cref="Task"/>. /// </returns> public async Task DisplayAsync() { var message = await Context.Channel.SendMessageAsync(_data.Text, embed : _data.Embed).ConfigureAwait(false); Message = message; _interactive.AddReactionCallback(message, this); _ = Task.Run(async() => { foreach (var item in _data.Callbacks) { if (item.AddReaction == false) { continue; } await message.AddReactionAsync(item.Reaction); } }); if (Timeout.HasValue) { _ = Task.Delay(Timeout.Value) .ContinueWith(_ => { _interactive.RemoveReactionCallback(message); _data.TimeoutCallback?.Invoke(Context); }); } }
public async Task DisplayAsync() { var embed = BuildEmbed(); var message = await Context.Client.CreateMessageAsync(Context.Channel.Id, new CreateMessageParams { Embed = embed }); Message = message; _interactive.AddReactionCallback(message, this); _ = Task.Run(async() => { await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.First); await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.Back); await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.Next); await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.Last); await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.Stop); await Context.Client.CreateReactionAsync(Context.Channel.Id, message.Id, Options.Info); }); if (Timeout.HasValue) { _ = Task.Delay(Timeout.Value).ContinueWith(_ => { _interactive.RemoveReactionCallback(message); _ = Context.Client.DeleteMessageAsync(Context.Channel.Id, Message.Id); }); } }