diff --git a/pkg/connector/capabilities.go b/pkg/connector/capabilities.go index b991893b..36ec879f 100644 --- a/pkg/connector/capabilities.go +++ b/pkg/connector/capabilities.go @@ -52,7 +52,7 @@ func (wa *WhatsAppConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit } func (wa *WhatsAppConnector) GetBridgeInfoVersion() (info, caps int) { - return 1, 10 + return 1, 11 } const WAMaxFileSize = 2000 * 1024 * 1024 @@ -67,7 +67,7 @@ func supportedIfFFmpeg() event.CapabilitySupportLevel { } func capID() string { - base := "fi.mau.whatsapp.capabilities.2026_10_01" + base := "fi.mau.whatsapp.capabilities.2026_11_10" if ffmpeg.Supported() { return base + "+ffmpeg" } @@ -119,6 +119,7 @@ var whatsappCaps = &event.RoomFeatures{ MimeTypes: map[string]event.CapabilitySupportLevel{ "audio/ogg; codecs=opus": event.CapLevelFullySupported, "audio/ogg": event.CapLevelUnsupported, + "audio/webm": supportedIfFFmpeg(), }, Caption: event.CapLevelDropped, MaxSize: WAMaxFileSize, diff --git a/pkg/msgconv/from-matrix.go b/pkg/msgconv/from-matrix.go index ba2adc23..9a973984 100644 --- a/pkg/msgconv/from-matrix.go +++ b/pkg/msgconv/from-matrix.go @@ -700,7 +700,14 @@ func (mc *MessageConverter) reuploadFileToWhatsApp( // Hopefully it's opus already mime = "audio/ogg; codecs=opus" default: - return nil, nil, mime, fmt.Errorf("%w %s in audio message", bridgev2.ErrUnsupportedMediaType, mime) + if content.MSC3245Voice == nil || !ffmpeg.Supported() { + return nil, nil, mime, fmt.Errorf("%w %s in audio message", bridgev2.ErrUnsupportedMediaType, mime) + } + data, err = ffmpeg.ConvertBytes(ctx, data, ".ogg", []string{}, []string{"-vn", "-c:a", "libopus"}, mime) + if err != nil { + return nil, nil, mime, fmt.Errorf("%w (voice to ogg): %w", bridgev2.ErrMediaConvertFailed, err) + } + mime = "audio/ogg; codecs=opus" } mediaType = whatsmeow.MediaAudio case event.MsgFile: