imagepack: implement listing interface
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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,
|
||||
|
||||
+38
-18
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user