refactor: only pass shard ID to event handlers instead of full shard object
This commit is contained in:
@@ -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;
|
||||
}
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user