Example #1
0
        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);
        }
Example #2
0
        /// <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);
                });
            }
        }
Example #3
0
        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);
                });
            }
        }