mirror of
https://github.com/mautrix/whatsapp.git
synced 2026-05-14 09:46:54 -04:00
Compare commits
2 commits
main
...
kb/history
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a7217e0ff | ||
|
|
7ee5aa647c |
3 changed files with 72 additions and 0 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue