1
0
Fork 0
mirror of https://github.com/mautrix/whatsapp.git synced 2026-05-14 09:46:54 -04:00

Compare commits

...

2 commits

Author SHA1 Message Date
Kishan Bagaria
5a7217e0ff - 2026-03-27 09:10:36 -07:00
Kishan Bagaria
7ee5aa647c - 2026-03-26 22:02:48 -07:00
3 changed files with 72 additions and 0 deletions

View file

@ -132,6 +132,8 @@ func getMessageType(waMsg *waE2E.Message) string {
return "poll result snapshot"
case waMsg.MessageHistoryBundle != nil:
return "message history bundle"
case waMsg.MessageHistoryNotice != nil:
return "message history notice"
case waMsg.RequestPhoneNumberMessage != nil:
return "request phone number"
case waMsg.KeepInChatMessage != nil:

View file

@ -217,6 +217,10 @@ func (mc *MessageConverter) ToMatrix(
part, contextInfo = mc.convertGroupInviteMessage(ctx, info, waMsg.GroupInviteMessage)
case waMsg.ProtocolMessage != nil && waMsg.ProtocolMessage.GetType() == waE2E.ProtocolMessage_EPHEMERAL_SETTING:
part, contextInfo = mc.convertEphemeralSettingMessage(ctx, waMsg.ProtocolMessage, info.Timestamp, isBackfill)
case waMsg.MessageHistoryBundle != nil:
part, contextInfo = mc.convertMessageHistoryShare(ctx, info, waMsg.MessageHistoryBundle.GetMessageHistoryMetadata(), waMsg.MessageHistoryBundle.GetContextInfo())
case waMsg.MessageHistoryNotice != nil:
part, contextInfo = mc.convertMessageHistoryShare(ctx, info, waMsg.MessageHistoryNotice.GetMessageHistoryMetadata(), waMsg.MessageHistoryNotice.GetContextInfo())
case waMsg.EncCommentMessage != nil:
part = failedCommentPart
default:

View file

@ -73,6 +73,72 @@ func (mc *MessageConverter) convertPlaceholderMessage(ctx context.Context, rawMs
}
}
func (mc *MessageConverter) getHistoryReceiverName(ctx context.Context, receiver string) string {
jid, err := types.ParseJID(receiver)
if err != nil {
zerolog.Ctx(ctx).Err(err).Str("receiver_jid", receiver).Msg("Failed to parse message history receiver JID")
return receiver
}
_, displayname, err := mc.getBasicUserInfo(ctx, jid)
if err != nil {
zerolog.Ctx(ctx).Err(err).Stringer("receiver_jid", jid).Msg("Failed to resolve message history receiver")
if jid.User != "" {
return jid.User
}
return receiver
}
return displayname
}
func messageHistoryStartTime(metadata *waE2E.MessageHistoryMetadata, fallback time.Time) time.Time {
if metadata == nil {
return fallback
}
if ts := metadata.GetOldestMessageTimestamp(); ts > 0 {
return time.Unix(ts, 0).Local()
}
return fallback
}
func (mc *MessageConverter) convertMessageHistoryShare(ctx context.Context, info *types.MessageInfo, metadata *waE2E.MessageHistoryMetadata, contextInfo *waE2E.ContextInfo) (*bridgev2.ConvertedMessagePart, *waE2E.ContextInfo) {
names := make([]string, 0, len(metadata.GetHistoryReceivers()))
for _, receiver := range metadata.GetHistoryReceivers() {
if name := mc.getHistoryReceiverName(ctx, receiver); name != "" {
names = append(names, name)
}
}
receivers := strings.Join(names, ", ")
var fallback time.Time
if info != nil {
fallback = info.Timestamp
}
startAt := messageHistoryStartTime(metadata, fallback)
body := "Message history shared."
if !startAt.IsZero() {
startTime := startAt.Format("Jan 2, 2006 at 3:04 PM")
body = fmt.Sprintf("Message history shared starting on %s.", startTime)
switch {
case info != nil && info.IsFromMe && receivers != "":
body = fmt.Sprintf("You sent %s message history that starts on %s.", receivers, startTime)
case receivers != "":
body = fmt.Sprintf("Sent %s message history that starts on %s.", receivers, startTime)
}
} else if info != nil && info.IsFromMe && receivers != "" {
body = fmt.Sprintf("You sent %s message history.", receivers)
} else if receivers != "" {
body = fmt.Sprintf("Sent %s message history.", receivers)
}
return &bridgev2.ConvertedMessagePart{
Type: event.EventMessage,
Content: &event.MessageEventContent{
MsgType: event.MsgNotice,
Body: body,
},
}, contextInfo
}
const inviteMsg = `%s<hr/>This invitation to join "%s" expires at %s. Reply to this message with <code>%s accept</code> to accept the invite.`
const inviteMsgBroken = `%s<hr/>This invitation to join "%s" expires at %s. However, the invite message is broken or unsupported and cannot be accepted.`
const GroupInviteMetaField = "fi.mau.whatsapp.invite"