Files
mautrix-telegram/pkg/connector/ids.go
T
2024-06-19 12:36:10 -06:00

72 lines
1.8 KiB
Go

package connector
import (
"fmt"
"strconv"
"strings"
"github.com/gotd/td/tg"
"maunium.net/go/mautrix/bridgev2/networkid"
)
func makeUserID(userID int64) networkid.UserID {
return networkid.UserID(strconv.FormatInt(userID, 10))
}
func parseUserID(userID networkid.UserID) (int64, error) {
return strconv.ParseInt(string(userID), 10, 64)
}
func makeUserLoginID(userID int64) networkid.UserLoginID {
return networkid.UserLoginID(strconv.FormatInt(userID, 10))
}
func makeMessageID(messageID int) networkid.MessageID {
return networkid.MessageID(strconv.Itoa(messageID))
}
type peerType string
const (
peerTypeUser peerType = "user"
peerTypeChat peerType = "chat"
peerTypeChannel peerType = "channel"
)
func makePortalID(peer tg.PeerClass) networkid.PortalKey {
switch v := peer.(type) {
case *tg.PeerUser:
return networkid.PortalKey{ID: networkid.PortalID(fmt.Sprintf("%s:%d", peerTypeUser, v.UserID))}
case *tg.PeerChat:
return networkid.PortalKey{ID: networkid.PortalID(fmt.Sprintf("%s:%d", peerTypeChat, v.ChatID))}
case *tg.PeerChannel:
return networkid.PortalKey{ID: networkid.PortalID(fmt.Sprintf("%s:%d", peerTypeChannel, v.ChannelID))}
default:
panic(fmt.Errorf("unknown peer class type %T", v))
}
}
func parsePortalID(portalID networkid.PortalID) (pt peerType, id int64, err error) {
parts := strings.Split(string(portalID), ":")
pt = peerType(parts[0])
id, err = strconv.ParseInt(parts[1], 10, 64)
return
}
func inputPeerForPortalID(portalID networkid.PortalID) (tg.InputPeerClass, error) {
peerType, id, err := parsePortalID(portalID)
if err != nil {
return nil, err
}
switch peerType {
case peerTypeUser:
return &tg.InputPeerUser{UserID: id}, nil
case peerTypeChat:
return &tg.InputPeerChat{ChatID: id}, nil
case peerTypeChannel:
return &tg.InputPeerChannel{ChannelID: id}, nil
default:
panic("invalid peer type")
}
}