move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
// Package peers contains helpers to work with Telegram peers.
|
||||
//
|
||||
// NB: this package is completely experimental and still WIP.
|
||||
// API and behavior may be changed dramatically, so use it with caution.
|
||||
package peers
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/constant"
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
|
||||
)
|
||||
|
||||
// Peer represents generic peer.
|
||||
type Peer interface {
|
||||
// ID returns entity ID.
|
||||
ID() int64
|
||||
// TDLibPeerID returns TDLibPeerID for this entity.
|
||||
TDLibPeerID() constant.TDLibPeerID
|
||||
|
||||
// VisibleName returns visible name of peer.
|
||||
//
|
||||
// It returns FirstName + " " + LastName for users, and title for chats and channels.
|
||||
VisibleName() string
|
||||
// Username returns peer username, if any.
|
||||
Username() (string, bool)
|
||||
// Restricted whether this user/chat/channel is restricted.
|
||||
Restricted() ([]tg.RestrictionReason, bool)
|
||||
// Verified whether this user/chat/channel is verified by Telegram.
|
||||
Verified() bool
|
||||
// Scam whether this user/chat/channel is probably a scam.
|
||||
Scam() bool
|
||||
// Fake whether this user/chat/channel was reported by many users as a fake or scam: be
|
||||
// careful when interacting with it.
|
||||
Fake() bool
|
||||
|
||||
// InputPeer returns input peer for this peer.
|
||||
InputPeer() tg.InputPeerClass
|
||||
// Sync updates current object.
|
||||
Sync(ctx context.Context) error
|
||||
// Manager returns attached Manager.
|
||||
Manager() *Manager
|
||||
|
||||
// Report reports a peer for violation of telegram's Terms of Service.
|
||||
Report(ctx context.Context, reason tg.ReportReasonClass, message string) error
|
||||
// Photo returns peer photo, if any.
|
||||
Photo(ctx context.Context) (*tg.Photo, bool, error)
|
||||
}
|
||||
|
||||
var _ = []Peer{
|
||||
User{},
|
||||
Chat{},
|
||||
Channel{},
|
||||
}
|
||||
|
||||
// ResolvePeer creates Peer using given tg.PeerClass.
|
||||
func (m *Manager) ResolvePeer(ctx context.Context, p tg.PeerClass) (Peer, error) {
|
||||
switch p := p.(type) {
|
||||
case *tg.PeerUser:
|
||||
return m.ResolveUserID(ctx, p.UserID)
|
||||
case *tg.PeerChat:
|
||||
return m.ResolveChatID(ctx, p.ChatID)
|
||||
case *tg.PeerChannel:
|
||||
return m.ResolveChannelID(ctx, p.ChannelID)
|
||||
default:
|
||||
return nil, errors.Errorf("unexpected type %T", p)
|
||||
}
|
||||
}
|
||||
|
||||
// FromInputPeer gets Peer from tg.InputPeerClass.
|
||||
func (m *Manager) FromInputPeer(ctx context.Context, p tg.InputPeerClass) (Peer, error) {
|
||||
switch p := p.(type) {
|
||||
case *tg.InputPeerSelf:
|
||||
return m.Self(ctx)
|
||||
case *tg.InputPeerChat:
|
||||
return m.GetChat(ctx, p.ChatID)
|
||||
case *tg.InputPeerUser:
|
||||
return m.GetUser(ctx, &tg.InputUser{
|
||||
UserID: p.UserID,
|
||||
AccessHash: p.AccessHash,
|
||||
})
|
||||
case *tg.InputPeerChannel:
|
||||
return m.GetChannel(ctx, &tg.InputChannel{
|
||||
ChannelID: p.ChannelID,
|
||||
AccessHash: p.AccessHash,
|
||||
})
|
||||
case *tg.InputPeerUserFromMessage:
|
||||
return m.GetUser(ctx, &tg.InputUserFromMessage{
|
||||
Peer: p.Peer,
|
||||
MsgID: p.MsgID,
|
||||
UserID: p.UserID,
|
||||
})
|
||||
case *tg.InputPeerChannelFromMessage:
|
||||
return m.GetChannel(ctx, &tg.InputChannelFromMessage{
|
||||
Peer: p.Peer,
|
||||
MsgID: p.MsgID,
|
||||
ChannelID: p.ChannelID,
|
||||
})
|
||||
default:
|
||||
return nil, errors.Errorf("unexpected type %T", p)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user