directmedia: handle custom emojis

This commit is contained in:
Toni Spets
2025-06-25 11:19:58 +03:00
parent e6c3454e9f
commit cb98833590
3 changed files with 39 additions and 2 deletions
+13 -2
View File
@@ -27,10 +27,9 @@ import (
"maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/mediaproxy"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
"go.mau.fi/mautrix-telegram/pkg/connector/ids"
"go.mau.fi/mautrix-telegram/pkg/connector/media"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
var _ bridgev2.DirectMediableNetwork = (*TelegramConnector)(nil)
@@ -207,6 +206,18 @@ func (tc *TelegramConnector) Download(ctx context.Context, mediaID networkid.Med
}
readyTransferer = transferer.WithChannelPhoto(info.PeerID, accessHash, info.ID)
} else if info.PeerType == ids.FakePeerTypeEmoji {
customEmojiDocuments, err := client.client.API().MessagesGetCustomEmojiDocuments(ctx, []int64{info.ID})
if err != nil {
return nil, fmt.Errorf("failed to get custom emoji documents: %w", err)
}
if len(customEmojiDocuments) == 0 {
return nil, fmt.Errorf("emoji id did not result in a document")
}
readyTransferer = media.NewTransferer(client.client.API()).
WithStickerConfig(tc.Config.AnimatedSticker).
WithDocument(customEmojiDocuments[0], false)
}
if readyTransferer == nil {
+6
View File
@@ -120,6 +120,8 @@ const (
PeerTypeUser PeerType = "user"
PeerTypeChat PeerType = "chat"
PeerTypeChannel PeerType = "channel"
FakePeerTypeEmoji PeerType = "emoji"
)
func PeerTypeFromByte(pt byte) (PeerType, error) {
@@ -130,6 +132,8 @@ func PeerTypeFromByte(pt byte) (PeerType, error) {
return PeerTypeChat, nil
case 0x03:
return PeerTypeChannel, nil
case 0x04:
return FakePeerTypeEmoji, nil
default:
return "", fmt.Errorf("unknown peer type %d", pt)
}
@@ -143,6 +147,8 @@ func (pt PeerType) AsByte() byte {
return 0x02
case PeerTypeChannel:
return 0x03
case FakePeerTypeEmoji:
return 0x04
default:
panic(fmt.Errorf("unknown peer type %s", pt))
}
+20
View File
@@ -1069,6 +1069,26 @@ func (t *TelegramClient) transferEmojisToMatrix(ctx context.Context, customEmoji
return
}
if t.main.useDirectMedia {
for _, emojiID := range customEmojiIDs {
mediaID, err := ids.DirectMediaInfo{
PeerType: ids.FakePeerTypeEmoji,
UserID: t.telegramUserID,
ID: emojiID,
}.AsMediaID()
if err != nil {
return nil, err
}
if mxcURI, err := t.main.Bridge.Matrix.GenerateContentURI(ctx, mediaID); err != nil {
return nil, err
} else {
result[ids.MakeEmojiIDFromDocumentID(emojiID)] = emojis.EmojiInfo{EmojiURI: mxcURI}
}
}
return result, nil
}
customEmojiDocuments, err := t.client.API().MessagesGetCustomEmojiDocuments(ctx, customEmojiIDs)
if err != nil {
return nil, err