refactor: only pass shard ID to event handlers instead of full shard object

This commit is contained in:
spiral
2022-01-14 18:39:03 -05:00
parent bf80dd0988
commit 50a24f03a7
13 changed files with 74 additions and 70 deletions

View File

@@ -4,7 +4,7 @@ namespace PluralKit.Bot;
public interface IEventHandler<in T> where T : IGatewayEvent
{
Task Handle(Shard shard, T evt);
Task Handle(int shardId, T evt);
ulong? ErrorChannelFor(T evt, ulong userId) => null;
}

View File

@@ -16,7 +16,7 @@ public class InteractionCreated: IEventHandler<InteractionCreateEvent>
_services = services;
}
public async Task Handle(Shard shard, InteractionCreateEvent evt)
public async Task Handle(int shardId, InteractionCreateEvent evt)
{
if (evt.Type == Interaction.InteractionType.MessageComponent)
{

View File

@@ -63,9 +63,9 @@ public class MessageCreated: IEventHandler<MessageCreateEvent>
// We consider a message duplicate if it has the same ID as the previous message that hit the gateway
_lastMessageCache.GetLastMessage(msg.ChannelId)?.Current.Id == msg.Id;
public async Task Handle(Shard shard, MessageCreateEvent evt)
public async Task Handle(int shardId, MessageCreateEvent evt)
{
if (evt.Author.Id == shard.User?.Id) return;
if (evt.Author.Id == await _cache.GetOwnUser()) return;
if (evt.Type != Message.MessageType.Default && evt.Type != Message.MessageType.Reply) return;
if (IsDuplicateMessage(evt)) return;
@@ -90,9 +90,9 @@ public class MessageCreated: IEventHandler<MessageCreateEvent>
if (evt.Author.Bot || evt.WebhookId != null || evt.Author.System == true)
return;
if (await TryHandleCommand(shard, evt, guild, channel, ctx))
if (await TryHandleCommand(shardId, evt, guild, channel, ctx))
return;
await TryHandleProxy(shard, evt, guild, channel, ctx);
await TryHandleProxy(evt, guild, channel, ctx);
}
private async ValueTask<bool> TryHandleLogClean(MessageCreateEvent evt, MessageContext ctx)
@@ -105,14 +105,16 @@ public class MessageCreated: IEventHandler<MessageCreateEvent>
return true;
}
private async ValueTask<bool> TryHandleCommand(Shard shard, MessageCreateEvent evt, Guild? guild,
private async ValueTask<bool> TryHandleCommand(int shardId, MessageCreateEvent evt, Guild? guild,
Channel channel, MessageContext ctx)
{
var content = evt.Content;
if (content == null) return false;
var ourUserId = await _cache.GetOwnUser();
// Check for command prefix
if (!HasCommandPrefix(content, shard.User?.Id ?? default, out var cmdStart) || cmdStart == content.Length)
if (!HasCommandPrefix(content, ourUserId, out var cmdStart) || cmdStart == content.Length)
return false;
// Trim leading whitespace from command without actually modifying the string
@@ -125,7 +127,7 @@ public class MessageCreated: IEventHandler<MessageCreateEvent>
{
var system = ctx.SystemId != null ? await _repo.GetSystem(ctx.SystemId.Value) : null;
var config = ctx.SystemId != null ? await _repo.GetSystemConfig(ctx.SystemId.Value) : null;
await _tree.ExecuteCommand(new Context(_services, shard, guild, channel, evt, cmdStart, system, config, ctx));
await _tree.ExecuteCommand(new Context(_services, shardId, guild, channel, evt, cmdStart, system, config, ctx));
}
catch (PKError)
{
@@ -156,14 +158,14 @@ public class MessageCreated: IEventHandler<MessageCreateEvent>
return false;
}
private async ValueTask<bool> TryHandleProxy(Shard shard, MessageCreateEvent evt, Guild guild, Channel channel,
private async ValueTask<bool> TryHandleProxy(MessageCreateEvent evt, Guild guild, Channel channel,
MessageContext ctx)
{
var botPermissions = await _cache.PermissionsIn(channel.Id);
try
{
return await _proxy.HandleIncomingMessage(shard, evt, ctx, guild, channel, ctx.AllowAutoproxy,
return await _proxy.HandleIncomingMessage(evt, ctx, guild, channel, ctx.AllowAutoproxy,
botPermissions);
}

View File

@@ -24,7 +24,7 @@ public class MessageDeleted: IEventHandler<MessageDeleteEvent>, IEventHandler<Me
_logger = logger.ForContext<MessageDeleted>();
}
public Task Handle(Shard shard, MessageDeleteEvent evt)
public Task Handle(int shardId, MessageDeleteEvent evt)
{
// Delete deleted webhook messages from the data store
// Most of the data in the given message is wrong/missing, so always delete just to be sure.
@@ -43,7 +43,7 @@ public class MessageDeleted: IEventHandler<MessageDeleteEvent>, IEventHandler<Me
return Task.CompletedTask;
}
public Task Handle(Shard shard, MessageDeleteBulkEvent evt)
public Task Handle(int shardId, MessageDeleteBulkEvent evt)
{
// Same as above, but bulk
async Task Inner()

View File

@@ -41,7 +41,7 @@ public class MessageEdited: IEventHandler<MessageUpdateEvent>
_logger = logger.ForContext<MessageEdited>();
}
public async Task Handle(Shard shard, MessageUpdateEvent evt)
public async Task Handle(int shardId, MessageUpdateEvent evt)
{
if (evt.Author.Value?.Id == await _cache.GetOwnUser()) return;
@@ -69,7 +69,7 @@ public class MessageEdited: IEventHandler<MessageUpdateEvent>
try
{
await _proxy.HandleIncomingMessage(shard, equivalentEvt, ctx, allowAutoproxy: false, guild: guild,
await _proxy.HandleIncomingMessage(equivalentEvt, ctx, allowAutoproxy: false, guild: guild,
channel: channel, botPermissions: botPermissions);
}
// Catch any failed proxy checks so they get ignored in the global error handler

View File

@@ -42,7 +42,7 @@ public class ReactionAdded: IEventHandler<MessageReactionAddEvent>
_logger = logger.ForContext<ReactionAdded>();
}
public async Task Handle(Shard shard, MessageReactionAddEvent evt)
public async Task Handle(int shardId, MessageReactionAddEvent evt)
{
await TryHandleProxyMessageReactions(evt);
}