imagepack: implement listing interface
This commit is contained in:
@@ -42,7 +42,7 @@ require (
|
|||||||
golang.org/x/sync v0.20.0
|
golang.org/x/sync v0.20.0
|
||||||
golang.org/x/tools v0.44.0
|
golang.org/x/tools v0.44.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
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
|
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=
|
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 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M=
|
||||||
maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA=
|
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.20260430124810-125ac2c48014 h1:KwXGBWwUHYJKVTYWgbZEFcaM6uYLMvfjzHJg/TLwvKc=
|
||||||
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/go.mod h1:4fZ0M0xB5ZtueQI65RilX28J/3794BeK+LaCg4U61Jk=
|
||||||
rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY=
|
rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY=
|
||||||
rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs=
|
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{
|
return &bridgev2.NetworkGeneralCapabilities{
|
||||||
DisappearingMessages: true,
|
DisappearingMessages: true,
|
||||||
Provisioning: bridgev2.ProvisioningCapabilities{
|
Provisioning: bridgev2.ProvisioningCapabilities{
|
||||||
|
ImagePackImport: true,
|
||||||
ResolveIdentifier: bridgev2.ResolveIdentifierCapabilities{
|
ResolveIdentifier: bridgev2.ResolveIdentifierCapabilities{
|
||||||
CreateDM: true,
|
CreateDM: true,
|
||||||
LookupPhone: 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) {
|
func (tc *TelegramClient) DownloadImagePack(ctx context.Context, url string) (*bridgev2.ImportedImagePack, error) {
|
||||||
var shortName string
|
var shortName string
|
||||||
if match := addStickersRegex.FindStringSubmatch(url); match != nil {
|
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)
|
return nil, fmt.Errorf("unexpected response type: %T", rawSet)
|
||||||
}
|
}
|
||||||
tc.addStickerPackToCache(set, true)
|
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{
|
pack := &event.ImagePackEventContent{
|
||||||
Images: make(map[string]*event.ImagePackImage, len(set.Documents)),
|
Images: make(map[string]*event.ImagePackImage, len(set.Documents)),
|
||||||
Metadata: event.ImagePackMetadata{
|
Metadata: *tc.makeImagePackMetadata(ctx, set.Set),
|
||||||
DisplayName: set.Set.Title,
|
|
||||||
AvatarURL: "",
|
|
||||||
Usage: []event.ImagePackUsage{usage},
|
|
||||||
Attribution: fmt.Sprintf("Imported from %s", packURL),
|
|
||||||
BridgedPack: &event.BridgedStickerPack{
|
|
||||||
Network: StickerSourceID,
|
|
||||||
URL: packURL,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
topLevelExtra := map[string]any{
|
topLevelExtra := map[string]any{
|
||||||
"fi.mau.telegram.stickerpack": map[string]any{
|
"fi.mau.telegram.stickerpack": map[string]any{
|
||||||
|
|||||||
Reference in New Issue
Block a user