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
|
channelID := portal.Key.ChannelID
|
||||||
sess := sender.Session
|
sess := sender.Session
|
||||||
|
if sess == nil && portal.RelayWebhookID == "" {
|
||||||
|
// TODO error message
|
||||||
|
return
|
||||||
|
}
|
||||||
var threadID string
|
var threadID string
|
||||||
|
|
||||||
if editMXID := content.GetRelatesTo().GetReplaceID(); editMXID != "" && content.NewContent != nil {
|
if editMXID := content.GetRelatesTo().GetReplaceID(); editMXID != "" && content.NewContent != nil {
|
||||||
@@ -1579,11 +1583,22 @@ func (portal *Portal) handleMatrixRedaction(sender *User, evt *event.Event) {
|
|||||||
return
|
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)
|
message := portal.bridge.DB.Message.GetByMXID(portal.Key, evt.Redacts)
|
||||||
if message != nil {
|
if message != nil {
|
||||||
|
var err error
|
||||||
// TODO add support for deleting individual attachments from messages
|
// 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")
|
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
message.Delete()
|
message.Delete()
|
||||||
@@ -1591,15 +1606,16 @@ func (portal *Portal) handleMatrixRedaction(sender *User, evt *event.Event) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now check if it's a reaction.
|
if sess != nil {
|
||||||
reaction := portal.bridge.DB.Reaction.GetByMXID(evt.Redacts)
|
reaction := portal.bridge.DB.Reaction.GetByMXID(evt.Redacts)
|
||||||
if reaction != nil && reaction.Channel == portal.Key {
|
if reaction != nil && reaction.Channel == portal.Key {
|
||||||
err := sender.Session.MessageReactionRemove(reaction.DiscordProtoChannelID(), reaction.MessageID, reaction.EmojiName, reaction.Sender)
|
err := sess.MessageReactionRemove(reaction.DiscordProtoChannelID(), reaction.MessageID, reaction.EmojiName, reaction.Sender)
|
||||||
go portal.sendMessageMetrics(evt, err, "Error sending")
|
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
reaction.Delete()
|
reaction.Delete()
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
go portal.sendMessageMetrics(evt, errTargetNotFound, "Ignoring")
|
go portal.sendMessageMetrics(evt, errTargetNotFound, "Ignoring")
|
||||||
|
|||||||
Reference in New Issue
Block a user