From 9013e01b495e774a1cf14b91e6518fff2d96ad03 Mon Sep 17 00:00:00 2001 From: Skip R Date: Mon, 9 Feb 2026 14:33:56 -0800 Subject: [PATCH] handlediscord: bridge message deletes --- pkg/connector/handlediscord.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/pkg/connector/handlediscord.go b/pkg/connector/handlediscord.go index 377f8c7..7f4847d 100644 --- a/pkg/connector/handlediscord.go +++ b/pkg/connector/handlediscord.go @@ -62,9 +62,13 @@ var ( _ bridgev2.RemoteMessage = (*DiscordMessage)(nil) _ bridgev2.RemoteMessageWithTransactionID = (*DiscordMessage)(nil) // _ bridgev2.RemoteEdit = (*DiscordMessage)(nil) - // _ bridgev2.RemoteMessageRemove = (*DiscordMessage)(nil) + _ bridgev2.RemoteMessageRemove = (*DiscordMessage)(nil) ) +func (m *DiscordMessage) GetTargetMessage() networkid.MessageID { + return discordid.MakeMessageID(m.Data.ID) +} + func (m *DiscordMessage) GetTransactionID() networkid.TransactionID { if m.Data.Nonce == "" { return "" @@ -81,19 +85,24 @@ func (m *DiscordMessage) GetID() networkid.MessageID { } func (m *DiscordMessage) GetSender() bridgev2.EventSender { + if m.Data.Author == nil { + // Message deletions don't have a sender associated with them. + return bridgev2.EventSender{} + } + return m.Client.makeEventSender(m.Data.Author) } -func (d *DiscordClient) wrapDiscordMessage(evt *discordgo.MessageCreate) DiscordMessage { +func (d *DiscordClient) wrapDiscordMessage(msg *discordgo.Message, typ bridgev2.RemoteEventType) DiscordMessage { return DiscordMessage{ DiscordEventMeta: &DiscordEventMeta{ - Type: bridgev2.RemoteEventMessage, + Type: typ, PortalKey: networkid.PortalKey{ - ID: discordid.MakePortalID(evt.ChannelID), + ID: discordid.MakePortalID(msg.ChannelID), Receiver: d.UserLogin.ID, }, }, - Data: evt.Message, + Data: msg, Client: d, } } @@ -208,10 +217,14 @@ func (d *DiscordClient) handleDiscordEvent(rawEvt any) { return } d.userCache.UpdateWithMessage(evt.Message) - wrappedEvt := d.wrapDiscordMessage(evt) + wrappedEvt := d.wrapDiscordMessage(evt.Message, bridgev2.RemoteEventMessage) d.UserLogin.Bridge.QueueRemoteEvent(d.UserLogin, &wrappedEvt) case *discordgo.UserUpdate: d.userCache.UpdateWithUserUpdate(evt) + case *discordgo.MessageDelete: + wrappedEvt := d.wrapDiscordMessage(evt.Message, bridgev2.RemoteEventMessageRemove) + d.UserLogin.Bridge.QueueRemoteEvent(d.UserLogin, &wrappedEvt) + // TODO *discordgo.MessageDeleteBulk case *discordgo.MessageReactionAdd: wrappedEvt := d.wrapDiscordReaction(evt.MessageReaction, true) d.UserLogin.Bridge.QueueRemoteEvent(d.UserLogin, &wrappedEvt)