public async Task <ReactionCollectionContext> CreatePollAsync(DiscordMessage m, TimeSpan timeout, List <DiscordEmoji> Emojis) { foreach (var em in Emojis) { await m.CreateReactionAsync(em); } var rcc = new ReactionCollectionContext(); var tsc = new TaskCompletionSource <ReactionCollectionContext>(); var ct = new CancellationTokenSource(timeout); ct.Token.Register(() => tsc.TrySetResult(rcc)); AsyncEventHandler <MessageReactionAddEventArgs> handler1 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id && Emojis.Count(x => x == e.Emoji) > 0) { rcc.AddReaction(e.Emoji, e.User.Id); } }; this.Client.MessageReactionAdded += handler1; AsyncEventHandler <MessageReactionRemoveEventArgs> handler2 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id && Emojis.Count(x => x == e.Emoji) > 0) { rcc.RemoveReaction(e.Emoji, e.User.Id); } }; this.Client.MessageReactionRemoved += handler2; AsyncEventHandler <MessageReactionsClearEventArgs> handler3 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id) { rcc.ClearReactions(); foreach (var em in Emojis) { await m.CreateReactionAsync(em); } } }; this.Client.MessageReactionsCleared += handler3; var result = await tsc.Task; this.Client.MessageReactionAdded -= handler1; this.Client.MessageReactionRemoved -= handler2; this.Client.MessageReactionsCleared -= handler3; return(result); }
public async Task <ReactionCollectionContext> CollectReactionsAsync(DiscordMessage m, TimeSpan timeout) { var rcc = new ReactionCollectionContext(); var tsc = new TaskCompletionSource <ReactionCollectionContext>(); var ct = new CancellationTokenSource(timeout); ct.Token.Register(() => tsc.TrySetResult(rcc)); AsyncEventHandler <MessageReactionAddEventArgs> handler1 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id) { rcc.AddReaction(e.Emoji); } }; this.Client.MessageReactionAdded += handler1; AsyncEventHandler <MessageReactionRemoveEventArgs> handler2 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id) { rcc.RemoveReaction(e.Emoji); } }; this.Client.MessageReactionRemoved += handler2; AsyncEventHandler <MessageReactionsClearEventArgs> handler3 = async(e) => { await Task.Yield(); if (e.Message.Id == m.Id) { rcc.ClearReactions(); } }; this.Client.MessageReactionsCleared += handler3; var result = await tsc.Task; this.Client.MessageReactionAdded -= handler1; this.Client.MessageReactionRemoved -= handler2; this.Client.MessageReactionsCleared -= handler3; return(result); }
public async Task <ReactionCollectionContext> CollectReactionsAsync(DiscordMessage message, TimeSpan?timeoutoverride = null) { if (message == null) { throw new ArgumentNullException(nameof(message)); } TimeSpan timeout = Config.Timeout; if (timeoutoverride != null) { timeout = (TimeSpan)timeoutoverride; } var rcc = new ReactionCollectionContext(); var tsc = new TaskCompletionSource <ReactionCollectionContext>(); var ct = new CancellationTokenSource(timeout); ct.Token.Register(() => tsc.TrySetResult(rcc)); try { this.Client.MessageReactionAdded += ReactionAddHandler; this.Client.MessageReactionRemoved += ReactionRemoveHandler; this.Client.MessageReactionsCleared += ReactionClearHandler; var result = await tsc.Task; return(result); } catch (Exception) { throw; } finally { this.Client.MessageReactionAdded -= ReactionAddHandler; this.Client.MessageReactionRemoved -= ReactionRemoveHandler; this.Client.MessageReactionsCleared -= ReactionClearHandler; } #region Handlers async Task ReactionAddHandler(MessageReactionAddEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id) { rcc.AddReaction(e.Emoji); } } async Task ReactionRemoveHandler(MessageReactionRemoveEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id) { rcc.RemoveReaction(e.Emoji); } } async Task ReactionClearHandler(MessageReactionsClearEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id) { rcc.ClearReactions(); } } #endregion }
public async Task <ReactionCollectionContext> CreatePollAsync(DiscordMessage message, IEnumerable <DiscordEmoji> emojis, TimeSpan?timeoutoverride = null) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (emojis == null) { throw new ArgumentNullException(nameof(emojis)); } if (emojis.Count() < 1) { throw new InvalidOperationException("A minimum of one emoji is required to execute this method!"); } TimeSpan timeout = Config.Timeout; if (timeoutoverride != null) { timeout = (TimeSpan)timeoutoverride; } foreach (var em in emojis) { await message.CreateReactionAsync(em); } var rcc = new ReactionCollectionContext(); var tsc = new TaskCompletionSource <ReactionCollectionContext>(); var ct = new CancellationTokenSource(timeout); ct.Token.Register(() => tsc.TrySetResult(rcc)); try { this.Client.MessageReactionAdded += ReactionAddHandler; this.Client.MessageReactionRemoved += ReactionRemoveHandler; this.Client.MessageReactionsCleared += ReactionClearHandler; var result = await tsc.Task; return(result); } catch (Exception) { throw; } finally { this.Client.MessageReactionAdded -= ReactionAddHandler; this.Client.MessageReactionRemoved -= ReactionRemoveHandler; this.Client.MessageReactionsCleared -= ReactionClearHandler; } #region Handlers async Task ReactionAddHandler(MessageReactionAddEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id && emojis.Count(x => x == e.Emoji) > 0) { rcc.AddReaction(e.Emoji, e.User.Id); } } async Task ReactionRemoveHandler(MessageReactionRemoveEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id && emojis.Count(x => x == e.Emoji) > 0) { rcc.RemoveReaction(e.Emoji, e.User.Id); } } async Task ReactionClearHandler(MessageReactionsClearEventArgs e) { await Task.Yield(); if (e.Message.Id == message.Id) { rcc.ClearReactions(); foreach (var em in emojis) { await message.CreateReactionAsync(em); } } } #endregion }