Эх сурвалжийг харах

Add support for bulk message delete from Discord

Tulir Asokan 2 жил өмнө
parent
commit
a265d03319
2 өөрчлөгдсөн 26 нэмэгдсэн , 5 устгасан
  1. 24 5
      portal.go
  2. 2 0
      user.go

+ 24 - 5
portal.go

@@ -571,6 +571,8 @@ func (portal *Portal) handleDiscordMessages(msg portalDiscordMessage) {
 		portal.handleDiscordMessageUpdate(msg.user, convertedMsg.Message)
 		portal.handleDiscordMessageUpdate(msg.user, convertedMsg.Message)
 	case *discordgo.MessageDelete:
 	case *discordgo.MessageDelete:
 		portal.handleDiscordMessageDelete(msg.user, convertedMsg.Message)
 		portal.handleDiscordMessageDelete(msg.user, convertedMsg.Message)
+	case *discordgo.MessageDeleteBulk:
+		portal.handleDiscordMessageDeleteBulk(msg.user, convertedMsg.Messages)
 	case *discordgo.MessageReactionAdd:
 	case *discordgo.MessageReactionAdd:
 		portal.handleDiscordReaction(msg.user, convertedMsg.MessageReaction, true, msg.thread, convertedMsg.Member)
 		portal.handleDiscordReaction(msg.user, convertedMsg.MessageReaction, true, msg.thread, convertedMsg.Member)
 	case *discordgo.MessageReactionRemove:
 	case *discordgo.MessageReactionRemove:
@@ -929,14 +931,33 @@ func (portal *Portal) handleDiscordMessageUpdate(user *User, msg *discordgo.Mess
 }
 }
 
 
 func (portal *Portal) handleDiscordMessageDelete(user *User, msg *discordgo.Message) {
 func (portal *Portal) handleDiscordMessageDelete(user *User, msg *discordgo.Message) {
-	existing := portal.bridge.DB.Message.GetByDiscordID(portal.Key, msg.ID)
+	lastResp := portal.redactAllParts(portal.MainIntent(), msg.ID)
+	if lastResp != "" {
+		portal.sendDeliveryReceipt(lastResp)
+	}
+}
+
+func (portal *Portal) handleDiscordMessageDeleteBulk(user *User, messages []string) {
 	intent := portal.MainIntent()
 	intent := portal.MainIntent()
 	var lastResp id.EventID
 	var lastResp id.EventID
+	for _, msgID := range messages {
+		newLastResp := portal.redactAllParts(intent, msgID)
+		if newLastResp != "" {
+			lastResp = newLastResp
+		}
+	}
+	if lastResp != "" {
+		portal.sendDeliveryReceipt(lastResp)
+	}
+}
+
+func (portal *Portal) redactAllParts(intent *appservice.IntentAPI, msgID string) (lastResp id.EventID) {
+	existing := portal.bridge.DB.Message.GetByDiscordID(portal.Key, msgID)
 	for _, dbMsg := range existing {
 	for _, dbMsg := range existing {
 		resp, err := intent.RedactEvent(portal.MXID, dbMsg.MXID)
 		resp, err := intent.RedactEvent(portal.MXID, dbMsg.MXID)
 		if err != nil {
 		if err != nil {
 			portal.log.Err(err).
 			portal.log.Err(err).
-				Str("message_id", msg.ID).
+				Str("message_id", msgID).
 				Str("event_id", dbMsg.MXID.String()).
 				Str("event_id", dbMsg.MXID.String()).
 				Msg("Failed to redact Matrix message")
 				Msg("Failed to redact Matrix message")
 		} else if resp != nil && resp.EventID != "" {
 		} else if resp != nil && resp.EventID != "" {
@@ -944,9 +965,7 @@ func (portal *Portal) handleDiscordMessageDelete(user *User, msg *discordgo.Mess
 		}
 		}
 		dbMsg.Delete()
 		dbMsg.Delete()
 	}
 	}
-	if lastResp != "" {
-		portal.sendDeliveryReceipt(lastResp)
-	}
+	return
 }
 }
 
 
 func (portal *Portal) handleDiscordTyping(evt *discordgo.TypingStart) {
 func (portal *Portal) handleDiscordTyping(evt *discordgo.TypingStart) {

+ 2 - 0
user.go

@@ -630,6 +630,8 @@ func (user *User) eventHandler(rawEvt any) {
 		user.pushPortalMessage(evt, "message create", evt.ChannelID, evt.GuildID)
 		user.pushPortalMessage(evt, "message create", evt.ChannelID, evt.GuildID)
 	case *discordgo.MessageDelete:
 	case *discordgo.MessageDelete:
 		user.pushPortalMessage(evt, "message delete", evt.ChannelID, evt.GuildID)
 		user.pushPortalMessage(evt, "message delete", evt.ChannelID, evt.GuildID)
+	case *discordgo.MessageDeleteBulk:
+		user.pushPortalMessage(evt, "bulk message delete", evt.ChannelID, evt.GuildID)
 	case *discordgo.MessageUpdate:
 	case *discordgo.MessageUpdate:
 		user.pushPortalMessage(evt, "message update", evt.ChannelID, evt.GuildID)
 		user.pushPortalMessage(evt, "message update", evt.ChannelID, evt.GuildID)
 	case *discordgo.MessageReactionAdd:
 	case *discordgo.MessageReactionAdd: