mirror of
https://github.com/mautrix/whatsapp.git
synced 2025-03-14 14:15:38 +00:00
Add support for sending media to newsletters
This commit is contained in:
parent
f6270d6bd2
commit
a8d1900203
4 changed files with 31 additions and 6 deletions
|
@ -1,3 +1,7 @@
|
|||
# unreleaased
|
||||
|
||||
* Added support for sending media to channels.
|
||||
|
||||
# v0.10.4 (2023-11-16)
|
||||
|
||||
* Added support for channels in `join` and `open` commands.
|
||||
|
|
2
go.mod
2
go.mod
|
@ -13,7 +13,7 @@ require (
|
|||
github.com/tidwall/gjson v1.17.0
|
||||
go.mau.fi/util v0.2.1
|
||||
go.mau.fi/webp v0.1.0
|
||||
go.mau.fi/whatsmeow v0.0.0-20231116213319-217e0c985fd6
|
||||
go.mau.fi/whatsmeow v0.0.0-20231119124248-cbe5f2ddc37a
|
||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
|
||||
golang.org/x/image v0.14.0
|
||||
golang.org/x/net v0.18.0
|
||||
|
|
4
go.sum
4
go.sum
|
@ -68,8 +68,8 @@ go.mau.fi/util v0.2.1 h1:eazulhFE/UmjOFtPrGg6zkF5YfAyiDzQb8ihLMbsPWw=
|
|||
go.mau.fi/util v0.2.1/go.mod h1:MjlzCQEMzJ+G8RsPawHzpLB8rwTo3aPIjG5FzBvQT/c=
|
||||
go.mau.fi/webp v0.1.0 h1:BHObH/DcFntT9KYun5pDr0Ot4eUZO8k2C7eP7vF4ueA=
|
||||
go.mau.fi/webp v0.1.0/go.mod h1:e42Z+VMFrUMS9cpEwGRIor+lQWO8oUAyPyMtcL+NMt8=
|
||||
go.mau.fi/whatsmeow v0.0.0-20231116213319-217e0c985fd6 h1:GLGU8Q7zoW0NjqZGXdPAjAwmJTSI09HIdhjL0DY21oc=
|
||||
go.mau.fi/whatsmeow v0.0.0-20231116213319-217e0c985fd6/go.mod h1:5xTtHNaZpGni6z6aE1iEopjW7wNgsKcolZxZrOujK9M=
|
||||
go.mau.fi/whatsmeow v0.0.0-20231119124248-cbe5f2ddc37a h1:u7W/BzMZla2yD5xf0txDRx6ZI7rJNZ1HjLQQKgOgdTw=
|
||||
go.mau.fi/whatsmeow v0.0.0-20231119124248-cbe5f2ddc37a/go.mod h1:5xTtHNaZpGni6z6aE1iEopjW7wNgsKcolZxZrOujK9M=
|
||||
go.mau.fi/zeroconfig v0.1.2 h1:DKOydWnhPMn65GbXZOafgkPm11BvFashZWLct0dGFto=
|
||||
go.mau.fi/zeroconfig v0.1.2/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70=
|
||||
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
|
||||
|
|
27
portal.go
27
portal.go
|
@ -3894,7 +3894,12 @@ func (portal *Portal) preprocessMatrixMedia(ctx context.Context, sender *User, r
|
|||
portal.log.Warnfln("Failed to re-encode %s media: %v, continuing with original file", mimeType, convertErr)
|
||||
}
|
||||
}
|
||||
uploadResp, err := sender.Client.Upload(ctx, data, mediaType)
|
||||
var uploadResp whatsmeow.UploadResponse
|
||||
if portal.Key.JID.Server == types.NewsletterServer {
|
||||
uploadResp, err = sender.Client.UploadNewsletter(ctx, data, mediaType)
|
||||
} else {
|
||||
uploadResp, err = sender.Client.Upload(ctx, data, mediaType)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, exerrors.NewDualError(errMediaWhatsAppUploadFailed, err)
|
||||
}
|
||||
|
@ -4202,6 +4207,8 @@ type extraConvertMeta struct {
|
|||
EditRootMsg *database.Message
|
||||
|
||||
GalleryExtraParts []*waProto.Message
|
||||
|
||||
MediaHandle string
|
||||
}
|
||||
|
||||
func getEditError(rootMsg *database.Message, editer *User) error {
|
||||
|
@ -4303,6 +4310,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
if media == nil {
|
||||
return nil, sender, extraMeta, err
|
||||
}
|
||||
extraMeta.MediaHandle = media.Handle
|
||||
ctxInfo.MentionedJid = media.MentionedJIDs
|
||||
msg.ImageMessage = &waProto.ImageMessage{
|
||||
ContextInfo: ctxInfo,
|
||||
|
@ -4321,6 +4329,9 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
return nil, sender, extraMeta, errGalleryRelay
|
||||
} else if content.BeeperGalleryCaption != "" {
|
||||
return nil, sender, extraMeta, errGalleryCaption
|
||||
} else if portal.Key.JID.Server == types.NewsletterServer {
|
||||
// We don't handle the media handles properly for multiple messages
|
||||
return nil, sender, extraMeta, fmt.Errorf("can't send gallery to newsletter")
|
||||
}
|
||||
for i, part := range content.BeeperGalleryImages {
|
||||
// TODO support videos
|
||||
|
@ -4352,6 +4363,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
if media == nil {
|
||||
return nil, sender, extraMeta, err
|
||||
}
|
||||
extraMeta.MediaHandle = media.Handle
|
||||
ctxInfo.MentionedJid = media.MentionedJIDs
|
||||
msg.StickerMessage = &waProto.StickerMessage{
|
||||
ContextInfo: ctxInfo,
|
||||
|
@ -4371,6 +4383,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
return nil, sender, extraMeta, err
|
||||
}
|
||||
duration := uint32(content.GetInfo().Duration / 1000)
|
||||
extraMeta.MediaHandle = media.Handle
|
||||
ctxInfo.MentionedJid = media.MentionedJIDs
|
||||
msg.VideoMessage = &waProto.VideoMessage{
|
||||
ContextInfo: ctxInfo,
|
||||
|
@ -4391,6 +4404,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
if media == nil {
|
||||
return nil, sender, extraMeta, err
|
||||
}
|
||||
extraMeta.MediaHandle = media.Handle
|
||||
duration := uint32(content.GetInfo().Duration / 1000)
|
||||
msg.AudioMessage = &waProto.AudioMessage{
|
||||
ContextInfo: ctxInfo,
|
||||
|
@ -4415,6 +4429,7 @@ func (portal *Portal) convertMatrixMessage(ctx context.Context, sender *User, ev
|
|||
if media == nil {
|
||||
return nil, sender, extraMeta, err
|
||||
}
|
||||
extraMeta.MediaHandle = media.Handle
|
||||
msg.DocumentMessage = &waProto.DocumentMessage{
|
||||
ContextInfo: ctxInfo,
|
||||
Caption: &media.Caption,
|
||||
|
@ -4562,6 +4577,9 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event, timing
|
|||
go ms.sendMessageMetrics(evt, err, "Error converting", true)
|
||||
return
|
||||
}
|
||||
if extraMeta == nil {
|
||||
extraMeta = &extraConvertMeta{}
|
||||
}
|
||||
dbMsgType := database.MsgNormal
|
||||
if msg.PollCreationMessage != nil || msg.PollCreationMessageV2 != nil || msg.PollCreationMessageV3 != nil {
|
||||
dbMsgType = database.MsgMatrixPoll
|
||||
|
@ -4576,12 +4594,15 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event, timing
|
|||
} else {
|
||||
info.ID = dbMsg.JID
|
||||
}
|
||||
if dbMsgType == database.MsgMatrixPoll && extraMeta != nil && extraMeta.PollOptions != nil {
|
||||
if dbMsgType == database.MsgMatrixPoll && extraMeta.PollOptions != nil {
|
||||
dbMsg.PutPollOptions(extraMeta.PollOptions)
|
||||
}
|
||||
portal.log.Debugln("Sending event", evt.ID, "to WhatsApp", info.ID)
|
||||
start = time.Now()
|
||||
resp, err := sender.Client.SendMessage(ctx, portal.Key.JID, msg, whatsmeow.SendRequestExtra{ID: info.ID})
|
||||
resp, err := sender.Client.SendMessage(ctx, portal.Key.JID, msg, whatsmeow.SendRequestExtra{
|
||||
ID: info.ID,
|
||||
MediaHandle: extraMeta.MediaHandle,
|
||||
})
|
||||
timings.totalSend = time.Since(start)
|
||||
timings.whatsmeow = resp.DebugTimings
|
||||
if err != nil {
|
||||
|
|
Loading…
Add table
Reference in a new issue