Ejemplo n.º 1
0
        public Task <IReaction[]> AwaitReactionsAsync(IMessage message, ReactionFilter reactionFilter = null, int maxReactions = int.MaxValue, int maxTime = 10000)
        {
            TaskCompletionSource <IReaction[]> promise = new TaskCompletionSource <IReaction[]>();

            Task.Run(() =>
            {
                CancellationTokenSource cts = new CancellationTokenSource();
                List <IReaction> result     = new List <IReaction>();
                Task ReactionHandler(Cacheable <IUserMessage, ulong> m, IChannel c, SocketReaction reaction)
                {
                    if (message.Id != m.Id)
                    {
                        return(Task.CompletedTask);
                    }
                    if (reactionFilter != null && !reactionFilter(reaction))
                    {
                        return(Task.CompletedTask);
                    }
                    result.Add(reaction);
                    if (result.Count >= maxReactions)
                    {
                        cts.Cancel();
                        return(Task.CompletedTask);
                    }
                    return(Task.CompletedTask);
                }
                _client.ReactionAdded += ReactionHandler;
                _ = Task.Run(async() =>
                {
                    try
                    {
                        await Task.Delay(maxTime, cts.Token);
                    }
                    catch { }
                    _client.ReactionAdded -= ReactionHandler;
                    promise.TrySetResult(result.ToArray());
                });
            });

            return(promise.Task);
        }
 public ReactionAttribute(ReactionFilter selection, params string[] reactionName)
 {
     FilterMode    = selection;
     ReactionNames = reactionName ?? Array.Empty <string>();
 }
Ejemplo n.º 3
0
 public ReactionFiltering WithFilter(ReactionFilter filter)
 {
     _filter = filter;
     return(this);
 }
Ejemplo n.º 4
0
        internal ReactionFiltering WithActivityData()
        {
            _filter = (_filter == null) ? ReactionFilter.Where().WithActivityData() : _filter.WithActivityData();

            return(this);
        }