imagepack: switch to bridgev2 API for importing
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.20260429060852-d7aad0e862c7
|
maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0
|
||||||
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.20260429060852-d7aad0e862c7 h1:ZL/dTgBuj7ZzH543brFUvxZo2lJGsCMBvnfKIvjdHC4=
|
maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0 h1:nCQvGjNdu08WXrbDK5BuFoue7vdBXrQtOmyoDCPvWdo=
|
||||||
maunium.net/go/mautrix v0.27.1-0.20260429060852-d7aad0e862c7/go.mod h1:4fZ0M0xB5ZtueQI65RilX28J/3794BeK+LaCg4U61Jk=
|
maunium.net/go/mautrix v0.27.1-0.20260429145330-5201144fcbc0/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=
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ var cmdEmojiPack = &commands.FullHandler{
|
|||||||
Name: "emoji-pack",
|
Name: "emoji-pack",
|
||||||
Aliases: []string{"pack", "sticker-pack", "emojipack", "stickerpack"},
|
Aliases: []string{"pack", "sticker-pack", "emojipack", "stickerpack"},
|
||||||
Help: commands.HelpMeta{
|
Help: commands.HelpMeta{
|
||||||
Section: commands.HelpSectionChats,
|
Section: commands.HelpSectionMisc,
|
||||||
Description: "Bridge emoji packs between Matrix and Telegram.",
|
Description: "Bridge emoji packs between Matrix and Telegram.",
|
||||||
Args: "<upload/download/list/help> [args...]",
|
Args: "<upload/download/list/help> [args...]",
|
||||||
},
|
},
|
||||||
|
|||||||
+42
-30
@@ -450,24 +450,46 @@ func (tc *TelegramClient) fnDownloadEmojiPack(ce *commands.Event) {
|
|||||||
ce.Reply("Can't bridge image packs if personal filtering spaces are disabled")
|
ce.Reply("Can't bridge image packs if personal filtering spaces are disabled")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var shortName string
|
evtID := ce.React("\u23f3\ufe0f")
|
||||||
if match := addStickersRegex.FindStringSubmatch(ce.Args[0]); match != nil {
|
defer redactReaction(ce, evtID)
|
||||||
shortName = match[1]
|
pack, err := tc.DownloadImagePack(ce.Ctx, ce.Args[0])
|
||||||
} else if packShortcodeRegex.MatchString(ce.Args[0]) {
|
if err != nil {
|
||||||
shortName = ce.Args[0]
|
ce.Reply("Failed to import pack: %v", err)
|
||||||
} else {
|
|
||||||
ce.Reply("Invalid pack shortcode or link")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rawSet, err := tc.client.API().MessagesGetStickerSet(ce.Ctx, &tg.MessagesGetStickerSetRequest{Stickerset: &tg.InputStickerSetShortName{ShortName: shortName}})
|
if pack.Shortcode == "" && pack.Content.Metadata.BridgedPack != nil {
|
||||||
|
pack.Shortcode = pack.Content.Metadata.BridgedPack.URL
|
||||||
|
}
|
||||||
|
_, err = tc.main.Bridge.Bot.SendState(ce.Ctx, spaceRoom, event.StateUnstableImagePack, pack.Shortcode, &event.Content{
|
||||||
|
Parsed: pack.Content,
|
||||||
|
Raw: pack.Extra,
|
||||||
|
}, time.Now())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ce.Reply("Failed to get sticker set: %v", err)
|
ce.Reply("Failed to send image pack to space: %v", err)
|
||||||
return
|
} else {
|
||||||
|
ce.Reply(
|
||||||
|
"Successfully bridged image pack to %s",
|
||||||
|
format.MarkdownLink("your personal filtering space",
|
||||||
|
spaceRoom.URI(tc.main.Bridge.Matrix.ServerName()).MatrixToURL()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tc *TelegramClient) DownloadImagePack(ctx context.Context, url string) (*bridgev2.ImportedImagePack, error) {
|
||||||
|
var shortName string
|
||||||
|
if match := addStickersRegex.FindStringSubmatch(url); match != nil {
|
||||||
|
shortName = match[1]
|
||||||
|
} else if packShortcodeRegex.MatchString(url) {
|
||||||
|
shortName = url
|
||||||
|
} else {
|
||||||
|
return nil, fmt.Errorf("invalid pack shortcode or link: %s", url)
|
||||||
|
}
|
||||||
|
rawSet, err := tc.client.API().MessagesGetStickerSet(ctx, &tg.MessagesGetStickerSetRequest{Stickerset: &tg.InputStickerSetShortName{ShortName: shortName}})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
set, ok := rawSet.(*tg.MessagesStickerSet)
|
set, ok := rawSet.(*tg.MessagesStickerSet)
|
||||||
if !ok {
|
if !ok {
|
||||||
ce.Reply("Unexpected response type: %T", rawSet)
|
return nil, fmt.Errorf("unexpected response type: %T", rawSet)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
tc.addStickerPackToCache(set, true)
|
tc.addStickerPackToCache(set, true)
|
||||||
linkType := "addstickers"
|
linkType := "addstickers"
|
||||||
@@ -508,19 +530,16 @@ func (tc *TelegramClient) fnDownloadEmojiPack(ce *commands.Event) {
|
|||||||
emojiLists[doc] = append(emojiLists[doc], emoji)
|
emojiLists[doc] = append(emojiLists[doc], emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
evtID := ce.React("\u23f3\ufe0f")
|
|
||||||
defer redactReaction(ce, evtID)
|
|
||||||
for i, rawDoc := range set.Documents {
|
for i, rawDoc := range set.Documents {
|
||||||
// TODO use direct media
|
// TODO use direct media
|
||||||
mxc, _, info, err := media.NewTransferer(tc.client.API()).
|
mxc, _, info, err := media.NewTransferer(tc.client.API()).
|
||||||
WithStickerConfig(tc.main.Config.AnimatedSticker).
|
WithStickerConfig(tc.main.Config.AnimatedSticker).
|
||||||
WithForceWebmStickerConvert(set.Set.Emojis).
|
WithForceWebmStickerConvert(set.Set.Emojis).
|
||||||
WithDocument(rawDoc, false).
|
WithDocument(rawDoc, false).
|
||||||
Transfer(ce.Ctx, tc.main.Store, tc.main.Bridge.Bot)
|
Transfer(ctx, tc.main.Store, tc.main.Bridge.Bot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ce.Log.Err(err).Msg("Failed to transfer image in pack")
|
zerolog.Ctx(ctx).Err(err).Msg("Failed to transfer image in pack")
|
||||||
ce.Reply("Failed to transfer document `%d`: %v", rawDoc.GetID(), err)
|
return nil, fmt.Errorf("failed to transfer document %d: %w", rawDoc.GetID(), err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
kws := keywords[rawDoc.GetID()]
|
kws := keywords[rawDoc.GetID()]
|
||||||
imageEmojis := emojiLists[rawDoc.GetID()]
|
imageEmojis := emojiLists[rawDoc.GetID()]
|
||||||
@@ -585,18 +604,11 @@ func (tc *TelegramClient) fnDownloadEmojiPack(ce *commands.Event) {
|
|||||||
Info: info,
|
Info: info,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_, err = tc.main.Bridge.Bot.SendState(ce.Ctx, spaceRoom, event.StateUnstableImagePack, set.Set.ShortName, &event.Content{
|
return &bridgev2.ImportedImagePack{
|
||||||
Parsed: pack,
|
Content: pack,
|
||||||
Raw: topLevelExtra,
|
Extra: topLevelExtra,
|
||||||
}, time.Now())
|
Shortcode: set.Set.ShortName,
|
||||||
if err != nil {
|
}, nil
|
||||||
ce.Reply("Failed to send image pack to space: %v", err)
|
|
||||||
} else {
|
|
||||||
ce.Reply(
|
|
||||||
"Successfully bridged image pack to %s",
|
|
||||||
format.MarkdownLink("your personal filtering space",
|
|
||||||
spaceRoom.URI(tc.main.Bridge.Matrix.ServerName()).MatrixToURL()))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const StickerSourceID = "telegram"
|
const StickerSourceID = "telegram"
|
||||||
|
|||||||
Reference in New Issue
Block a user