Handle redactions from webhook users
This commit is contained in:
36
portal.go
36
portal.go
@@ -1100,6 +1100,10 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
|
||||
|
||||
channelID := portal.Key.ChannelID
|
||||
sess := sender.Session
|
||||
if sess == nil && portal.RelayWebhookID == "" {
|
||||
// TODO error message
|
||||
return
|
||||
}
|
||||
var threadID string
|
||||
|
||||
if editMXID := content.GetRelatesTo().GetReplaceID(); editMXID != "" && content.NewContent != nil {
|
||||
@@ -1579,11 +1583,22 @@ func (portal *Portal) handleMatrixRedaction(sender *User, evt *event.Event) {
|
||||
return
|
||||
}
|
||||
|
||||
// First look if we're redacting a message
|
||||
sess := sender.Session
|
||||
if sess == nil && portal.RelayWebhookID == "" {
|
||||
// TODO metrics
|
||||
return
|
||||
}
|
||||
|
||||
message := portal.bridge.DB.Message.GetByMXID(portal.Key, evt.Redacts)
|
||||
if message != nil {
|
||||
var err error
|
||||
// TODO add support for deleting individual attachments from messages
|
||||
err := sender.Session.ChannelMessageDelete(message.DiscordProtoChannelID(), message.DiscordID)
|
||||
if sess != nil {
|
||||
err = sess.ChannelMessageDelete(message.DiscordProtoChannelID(), message.DiscordID)
|
||||
} else {
|
||||
// TODO pre-validate that the message was sent by the webhook?
|
||||
err = relayClient.WebhookMessageDelete(portal.RelayWebhookID, portal.RelayWebhookSecret, message.DiscordID)
|
||||
}
|
||||
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||
if err == nil {
|
||||
message.Delete()
|
||||
@@ -1591,15 +1606,16 @@ func (portal *Portal) handleMatrixRedaction(sender *User, evt *event.Event) {
|
||||
return
|
||||
}
|
||||
|
||||
// Now check if it's a reaction.
|
||||
reaction := portal.bridge.DB.Reaction.GetByMXID(evt.Redacts)
|
||||
if reaction != nil && reaction.Channel == portal.Key {
|
||||
err := sender.Session.MessageReactionRemove(reaction.DiscordProtoChannelID(), reaction.MessageID, reaction.EmojiName, reaction.Sender)
|
||||
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||
if err == nil {
|
||||
reaction.Delete()
|
||||
if sess != nil {
|
||||
reaction := portal.bridge.DB.Reaction.GetByMXID(evt.Redacts)
|
||||
if reaction != nil && reaction.Channel == portal.Key {
|
||||
err := sess.MessageReactionRemove(reaction.DiscordProtoChannelID(), reaction.MessageID, reaction.EmojiName, reaction.Sender)
|
||||
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||
if err == nil {
|
||||
reaction.Delete()
|
||||
}
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
go portal.sendMessageMetrics(evt, errTargetNotFound, "Ignoring")
|
||||
|
||||
Reference in New Issue
Block a user