feat(dashboard): working ignored channels page

This commit is contained in:
sam 2024-10-20 15:20:22 +02:00
parent 1c43beb82f
commit bccf7caf34
Signed by: sam
GPG key ID: 5F3C3C1B3166639D
13 changed files with 304 additions and 8 deletions

View file

@ -14,12 +14,14 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
using Catalogger.Backend.Database.Redis;
using Catalogger.Backend.Extensions;
using Remora.Discord.API;
using Remora.Discord.API.Abstractions.Gateway.Events;
using Remora.Discord.API.Abstractions.Objects;
using Remora.Discord.API.Abstractions.Rest;
using Remora.Discord.API.Objects;
using Remora.Rest.Core;
using StackExchange.Redis;
namespace Catalogger.Backend.Cache.RedisCache;
@ -146,9 +148,55 @@ public class RedisMemberCache(
await SetInnerAsync(newMember.GuildID, member);
}
public async Task SetMemberNamesAsync(Snowflake guildId, IEnumerable<IGuildMember> members)
{
await redisService
.GetDatabase()
.HashSetAsync(
MemberNamesKey(guildId),
members
.Select(m => new HashEntry(m.User.Value.Tag(), m.User.Value.ID.ToString()))
.ToArray()
);
}
public async Task UpdateMemberNameAsync(
Snowflake guildId,
Snowflake userId,
string prevName,
string newName
) =>
await Task.WhenAll(
redisService.GetDatabase().HashDeleteAsync(MemberNamesKey(guildId), prevName),
redisService
.GetDatabase()
.HashSetAsync(MemberNamesKey(guildId), newName, userId.ToString())
);
public async Task<IEnumerable<(string Name, string Id)>> GetMemberNamesAsync(
Snowflake guildId,
string prefix
)
{
var entries = redisService
.GetDatabase()
.HashScanAsync(MemberNamesKey(guildId), $"{prefix}*", 50);
var names = new List<(string Name, string Id)>();
await foreach (var entry in entries)
names.Add((entry.Name, entry.Value)!);
return names;
}
public async Task TryRemoveMemberNameAsync(Snowflake guildId, string username) =>
await redisService.GetDatabase().HashDeleteAsync(MemberNamesKey(guildId), username);
private const string GuildCacheKey = "cached-guilds";
private static string GuildMembersKey(Snowflake guildId) => $"guild-members:{guildId}";
private static string MemberNamesKey(Snowflake guildId) => $"guild-member-names:{guildId}";
}
internal record RedisMember(