Example #1
0
 /// <summary>
 /// Gets users that reacted with this emoji
 /// </summary>
 /// <param name="emoji">Emoji to react with.</param>
 /// <returns></returns>
 public Task <IReadOnlyList <DiscordUser> > GetReactionsAsync(DiscordEmoji emoji)
 => this.Discord.ApiClient.GetReactionsAsync(this.Channel.Id, this.Id, emoji.ToReactionString());
Example #2
0
 /// <summary>
 /// Deletes another user's reaction.
 /// </summary>
 /// <param name="emoji">Emoji for the reaction you want to remove, either an emoji or name:id</param>
 /// <param name="user">Member you want to remove the reaction for</param>
 /// <param name="reason">Reason for audit logs.</param>
 /// <returns></returns>
 public Task DeleteReactionAsync(DiscordEmoji emoji, DiscordUser user, string reason = null)
 => this.Discord.ApiClient.DeleteUserReactionAsync(this.ChannelId, this.Id, user.Id, emoji.ToReactionString(), reason);
Example #3
0
 /// <summary>
 /// Deletes your own reaction
 /// </summary>
 /// <param name="emoji">Emoji for the reaction you want to remove, either an emoji or name:id</param>
 /// <returns></returns>
 public Task DeleteOwnReactionAsync(DiscordEmoji emoji)
 => this.Discord.ApiClient.DeleteOwnReactionAsync(this.ChannelId, this.Id, emoji.ToReactionString());
Example #4
0
 /// <summary>
 /// Creates a reaction to this message
 /// </summary>
 /// <param name="emoji">The emoji you want to react with, either an emoji or name:id</param>
 /// <returns></returns>
 public Task CreateReactionAsync(DiscordEmoji emoji)
 => this.Discord.ApiClient.CreateReactionAsync(this.ChannelId, this.Id, emoji.ToReactionString());
Example #5
0
        private async Task <IReadOnlyList <DiscordUser> > GetReactionsInternalAsync(DiscordEmoji emoji, int limit = 25, ulong?after = null)
        {
            if (limit < 0)
            {
                throw new ArgumentException("Cannot get a negative number of reactions' users.");
            }

            if (limit == 0)
            {
                return(new DiscordUser[0]);
            }

            var users     = new List <DiscordUser>(limit);
            var remaining = limit;
            var last      = after;

            int lastCount;

            do
            {
                var fetchSize = remaining > 100 ? 100 : remaining;
                var fetch     = await this.Discord.ApiClient.GetReactionsAsync(this.Channel.Id, this.Id, emoji.ToReactionString(), last, fetchSize).ConfigureAwait(false);

                lastCount  = fetch.Count;
                remaining -= lastCount;

                users.AddRange(fetch);
                last = fetch.LastOrDefault()?.Id;
            } while (remaining > 0 && lastCount > 0);

            return(new ReadOnlyCollection <DiscordUser>(users));
        }
Example #6
0
        private async Task <IReadOnlyList <DiscordUser> > GetReactionsInternalAsync(DiscordEmoji emoji, int limit = 25, ulong?before = null, ulong?after = null)
        {
            if (limit < 0)
            {
                throw new ArgumentException("Cannot get a negative number of reactions' users.");
            }

            if (limit == 0)
            {
                return(new DiscordUser[0]);
            }

            var   users     = new List <DiscordUser>(limit);
            var   remaining = limit;
            var   lastCount = 0;
            ulong?last      = null;
            var   isAfter   = after != null;

            do
            {
                var fetchSize = remaining > 100 ? 100 : remaining;
                var fetch     = await this.Discord.ApiClient.GetReactionsAsync(this.Channel.Id, this.Id, emoji.ToReactionString(), !isAfter?last ?? before : null, isAfter?last ?? after : null, fetchSize);

                lastCount  = fetch.Count;
                remaining -= lastCount;

                if (!isAfter)
                {
                    users.AddRange(fetch);
                    last = fetch.LastOrDefault()?.Id;
                }
                else
                {
                    users.InsertRange(0, fetch);
                    last = fetch.FirstOrDefault()?.Id;
                }
            } while (remaining > 0 && lastCount > 0);

            return(new ReadOnlyCollection <DiscordUser>(users));
        }