init
This commit is contained in:
commit
ded4f4db26
43 changed files with 2052 additions and 0 deletions
49
Catalogger.Backend/Bot/Responders/GuildCreateResponder.cs
Normal file
49
Catalogger.Backend/Bot/Responders/GuildCreateResponder.cs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
using System.Diagnostics;
|
||||
using Catalogger.Backend.Cache;
|
||||
using Catalogger.Backend.Database;
|
||||
using Catalogger.Backend.Database.Models;
|
||||
using Catalogger.Backend.Extensions;
|
||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||
using Remora.Discord.Gateway.Responders;
|
||||
using Remora.Results;
|
||||
|
||||
namespace Catalogger.Backend.Bot.Responders;
|
||||
|
||||
public class GuildCreateResponder(ILogger logger, DatabaseContext db, ChannelCacheService channelCache)
|
||||
: IResponder<IGuildCreate>
|
||||
{
|
||||
private readonly ILogger _logger = logger.ForContext<GuildCreateResponder>();
|
||||
|
||||
public async Task<Result> RespondAsync(IGuildCreate evt, CancellationToken ct = default)
|
||||
{
|
||||
ulong guildId;
|
||||
string? guildName = null;
|
||||
if (evt.Guild.TryPickT0(out var guild, out _))
|
||||
{
|
||||
_logger.Verbose("Received guild create for available guild {GuildId} ({Name})", guild.ID, guild.Name);
|
||||
guildId = guild.ID.ToUlong();
|
||||
guildName = guild.Name;
|
||||
|
||||
foreach (var c in guild.Channels) channelCache.AddChannel(c, guild.ID);
|
||||
}
|
||||
else if (evt.Guild.TryPickT1(out var unavailableGuild, out _))
|
||||
{
|
||||
_logger.Verbose("Received guild create for unavailable guild {GuildId}", unavailableGuild.ID);
|
||||
guildId = unavailableGuild.ID.ToUlong();
|
||||
}
|
||||
else throw new UnreachableException();
|
||||
|
||||
var tx = await db.Database.BeginTransactionAsync(ct);
|
||||
if (await db.Guilds.FindAsync([guildId], ct) != null) return Result.Success;
|
||||
|
||||
db.Add(new Guild
|
||||
{
|
||||
Id = guildId
|
||||
});
|
||||
await db.SaveChangesAsync(ct);
|
||||
await tx.CommitAsync(ct);
|
||||
|
||||
_logger.Information("Joined new guild {GuildId} ({Name})", guildId, guildName);
|
||||
return Result.Success;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue