diff --git a/go.mod b/go.mod index 656dd75d..cb5a46e9 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( golang.org/x/sync v0.20.0 golang.org/x/tools v0.44.0 gopkg.in/yaml.v3 v3.0.1 - maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0 + maunium.net/go/mautrix v0.27.1-0.20260430124810-125ac2c48014 rsc.io/qr v0.2.0 ) diff --git a/go.sum b/go.sum index d0c76759..e3dea981 100644 --- a/go.sum +++ b/go.sum @@ -236,7 +236,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M= maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA= -maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0 h1:nCQvGjNdu08WXrbDK5BuFoue7vdBXrQtOmyoDCPvWdo= -maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0/go.mod h1:4fZ0M0xB5ZtueQI65RilX28J/3794BeK+LaCg4U61Jk= +maunium.net/go/mautrix v0.27.1-0.20260430124810-125ac2c48014 h1:KwXGBWwUHYJKVTYWgbZEFcaM6uYLMvfjzHJg/TLwvKc= +maunium.net/go/mautrix v0.27.1-0.20260430124810-125ac2c48014/go.mod h1:4fZ0M0xB5ZtueQI65RilX28J/3794BeK+LaCg4U61Jk= rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= diff --git a/pkg/connector/capabilities.go b/pkg/connector/capabilities.go index c27a223c..c024a51e 100644 --- a/pkg/connector/capabilities.go +++ b/pkg/connector/capabilities.go @@ -36,6 +36,7 @@ func (tc *TelegramConnector) GetCapabilities() *bridgev2.NetworkGeneralCapabilit return &bridgev2.NetworkGeneralCapabilities{ DisappearingMessages: true, Provisioning: bridgev2.ProvisioningCapabilities{ + ImagePackImport: true, ResolveIdentifier: bridgev2.ResolveIdentifierCapabilities{ CreateDM: true, LookupPhone: true, diff --git a/pkg/connector/imagepack.go b/pkg/connector/imagepack.go index 78d62f23..6089d81e 100644 --- a/pkg/connector/imagepack.go +++ b/pkg/connector/imagepack.go @@ -474,6 +474,42 @@ func (tc *TelegramClient) fnDownloadEmojiPack(ce *commands.Event) { } } +func (tc *TelegramClient) ListImagePacks(ctx context.Context) ([]*event.ImagePackMetadata, error) { + resp, err := tc.client.API().MessagesGetAllStickers(ctx, 0) + if err != nil { + return nil, err + } + casted, ok := resp.(*tg.MessagesAllStickers) + if !ok { + return nil, fmt.Errorf("unexpected response type: %T", resp) + } + packs := make([]*event.ImagePackMetadata, len(casted.Sets)) + for i, set := range casted.Sets { + packs[i] = tc.makeImagePackMetadata(ctx, set) + } + return packs, nil +} + +func (tc *TelegramClient) makeImagePackMetadata(ctx context.Context, pack tg.StickerSet) *event.ImagePackMetadata { + linkType := "addstickers" + usage := event.ImagePackUsageSticker + if pack.Emojis { + linkType = "addemoji" + usage = event.ImagePackUsageEmoji + } + packURL := fmt.Sprintf("https://t.me/%s/%s", linkType, pack.ShortName) + return &event.ImagePackMetadata{ + DisplayName: pack.Title, + AvatarURL: "", // TODO + Usage: []event.ImagePackUsage{usage}, + Attribution: fmt.Sprintf("Imported from %s", packURL), + BridgedPack: &event.BridgedStickerPack{ + Network: StickerSourceID, + URL: packURL, + }, + } +} + func (tc *TelegramClient) DownloadImagePack(ctx context.Context, url string) (*bridgev2.ImportedImagePack, error) { var shortName string if match := addStickersRegex.FindStringSubmatch(url); match != nil { @@ -492,25 +528,9 @@ func (tc *TelegramClient) DownloadImagePack(ctx context.Context, url string) (*b return nil, fmt.Errorf("unexpected response type: %T", rawSet) } tc.addStickerPackToCache(set, true) - linkType := "addstickers" - usage := event.ImagePackUsageSticker - if set.Set.Emojis { - linkType = "addemoji" - usage = event.ImagePackUsageEmoji - } - packURL := fmt.Sprintf("https://t.me/%s/%s", linkType, set.Set.ShortName) pack := &event.ImagePackEventContent{ - Images: make(map[string]*event.ImagePackImage, len(set.Documents)), - Metadata: event.ImagePackMetadata{ - DisplayName: set.Set.Title, - AvatarURL: "", - Usage: []event.ImagePackUsage{usage}, - Attribution: fmt.Sprintf("Imported from %s", packURL), - BridgedPack: &event.BridgedStickerPack{ - Network: StickerSourceID, - URL: packURL, - }, - }, + Images: make(map[string]*event.ImagePackImage, len(set.Documents)), + Metadata: *tc.makeImagePackMetadata(ctx, set.Set), } topLevelExtra := map[string]any{ "fi.mau.telegram.stickerpack": map[string]any{