|
45 | 45 | _ bridgev2.MuteHandlingNetworkAPI = (*WhatsAppClient)(nil) |
46 | 46 | _ bridgev2.TagHandlingNetworkAPI = (*WhatsAppClient)(nil) |
47 | 47 | _ bridgev2.MarkedUnreadHandlingNetworkAPI = (*WhatsAppClient)(nil) |
| 48 | + _ bridgev2.DeleteChatHandlingNetworkAPI = (*WhatsAppClient)(nil) |
48 | 49 | ) |
49 | 50 |
|
50 | 51 | func (wa *WhatsAppClient) HandleMatrixPollStart(ctx context.Context, msg *bridgev2.MatrixPollStart) (*bridgev2.MatrixMessageResponse, error) { |
@@ -625,3 +626,35 @@ func (wa *WhatsAppClient) HandleMarkedUnread(ctx context.Context, msg *bridgev2. |
625 | 626 | } |
626 | 627 | return wa.Client.SendAppState(ctx, appstate.BuildMarkChatAsRead(chatJID, msg.Content.Unread, lastTS, lastKey)) |
627 | 628 | } |
| 629 | + |
| 630 | +func (wa *WhatsAppClient) HandleMatrixDeleteChat(ctx context.Context, msg *bridgev2.MatrixDeleteChat) error { |
| 631 | + chatJID, err := waid.ParsePortalID(msg.Portal.ID) |
| 632 | + if err != nil { |
| 633 | + return err |
| 634 | + } |
| 635 | + messages, err := wa.Main.Bridge.DB.Message.GetLastNInPortal(ctx, msg.Portal.PortalKey, 1) |
| 636 | + if err != nil { |
| 637 | + return fmt.Errorf("failed to get last message in portal: %w", err) |
| 638 | + } |
| 639 | + if len(messages) < 1 { |
| 640 | + return fmt.Errorf("failed to delete chat: no messages found") |
| 641 | + } |
| 642 | + message := messages[0] |
| 643 | + lastTS := messages[0].Timestamp |
| 644 | + parsed, err := waid.ParseMessageID(message.ID) |
| 645 | + if err != nil { |
| 646 | + return fmt.Errorf("failed to parse last message ID: %w", err) |
| 647 | + } |
| 648 | + fromMe := parsed.Sender.ToNonAD() == wa.JID.ToNonAD() || parsed.Sender.ToNonAD() == wa.GetStore().GetLID().ToNonAD() |
| 649 | + var participant *string |
| 650 | + if chatJID.Server == types.GroupServer { |
| 651 | + participant = ptr.Ptr(parsed.Sender.String()) |
| 652 | + } |
| 653 | + lastKey := &waCommon.MessageKey{ |
| 654 | + RemoteJID: ptr.Ptr(chatJID.String()), |
| 655 | + FromMe: &fromMe, |
| 656 | + ID: &parsed.ID, |
| 657 | + Participant: participant, |
| 658 | + } |
| 659 | + return wa.Client.SendAppState(ctx, appstate.BuildDeleteChat(chatJID, lastTS, lastKey)) |
| 660 | +} |
0 commit comments