mirror of
https://github.com/TeamOctolings/Octobot.git
synced 2025-01-31 09:09:00 +03:00
Use MemberData to determine a subscriber's role list (#165)
Closes #163 Discord's API sucks a lot. You ask it for a member, but it won't give you a member. This is why this PR updates the `GetEventNotificationMentions` method used to determine what roles and users should get pinged for a scheduled event. Previously, the bot asked Discord to provide the member for each subscriber to determine whether or not they have the event notification role (to avoid pinging people personally when the role would already ping them). With this pull request, the bot uses MemberData, it's own member storage, for that purpose (if you're wondering why, refer to the first two sentences)
This commit is contained in:
parent
a326adb680
commit
687883bbf8
2 changed files with 7 additions and 7 deletions
|
@ -286,7 +286,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
|
||||||
};
|
};
|
||||||
|
|
||||||
var contentResult = await _utility.GetEventNotificationMentions(
|
var contentResult = await _utility.GetEventNotificationMentions(
|
||||||
scheduledEvent, data.Settings, ct);
|
scheduledEvent, data, ct);
|
||||||
if (!contentResult.IsDefined(out var content))
|
if (!contentResult.IsDefined(out var content))
|
||||||
{
|
{
|
||||||
return Result.FromError(contentResult);
|
return Result.FromError(contentResult);
|
||||||
|
@ -412,7 +412,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
|
||||||
IGuildScheduledEvent scheduledEvent, GuildData data, CancellationToken ct)
|
IGuildScheduledEvent scheduledEvent, GuildData data, CancellationToken ct)
|
||||||
{
|
{
|
||||||
var contentResult = await _utility.GetEventNotificationMentions(
|
var contentResult = await _utility.GetEventNotificationMentions(
|
||||||
scheduledEvent, data.Settings, ct);
|
scheduledEvent, data, ct);
|
||||||
if (!contentResult.IsDefined(out var content))
|
if (!contentResult.IsDefined(out var content))
|
||||||
{
|
{
|
||||||
return Result.FromError(contentResult);
|
return Result.FromError(contentResult);
|
||||||
|
|
|
@ -160,16 +160,16 @@ public sealed class UtilityService : IHostedService
|
||||||
/// <param name="scheduledEvent">
|
/// <param name="scheduledEvent">
|
||||||
/// The scheduled event whose subscribers will be mentioned.
|
/// The scheduled event whose subscribers will be mentioned.
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <param name="settings">The settings of the guild containing the scheduled event</param>
|
/// <param name="data">The data of the guild containing the scheduled event.</param>
|
||||||
/// <param name="ct">The cancellation token for this operation.</param>
|
/// <param name="ct">The cancellation token for this operation.</param>
|
||||||
/// <returns>A result containing the string which may or may not have succeeded.</returns>
|
/// <returns>A result containing the string which may or may not have succeeded.</returns>
|
||||||
public async Task<Result<string>> GetEventNotificationMentions(
|
public async Task<Result<string>> GetEventNotificationMentions(
|
||||||
IGuildScheduledEvent scheduledEvent, JsonNode settings, CancellationToken ct = default)
|
IGuildScheduledEvent scheduledEvent, GuildData data, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
var builder = new StringBuilder();
|
var builder = new StringBuilder();
|
||||||
var role = GuildSettings.EventNotificationRole.Get(settings);
|
var role = GuildSettings.EventNotificationRole.Get(data.Settings);
|
||||||
var subscribersResult = await _eventApi.GetGuildScheduledEventUsersAsync(
|
var subscribersResult = await _eventApi.GetGuildScheduledEventUsersAsync(
|
||||||
scheduledEvent.GuildID, scheduledEvent.ID, withMember: true, ct: ct);
|
scheduledEvent.GuildID, scheduledEvent.ID, ct: ct);
|
||||||
if (!subscribersResult.IsDefined(out var subscribers))
|
if (!subscribersResult.IsDefined(out var subscribers))
|
||||||
{
|
{
|
||||||
return Result<string>.FromError(subscribersResult);
|
return Result<string>.FromError(subscribersResult);
|
||||||
|
@ -181,7 +181,7 @@ public sealed class UtilityService : IHostedService
|
||||||
}
|
}
|
||||||
|
|
||||||
builder = subscribers.Where(
|
builder = subscribers.Where(
|
||||||
subscriber => subscriber.GuildMember.IsDefined(out var member) && !member.Roles.Contains(role))
|
subscriber => !data.GetOrCreateMemberData(subscriber.User.ID).Roles.Contains(role.Value))
|
||||||
.Aggregate(builder, (current, subscriber) => current.Append($"{Mention.User(subscriber.User)} "));
|
.Aggregate(builder, (current, subscriber) => current.Append($"{Mention.User(subscriber.User)} "));
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue