Convert Sentry enrichers

This commit is contained in:
Ske
2021-01-31 14:50:10 +01:00
parent e06a6ecf85
commit 5a52abed77
3 changed files with 45 additions and 92 deletions

View File

@@ -1,9 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using DSharpPlus;
using DSharpPlus.EventArgs;
using Myriad.Extensions;
using Myriad.Gateway;
using Sentry;
@@ -15,82 +12,88 @@ namespace PluralKit.Bot
void Enrich(Scope scope, Shard shard, T evt);
}
public class SentryEnricher //:
// TODO!!!
// ISentryEnricher<MessageCreateEventArgs>,
// ISentryEnricher<MessageDeleteEventArgs>,
// ISentryEnricher<MessageUpdateEventArgs>,
// ISentryEnricher<MessageBulkDeleteEventArgs>,
// ISentryEnricher<MessageReactionAddEventArgs>
public class SentryEnricher:
ISentryEnricher<MessageCreateEvent>,
ISentryEnricher<MessageDeleteEvent>,
ISentryEnricher<MessageUpdateEvent>,
ISentryEnricher<MessageDeleteBulkEvent>,
ISentryEnricher<MessageReactionAddEvent>
{
private readonly Bot _bot;
public SentryEnricher(Bot bot)
{
_bot = bot;
}
// TODO: should this class take the Scope by dependency injection instead?
// Would allow us to create a centralized "chain of handlers" where this class could just be registered as an entry in
public void Enrich(Scope scope, Shard shard, MessageCreateEventArgs evt)
public void Enrich(Scope scope, Shard shard, MessageCreateEvent evt)
{
scope.AddBreadcrumb(evt.Message.Content, "event.message", data: new Dictionary<string, string>
scope.AddBreadcrumb(evt.Content, "event.message", data: new Dictionary<string, string>
{
{"user", evt.Author.Id.ToString()},
{"channel", evt.Channel.Id.ToString()},
{"guild", evt.Channel.GuildId.ToString()},
{"message", evt.Message.Id.ToString()},
{"channel", evt.ChannelId.ToString()},
{"guild", evt.GuildId.ToString()},
{"message", evt.Id.ToString()},
});
scope.SetTag("shard", shard.ShardInfo?.ShardId.ToString());
scope.SetTag("shard", shard.ShardInfo.ShardId.ToString());
// Also report information about the bot's permissions in the channel
// We get a lot of permission errors so this'll be useful for determining problems
var perms = evt.Channel.BotPermissions();
var perms = _bot.PermissionsIn(evt.ChannelId);
scope.AddBreadcrumb(perms.ToPermissionString(), "permissions");
}
public void Enrich(Scope scope, Shard shard, MessageDeleteEventArgs evt)
public void Enrich(Scope scope, Shard shard, MessageDeleteEvent evt)
{
scope.AddBreadcrumb("", "event.messageDelete",
data: new Dictionary<string, string>()
{
{"channel", evt.Channel.Id.ToString()},
{"guild", evt.Channel.GuildId.ToString()},
{"message", evt.Message.Id.ToString()},
{"channel", evt.ChannelId.ToString()},
{"guild", evt.GuildId.ToString()},
{"message", evt.Id.ToString()},
});
scope.SetTag("shard", shard.ShardInfo?.ShardId.ToString());
scope.SetTag("shard", shard.ShardInfo.ShardId.ToString());
}
public void Enrich(Scope scope, Shard shard, MessageUpdateEventArgs evt)
public void Enrich(Scope scope, Shard shard, MessageUpdateEvent evt)
{
scope.AddBreadcrumb(evt.Message.Content ?? "<unknown>", "event.messageEdit",
scope.AddBreadcrumb(evt.Content.Value ?? "<unknown>", "event.messageEdit",
data: new Dictionary<string, string>()
{
{"channel", evt.Channel.Id.ToString()},
{"guild", evt.Channel.GuildId.ToString()},
{"message", evt.Message.Id.ToString()}
{"channel", evt.ChannelId.ToString()},
{"guild", evt.GuildId.Value.ToString()},
{"message", evt.Id.ToString()}
});
scope.SetTag("shard", shard.ShardInfo?.ShardId.ToString());
scope.SetTag("shard", shard.ShardInfo.ShardId.ToString());
}
public void Enrich(Scope scope, Shard shard, MessageBulkDeleteEventArgs evt)
public void Enrich(Scope scope, Shard shard, MessageDeleteBulkEvent evt)
{
scope.AddBreadcrumb("", "event.messageDelete",
data: new Dictionary<string, string>()
{
{"channel", evt.Channel.Id.ToString()},
{"guild", evt.Channel.Id.ToString()},
{"messages", string.Join(",", evt.Messages.Select(m => m.Id))},
{"channel", evt.ChannelId.ToString()},
{"guild", evt.GuildId.ToString()},
{"messages", string.Join(",", evt.Ids)},
});
scope.SetTag("shard", shard.ShardInfo?.ShardId.ToString());
scope.SetTag("shard", shard.ShardInfo.ShardId.ToString());
}
public void Enrich(Scope scope, Shard shard, MessageReactionAddEventArgs evt)
public void Enrich(Scope scope, Shard shard, MessageReactionAddEvent evt)
{
scope.AddBreadcrumb("", "event.reaction",
data: new Dictionary<string, string>()
{
{"user", evt.User.Id.ToString()},
{"channel", (evt.Channel?.Id ?? 0).ToString()},
{"guild", (evt.Channel?.GuildId ?? 0).ToString()},
{"message", evt.Message.Id.ToString()},
{"user", evt.UserId.ToString()},
{"channel", evt.ChannelId.ToString()},
{"guild", (evt.GuildId ?? 0).ToString()},
{"message", evt.MessageId.ToString()},
{"reaction", evt.Emoji.Name}
});
scope.SetTag("shard", shard.ShardInfo?.ShardId.ToString());
scope.SetTag("shard", shard.ShardInfo.ShardId.ToString());
}
}
}