Skip to content

Commit dade9b2

Browse files
authored
Add GetRoleUserCounts REST method (#3195)
1 parent 5ca29fd commit dade9b2

File tree

5 files changed

+29
-0
lines changed

5 files changed

+29
-0
lines changed

src/Discord.Net.Core/Entities/Guilds/IGuild.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Discord.Audio;
22
using System;
33
using System.Collections.Generic;
4+
using System.Collections.Immutable;
45
using System.Globalization;
56
using System.IO;
67
using System.Threading.Tasks;
@@ -1469,5 +1470,10 @@ Task<IReadOnlyCollection<IApplicationCommand>> BulkOverwriteApplicationCommandsA
14691470
/// A task that represents the asynchronous creation operation. The task result contains a <see cref="BulkBanResult"/>.
14701471
/// </returns>
14711472
Task<BulkBanResult> BulkBanAsync(IEnumerable<ulong> userIds, int? deleteMessageSeconds = null, RequestOptions options = null);
1473+
1474+
/// <summary>
1475+
/// Gets a mapping of role IDs to the number of users that have each role.
1476+
/// </summary>
1477+
Task<ImmutableDictionary<ulong, int>> GetRoleUserCountsAsync(RequestOptions options = null);
14721478
}
14731479
}

src/Discord.Net.Rest/DiscordRestApiClient.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1711,6 +1711,15 @@ public async Task<GuildIncidentsData> ModifyGuildIncidentActionsAsync(ulong guil
17111711
return await SendJsonAsync<GuildIncidentsData>("PUT", () => $"guilds/{guildId}/incident-actions", args, ids, options: options).ConfigureAwait(false);
17121712
}
17131713

1714+
public async Task<Dictionary<ulong, int>> GetRoleUserCountsAsync(ulong guildId, RequestOptions options = null)
1715+
{
1716+
Preconditions.NotEqual(guildId, 0, nameof(guildId));
1717+
1718+
var ids = new BucketIds(guildId: guildId);
1719+
1720+
return await SendAsync<Dictionary<ulong, int>>("GET", () => $"guilds/{guildId}/roles/member-counts", ids, options: options);
1721+
}
1722+
17141723
#endregion
17151724

17161725
#region Guild Bans

src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,13 @@ public static async Task<RestRole> GetRoleAsync(IGuild guild, BaseDiscordClient
651651
return model is null ? null : RestRole.Create(client, guild, model);
652652
}
653653

654+
public static async Task<ImmutableDictionary<ulong, int>> GetRoleUserCountsAsync(IGuild guild, BaseDiscordClient client, RequestOptions options = null)
655+
{
656+
var model = await client.ApiClient.GetRoleUserCountsAsync(guild.Id, options);
657+
return model.ToImmutableDictionary();
658+
}
659+
660+
654661
#endregion
655662

656663
#region Users

src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ public Task RemoveBanAsync(ulong userId, RequestOptions options = null)
412412
/// <inheritdoc />
413413
public Task<BulkBanResult> BulkBanAsync(IEnumerable<ulong> userIds, int? deleteMessageSeconds = null, RequestOptions options = null)
414414
=> GuildHelper.BulkBanAsync(this, Discord, userIds.ToArray(), deleteMessageSeconds, options);
415+
416+
/// <inheritdoc />
417+
public Task<ImmutableDictionary<ulong, int>> GetRoleUserCountsAsync(RequestOptions options = null)
418+
=> GuildHelper.GetRoleUserCountsAsync(this, Discord, options);
415419
#endregion
416420

417421
#region Channels

src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,6 +1187,9 @@ internal SocketCustomSticker RemoveSticker(ulong id)
11871187
return sticker;
11881188
return null;
11891189
}
1190+
/// <inheritdoc />
1191+
public Task<ImmutableDictionary<ulong, int>> GetRoleUserCountsAsync(RequestOptions options = null)
1192+
=> GuildHelper.GetRoleUserCountsAsync(this, Discord, options);
11901193
#endregion
11911194

11921195
#region Users

0 commit comments

Comments
 (0)