feat: more log context
This commit is contained in:
parent
4047df8610
commit
7749c9d9e2
21 changed files with 159 additions and 15 deletions
|
|
@ -17,7 +17,6 @@ using Catalogger.Backend.Cache.InMemoryCache;
|
||||||
using Catalogger.Backend.Database.Repositories;
|
using Catalogger.Backend.Database.Repositories;
|
||||||
using Catalogger.Backend.Extensions;
|
using Catalogger.Backend.Extensions;
|
||||||
using Catalogger.Backend.Services;
|
using Catalogger.Backend.Services;
|
||||||
using Microsoft.Extensions.Logging.Configuration;
|
|
||||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||||
using Remora.Discord.API.Abstractions.Objects;
|
using Remora.Discord.API.Abstractions.Objects;
|
||||||
using Remora.Discord.Extensions.Embeds;
|
using Remora.Discord.Extensions.Embeds;
|
||||||
|
|
@ -36,6 +35,8 @@ public class ChannelCreateResponder(
|
||||||
{
|
{
|
||||||
public async Task<Result> RespondAsync(IChannelCreate ch, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IChannelCreate ch, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(ch);
|
||||||
|
|
||||||
if (!ch.GuildID.IsDefined())
|
if (!ch.GuildID.IsDefined())
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
channelCache.Set(ch);
|
channelCache.Set(ch);
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ public class ChannelDeleteResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IChannelDelete evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IChannelDelete evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var __ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
if (!evt.GuildID.IsDefined())
|
if (!evt.GuildID.IsDefined())
|
||||||
{
|
{
|
||||||
_logger.Debug("Deleted channel {ChannelId} is not in a guild", evt.ID);
|
_logger.Debug("Deleted channel {ChannelId} is not in a guild", evt.ID);
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@ public class ChannelUpdateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IChannelUpdate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IChannelUpdate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!channelCache.TryGet(evt.ID, out var oldChannel))
|
if (!channelCache.TryGet(evt.ID, out var oldChannel))
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
using Catalogger.Backend.Extensions;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Remora.Commands.Services;
|
using Remora.Commands.Services;
|
||||||
using Remora.Commands.Tokenization;
|
using Remora.Commands.Tokenization;
|
||||||
|
|
@ -23,6 +24,7 @@ using Remora.Discord.Commands.Responders;
|
||||||
using Remora.Discord.Commands.Services;
|
using Remora.Discord.Commands.Services;
|
||||||
using Remora.Discord.Gateway.Responders;
|
using Remora.Discord.Gateway.Responders;
|
||||||
using Remora.Results;
|
using Remora.Results;
|
||||||
|
using Serilog.Context;
|
||||||
|
|
||||||
namespace Catalogger.Backend.Bot.Responders;
|
namespace Catalogger.Backend.Bot.Responders;
|
||||||
|
|
||||||
|
|
@ -57,21 +59,34 @@ public class CustomInteractionResponder(
|
||||||
treeNameResolver
|
treeNameResolver
|
||||||
);
|
);
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(
|
public async Task<Result> RespondAsync(IInteractionCreate evt, CancellationToken ct = default)
|
||||||
IInteractionCreate gatewayEvent,
|
|
||||||
CancellationToken ct = default
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (config.Discord.TestMode)
|
if (config.Discord.TestMode)
|
||||||
{
|
{
|
||||||
_logger.Information(
|
_logger.Information(
|
||||||
"Not responding to interaction create event {InteractionId} in {ChannelId} as test mode is enabled",
|
"Not responding to interaction create event {InteractionId} in {ChannelId} as test mode is enabled",
|
||||||
gatewayEvent.ID,
|
evt.ID,
|
||||||
gatewayEvent.Channel.Map(c => c.ID).OrDefault()
|
evt.Channel.Map(c => c.ID).OrDefault()
|
||||||
);
|
);
|
||||||
return Result.Success;
|
return Result.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await _inner.RespondAsync(gatewayEvent, ct);
|
using var _ = LogUtils.PushProperties(
|
||||||
|
("Event", nameof(IInteractionCreate)),
|
||||||
|
("InteractionId", evt.ID),
|
||||||
|
("GuildId", evt.GuildID),
|
||||||
|
("UserId", evt.User.Map(u => u.ID)),
|
||||||
|
("MemberId", evt.Member.Map(m => m.User.Map(u => u.ID).OrDefault())),
|
||||||
|
("ChannelId", evt.Channel.Map(c => c.ID)),
|
||||||
|
("InteractionType", evt.Type)
|
||||||
|
);
|
||||||
|
|
||||||
|
using var __ = LogContext.PushProperty(
|
||||||
|
"InteractionData",
|
||||||
|
evt.Data.HasValue ? (object?)evt.Data.Value : null,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return await _inner.RespondAsync(evt, ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
using Catalogger.Backend.Cache.InMemoryCache;
|
using Catalogger.Backend.Cache.InMemoryCache;
|
||||||
|
using Catalogger.Backend.Extensions;
|
||||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||||
using Remora.Discord.API.Abstractions.Objects;
|
using Remora.Discord.API.Abstractions.Objects;
|
||||||
using Remora.Discord.Gateway.Responders;
|
using Remora.Discord.Gateway.Responders;
|
||||||
|
|
@ -28,6 +29,8 @@ public class AuditLogResponder(AuditLogCache auditLogCache, ILogger logger)
|
||||||
|
|
||||||
public Task<Result> RespondAsync(IGuildAuditLogEntryCreate evt, CancellationToken ct = default)
|
public Task<Result> RespondAsync(IGuildAuditLogEntryCreate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
if (evt.TargetID == null || evt.UserID == null)
|
if (evt.TargetID == null || evt.UserID == null)
|
||||||
return Task.FromResult(Result.Success);
|
return Task.FromResult(Result.Success);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ public class GuildBanAddResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildBanAdd evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildBanAdd evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
var guildConfig = await guildRepository.GetAsync(evt.GuildID);
|
var guildConfig = await guildRepository.GetAsync(evt.GuildID);
|
||||||
|
|
||||||
// Delay 2 seconds for the audit log
|
// Delay 2 seconds for the audit log
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ public class GuildBanRemoveResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildBanRemove evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildBanRemove evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
var guildConfig = await guildRepository.GetAsync(evt.GuildID);
|
var guildConfig = await guildRepository.GetAsync(evt.GuildID);
|
||||||
|
|
||||||
// Delay 2 seconds for the audit log
|
// Delay 2 seconds for the audit log
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@ public class GuildCreateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildCreate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildCreate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
ulong guildId;
|
ulong guildId;
|
||||||
string? guildName = null;
|
string? guildName = null;
|
||||||
if (evt.Guild.TryPickT0(out var guild, out var unavailableGuild))
|
if (evt.Guild.TryPickT0(out var guild, out var unavailableGuild))
|
||||||
|
|
@ -101,6 +103,8 @@ public class GuildCreateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildDelete evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildDelete evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
if (evt.IsUnavailable.OrDefault(false))
|
if (evt.IsUnavailable.OrDefault(false))
|
||||||
{
|
{
|
||||||
_logger.Debug("Guild {GuildId} became unavailable", evt.ID);
|
_logger.Debug("Guild {GuildId} became unavailable", evt.ID);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ public class GuildEmojisUpdateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildEmojisUpdate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildEmojisUpdate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!emojiCache.TryGet(evt.GuildID, out var oldEmoji))
|
if (!emojiCache.TryGet(evt.GuildID, out var oldEmoji))
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
using Catalogger.Backend.Cache;
|
using Catalogger.Backend.Cache;
|
||||||
|
using Catalogger.Backend.Extensions;
|
||||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||||
using Remora.Discord.Gateway.Responders;
|
using Remora.Discord.Gateway.Responders;
|
||||||
using Remora.Results;
|
using Remora.Results;
|
||||||
|
|
@ -27,6 +28,8 @@ public class GuildMembersChunkResponder(ILogger logger, IMemberCache memberCache
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildMembersChunk evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildMembersChunk evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
_logger.Debug(
|
_logger.Debug(
|
||||||
"Received chunk {ChunkIndex} / {ChunkCount} for guild {GuildId}",
|
"Received chunk {ChunkIndex} / {ChunkCount} for guild {GuildId}",
|
||||||
evt.ChunkIndex + 1,
|
evt.ChunkIndex + 1,
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ public class GuildUpdateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildUpdate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildUpdate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!guildCache.TryGet(evt.ID, out var oldGuild))
|
if (!guildCache.TryGet(evt.ID, out var oldGuild))
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ public class InviteCreateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IInviteCreate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IInviteCreate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
var guildId = evt.GuildID.Value;
|
var guildId = evt.GuildID.Value;
|
||||||
|
|
||||||
var invitesResult = await guildApi.GetGuildInvitesAsync(guildId, ct);
|
var invitesResult = await guildApi.GetGuildInvitesAsync(guildId, ct);
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ public class InviteDeleteResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IInviteDelete evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IInviteDelete evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
var guildId = evt.GuildID.Value;
|
var guildId = evt.GuildID.Value;
|
||||||
|
|
||||||
var dbDeleteCount = await inviteRepository.DeleteInviteAsync(guildId, evt.Code);
|
var dbDeleteCount = await inviteRepository.DeleteInviteAsync(guildId, evt.Code);
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ public class GuildMemberAddResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildMemberAdd member, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildMemberAdd member, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(member);
|
||||||
|
|
||||||
await memberCache.SetAsync(member.GuildID, member);
|
await memberCache.SetAsync(member.GuildID, member);
|
||||||
await memberCache.SetMemberNamesAsync(member.GuildID, [member]);
|
await memberCache.SetMemberNamesAsync(member.GuildID, [member]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ public class GuildMemberRemoveResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildMemberRemove evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildMemberRemove evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var embed = new EmbedBuilder()
|
var embed = new EmbedBuilder()
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ public class GuildMemberUpdateResponder(
|
||||||
CancellationToken ct = default
|
CancellationToken ct = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(newMember);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var oldMember = await memberCache.TryGetAsync(newMember.GuildID, newMember.User.ID);
|
var oldMember = await memberCache.TryGetAsync(newMember.GuildID, newMember.User.ID);
|
||||||
|
|
|
||||||
|
|
@ -26,19 +26,19 @@ public class ReadyResponder(ILogger logger, WebhookExecutorService webhookExecut
|
||||||
{
|
{
|
||||||
private readonly ILogger _logger = logger.ForContext<ReadyResponder>();
|
private readonly ILogger _logger = logger.ForContext<ReadyResponder>();
|
||||||
|
|
||||||
public Task<Result> RespondAsync(IReady gatewayEvent, CancellationToken ct = default)
|
public Task<Result> RespondAsync(IReady evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
var shardId = gatewayEvent.Shard.TryGet(out var shard)
|
using var _ = LogUtils.Enrich(evt);
|
||||||
? (shard.ShardID, shard.ShardCount)
|
|
||||||
: (0, 1);
|
var shardId = evt.Shard.TryGet(out var shard) ? (shard.ShardID, shard.ShardCount) : (0, 1);
|
||||||
_logger.Information(
|
_logger.Information(
|
||||||
"Ready as {User} on shard {ShardId}/{ShardCount}",
|
"Ready as {User} on shard {ShardId}/{ShardCount}",
|
||||||
gatewayEvent.User.Tag(),
|
evt.User.Tag(),
|
||||||
shardId.Item1,
|
shardId.Item1,
|
||||||
shardId.Item2
|
shardId.Item2
|
||||||
);
|
);
|
||||||
if (shardId.Item1 == 0)
|
if (shardId.Item1 == 0)
|
||||||
webhookExecutorService.SetSelfUser(gatewayEvent.User);
|
webhookExecutorService.SetSelfUser(evt.User);
|
||||||
|
|
||||||
return Task.FromResult(Result.Success);
|
return Task.FromResult(Result.Success);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ public class RoleCreateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildRoleCreate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildRoleCreate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
_logger.Debug("Received new role {RoleId} in guild {GuildId}", evt.Role.ID, evt.GuildID);
|
_logger.Debug("Received new role {RoleId} in guild {GuildId}", evt.Role.ID, evt.GuildID);
|
||||||
roleCache.Set(evt.Role, evt.GuildID);
|
roleCache.Set(evt.Role, evt.GuildID);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ public class RoleDeleteResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildRoleDelete evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildRoleDelete evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var __ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!roleCache.TryGet(evt.RoleID, out var role))
|
if (!roleCache.TryGet(evt.RoleID, out var role))
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ public class RoleUpdateResponder(
|
||||||
|
|
||||||
public async Task<Result> RespondAsync(IGuildRoleUpdate evt, CancellationToken ct = default)
|
public async Task<Result> RespondAsync(IGuildRoleUpdate evt, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
using var _ = LogUtils.Enrich(evt);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var newRole = evt.Role;
|
var newRole = evt.Role;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using Remora.Discord.API.Abstractions.Gateway.Events;
|
using Remora.Discord.API.Abstractions.Gateway.Events;
|
||||||
|
using Remora.Discord.API.Abstractions.Objects;
|
||||||
using Remora.Rest.Core;
|
using Remora.Rest.Core;
|
||||||
using Serilog.Context;
|
using Serilog.Context;
|
||||||
|
|
||||||
|
|
@ -19,7 +20,13 @@ public static class LogUtils
|
||||||
("ChannelId", md.ChannelID),
|
("ChannelId", md.ChannelID),
|
||||||
("MessageId", md.ID)
|
("MessageId", md.ID)
|
||||||
),
|
),
|
||||||
IMessageUpdate mc => PushProperties(
|
IMessageUpdate mu => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", mu.GuildID),
|
||||||
|
("ChannelId", mu.ChannelID),
|
||||||
|
("MessageId", mu.ID)
|
||||||
|
),
|
||||||
|
IMessageCreate mc => PushProperties(
|
||||||
type,
|
type,
|
||||||
("GuildId", mc.GuildID),
|
("GuildId", mc.GuildID),
|
||||||
("ChannelId", mc.ChannelID),
|
("ChannelId", mc.ChannelID),
|
||||||
|
|
@ -31,6 +38,93 @@ public static class LogUtils
|
||||||
("ChannelId", mdb.ChannelID),
|
("ChannelId", mdb.ChannelID),
|
||||||
("MessageIds", mdb.IDs)
|
("MessageIds", mdb.IDs)
|
||||||
),
|
),
|
||||||
|
IGuildRoleCreate grc => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", grc.GuildID),
|
||||||
|
("RoleId", grc.Role.ID)
|
||||||
|
),
|
||||||
|
IGuildRoleUpdate gru => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gru.GuildID),
|
||||||
|
("RoleId", gru.Role.ID)
|
||||||
|
),
|
||||||
|
IGuildRoleDelete grd => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", grd.GuildID),
|
||||||
|
("RoleId", grd.RoleID)
|
||||||
|
),
|
||||||
|
IGuildMemberAdd gma => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gma.GuildID),
|
||||||
|
("UserId", gma.User.Map(u => u.ID))
|
||||||
|
),
|
||||||
|
IGuildMemberUpdate gmu => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gmu.GuildID),
|
||||||
|
("UserId", gmu.User.ID)
|
||||||
|
),
|
||||||
|
IGuildMemberRemove gmr => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gmr.GuildID),
|
||||||
|
("UserId", gmr.User.ID)
|
||||||
|
),
|
||||||
|
IInviteCreate ic => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", ic.GuildID),
|
||||||
|
("ChannelId", ic.ChannelID),
|
||||||
|
("InviteCode", ic.Code)
|
||||||
|
),
|
||||||
|
IInviteDelete id => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", id.GuildID),
|
||||||
|
("ChannelId", id.ChannelID),
|
||||||
|
("Code", id.Code)
|
||||||
|
),
|
||||||
|
IChannelCreate cc => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", cc.GuildID),
|
||||||
|
("ChannelId", cc.ID)
|
||||||
|
),
|
||||||
|
IChannelUpdate cu => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", cu.GuildID),
|
||||||
|
("ChannelId", cu.ID)
|
||||||
|
),
|
||||||
|
IChannelDelete cd => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", cd.GuildID),
|
||||||
|
("ChannelId", cd.ID)
|
||||||
|
),
|
||||||
|
IGuildAuditLogEntryCreate ale => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", ale.GuildID),
|
||||||
|
("AuditLogEntryId", ale.ID),
|
||||||
|
("ActionType", ale.ActionType)
|
||||||
|
),
|
||||||
|
IGuildBanAdd gba => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gba.GuildID),
|
||||||
|
("UserId", gba.User.ID)
|
||||||
|
),
|
||||||
|
IGuildBanRemove gbr => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gbr.GuildID),
|
||||||
|
("UserId", gbr.User.ID)
|
||||||
|
),
|
||||||
|
IGuildCreate gc => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gc.Guild.Match(g => g.ID, g => g.ID))
|
||||||
|
),
|
||||||
|
IGuildDelete gd => PushProperties(type, ("GuildId", gd.ID)),
|
||||||
|
IGuildEmojisUpdate geu => PushProperties(type, ("GuildId", geu.GuildID)),
|
||||||
|
IGuildMembersChunk gmc => PushProperties(
|
||||||
|
type,
|
||||||
|
("GuildId", gmc.GuildID),
|
||||||
|
("MemberCount", gmc.Members.Count),
|
||||||
|
("ChunkIndex", gmc.ChunkIndex),
|
||||||
|
("ChunkCount", gmc.ChunkCount)
|
||||||
|
),
|
||||||
|
IGuildUpdate gu => PushProperties(type, ("GuildId", gu.ID)),
|
||||||
_ => PushProperties(type),
|
_ => PushProperties(type),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue