directmedia: handle custom emojis
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user