tdl/pkg/utils/telegram.go

76 lines
1.5 KiB
Go
Raw Normal View History

2022-09-01 19:10:08 +08:00
package utils
import (
2022-09-04 10:48:33 +08:00
"context"
2022-09-01 19:10:08 +08:00
"fmt"
2022-09-04 10:48:33 +08:00
"github.com/gotd/td/telegram/peers"
"github.com/gotd/td/tg"
2022-09-01 19:10:08 +08:00
"net/url"
"strconv"
"strings"
)
type telegram struct{}
var Telegram telegram
2022-09-04 10:48:33 +08:00
// ParseChannelMsgLink return dialog id, msg id, error
func (t telegram) ParseChannelMsgLink(ctx context.Context, manager *peers.Manager, s string) (*tg.InputChannel, int, error) {
2022-09-01 19:10:08 +08:00
u, err := url.Parse(s)
if err != nil {
2022-09-04 10:48:33 +08:00
return nil, 0, err
2022-09-01 19:10:08 +08:00
}
paths := strings.Split(strings.TrimPrefix(u.Path, "/"), "/")
2022-09-04 10:48:33 +08:00
from, msg := "", ""
switch len(paths) {
case 2:
from = paths[0]
msg = paths[1]
case 3:
if paths[0] != "c" {
return nil, 0, fmt.Errorf("invalid link path: %s", paths)
}
from = paths[1]
msg = paths[2]
2022-09-01 19:10:08 +08:00
}
2022-09-04 10:48:33 +08:00
ch, err := t.GetInputChannel(ctx, manager, from)
2022-09-01 19:10:08 +08:00
if err != nil {
2022-09-04 10:48:33 +08:00
return nil, 0, err
2022-09-01 19:10:08 +08:00
}
2022-09-04 10:48:33 +08:00
msgid, err := strconv.Atoi(msg)
2022-09-01 19:10:08 +08:00
if err != nil {
2022-09-04 10:48:33 +08:00
return nil, 0, err
2022-09-01 19:10:08 +08:00
}
2022-09-04 10:48:33 +08:00
return ch, msgid, nil
}
func (t telegram) GetInputChannel(ctx context.Context, manager *peers.Manager, from string) (*tg.InputChannel, error) {
id, err := strconv.ParseInt(from, 10, 64)
if err != nil {
// from is username
peer, err := manager.ResolveDomain(ctx, from)
if err != nil {
return nil, err
}
ch, ok := peer.InputPeer().(*tg.InputPeerChannel)
if !ok {
return nil, err
}
return &tg.InputChannel{ChannelID: ch.ChannelID, AccessHash: ch.AccessHash}, nil
}
ch, err := manager.ResolveChannelID(ctx, id)
if err != nil {
return nil, err
}
return &tg.InputChannel{ChannelID: ch.Raw().ID, AccessHash: ch.Raw().AccessHash}, nil
2022-09-01 19:10:08 +08:00
}