mirror of
https://github.com/cwinfo/matterbridge.git
synced 2024-11-09 23:40:27 +00:00
Improve attachment handling (whatsapp) (#1928)
* Allow captions for document attachments, too * Handle audio messages * Improve attachment handling
This commit is contained in:
parent
4fd0a76727
commit
0a6d64ab48
@ -213,6 +213,8 @@ func (b *Bwhatsapp) PostDocumentMessage(msg config.Message, filetype string) (st
|
|||||||
|
|
||||||
fi := msg.Extra["file"][0].(config.FileInfo)
|
fi := msg.Extra["file"][0].(config.FileInfo)
|
||||||
|
|
||||||
|
caption := msg.Username + fi.Comment
|
||||||
|
|
||||||
resp, err := b.wc.Upload(context.Background(), *fi.Data, whatsmeow.MediaDocument)
|
resp, err := b.wc.Upload(context.Background(), *fi.Data, whatsmeow.MediaDocument)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@ -225,6 +227,7 @@ func (b *Bwhatsapp) PostDocumentMessage(msg config.Message, filetype string) (st
|
|||||||
Title: &fi.Name,
|
Title: &fi.Name,
|
||||||
FileName: &fi.Name,
|
FileName: &fi.Name,
|
||||||
Mimetype: &filetype,
|
Mimetype: &filetype,
|
||||||
|
Caption: &caption,
|
||||||
MediaKey: resp.MediaKey,
|
MediaKey: resp.MediaKey,
|
||||||
FileEncSha256: resp.FileEncSHA256,
|
FileEncSha256: resp.FileEncSHA256,
|
||||||
FileSha256: resp.FileSHA256,
|
FileSha256: resp.FileSHA256,
|
||||||
@ -232,7 +235,7 @@ func (b *Bwhatsapp) PostDocumentMessage(msg config.Message, filetype string) (st
|
|||||||
Url: &resp.URL,
|
Url: &resp.URL,
|
||||||
}
|
}
|
||||||
|
|
||||||
b.Log.Debugf("=> Sending %#v", msg)
|
b.Log.Debugf("=> Sending %#v as a document", msg)
|
||||||
|
|
||||||
ID := whatsmeow.GenerateMessageID()
|
ID := whatsmeow.GenerateMessageID()
|
||||||
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
||||||
@ -266,7 +269,7 @@ func (b *Bwhatsapp) PostImageMessage(msg config.Message, filetype string) (strin
|
|||||||
Url: &resp.URL,
|
Url: &resp.URL,
|
||||||
}
|
}
|
||||||
|
|
||||||
b.Log.Debugf("=> Sending %#v", msg)
|
b.Log.Debugf("=> Sending %#v as an image", msg)
|
||||||
|
|
||||||
ID := whatsmeow.GenerateMessageID()
|
ID := whatsmeow.GenerateMessageID()
|
||||||
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
||||||
@ -274,6 +277,76 @@ func (b *Bwhatsapp) PostImageMessage(msg config.Message, filetype string) (strin
|
|||||||
return ID, err
|
return ID, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Post a video message from the bridge to WhatsApp
|
||||||
|
func (b *Bwhatsapp) PostVideoMessage(msg config.Message, filetype string) (string, error) {
|
||||||
|
groupJID, _ := types.ParseJID(msg.Channel)
|
||||||
|
|
||||||
|
fi := msg.Extra["file"][0].(config.FileInfo)
|
||||||
|
|
||||||
|
caption := msg.Username + fi.Comment
|
||||||
|
|
||||||
|
resp, err := b.wc.Upload(context.Background(), *fi.Data, whatsmeow.MediaVideo)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
var message proto.Message
|
||||||
|
|
||||||
|
message.VideoMessage = &proto.VideoMessage{
|
||||||
|
Mimetype: &filetype,
|
||||||
|
Caption: &caption,
|
||||||
|
MediaKey: resp.MediaKey,
|
||||||
|
FileEncSha256: resp.FileEncSHA256,
|
||||||
|
FileSha256: resp.FileSHA256,
|
||||||
|
FileLength: goproto.Uint64(resp.FileLength),
|
||||||
|
Url: &resp.URL,
|
||||||
|
}
|
||||||
|
|
||||||
|
b.Log.Debugf("=> Sending %#v as a video", msg)
|
||||||
|
|
||||||
|
ID := whatsmeow.GenerateMessageID()
|
||||||
|
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
||||||
|
|
||||||
|
return ID, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Post audio inline
|
||||||
|
func (b *Bwhatsapp) PostAudioMessage(msg config.Message, filetype string) (string, error) {
|
||||||
|
groupJID, _ := types.ParseJID(msg.Channel)
|
||||||
|
|
||||||
|
fi := msg.Extra["file"][0].(config.FileInfo)
|
||||||
|
|
||||||
|
resp, err := b.wc.Upload(context.Background(), *fi.Data, whatsmeow.MediaAudio)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
var message proto.Message
|
||||||
|
|
||||||
|
message.AudioMessage = &proto.AudioMessage{
|
||||||
|
Mimetype: &filetype,
|
||||||
|
MediaKey: resp.MediaKey,
|
||||||
|
FileEncSha256: resp.FileEncSHA256,
|
||||||
|
FileSha256: resp.FileSHA256,
|
||||||
|
FileLength: goproto.Uint64(resp.FileLength),
|
||||||
|
Url: &resp.URL,
|
||||||
|
}
|
||||||
|
|
||||||
|
b.Log.Debugf("=> Sending %#v as audio", msg)
|
||||||
|
|
||||||
|
ID := whatsmeow.GenerateMessageID()
|
||||||
|
_, err = b.wc.SendMessage(context.TODO(), groupJID, ID, &message)
|
||||||
|
|
||||||
|
var captionMessage proto.Message
|
||||||
|
caption := msg.Username + fi.Comment + "\u2B06" // the char on the end is upwards arrow emoji
|
||||||
|
captionMessage.Conversation = &caption
|
||||||
|
|
||||||
|
captionID := whatsmeow.GenerateMessageID()
|
||||||
|
_, err = b.wc.SendMessage(context.TODO(), groupJID, captionID, &captionMessage)
|
||||||
|
|
||||||
|
return ID, err
|
||||||
|
}
|
||||||
|
|
||||||
// Send a message from the bridge to WhatsApp
|
// Send a message from the bridge to WhatsApp
|
||||||
func (b *Bwhatsapp) Send(msg config.Message) (string, error) {
|
func (b *Bwhatsapp) Send(msg config.Message) (string, error) {
|
||||||
groupJID, _ := types.ParseJID(msg.Channel)
|
groupJID, _ := types.ParseJID(msg.Channel)
|
||||||
@ -316,6 +389,12 @@ func (b *Bwhatsapp) Send(msg config.Message) (string, error) {
|
|||||||
switch filetype {
|
switch filetype {
|
||||||
case "image/jpeg", "image/png", "image/gif":
|
case "image/jpeg", "image/png", "image/gif":
|
||||||
return b.PostImageMessage(msg, filetype)
|
return b.PostImageMessage(msg, filetype)
|
||||||
|
case "video/mp4", "video/3gpp": //TODO: Check if codecs are supported by WA
|
||||||
|
return b.PostVideoMessage(msg, filetype)
|
||||||
|
case "audio/ogg":
|
||||||
|
return b.PostAudioMessage(msg, "audio/ogg; codecs=opus") //TODO: Detect if it is actually OPUS
|
||||||
|
case "audio/aac", "audio/mp4", "audio/amr", "audio/mpeg":
|
||||||
|
return b.PostAudioMessage(msg, filetype)
|
||||||
default:
|
default:
|
||||||
return b.PostDocumentMessage(msg, filetype)
|
return b.PostDocumentMessage(msg, filetype)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user