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,96 @@
|
||||
package e2e
|
||||
|
||||
import (
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
|
||||
)
|
||||
|
||||
// EventBuilder struct.
|
||||
type EventBuilder struct {
|
||||
updates []tg.UpdateClass
|
||||
ents *Entities
|
||||
s *server
|
||||
date int
|
||||
}
|
||||
|
||||
// SendMessage send a new message.
|
||||
func (e *EventBuilder) SendMessage(from *tg.PeerUser, peer tg.PeerClass, text string) {
|
||||
msg := &tg.Message{
|
||||
Message: text,
|
||||
PeerID: peer,
|
||||
FromID: from,
|
||||
Date: e.date,
|
||||
}
|
||||
|
||||
fromUser, ok := e.s.peers.users[from.UserID]
|
||||
if !ok {
|
||||
panic("bad fromID")
|
||||
}
|
||||
e.ents.Users[from.UserID] = fromUser
|
||||
|
||||
switch peer := peer.(type) {
|
||||
case *tg.PeerUser:
|
||||
user, ok := e.s.peers.users[peer.UserID]
|
||||
if !ok {
|
||||
panic("peer not found")
|
||||
}
|
||||
|
||||
e.ents.Users[user.ID] = user
|
||||
e.s.messages.common = append(e.s.messages.common, msg)
|
||||
e.updates = append(e.updates, &tg.UpdateNewMessage{
|
||||
Message: msg,
|
||||
Pts: len(e.s.messages.common),
|
||||
PtsCount: 1,
|
||||
})
|
||||
case *tg.PeerChat:
|
||||
chat, ok := e.s.peers.chats[peer.ChatID]
|
||||
if !ok {
|
||||
panic("peer not found")
|
||||
}
|
||||
|
||||
e.ents.Chats[chat.ID] = chat
|
||||
e.s.messages.common = append(e.s.messages.common, msg)
|
||||
e.updates = append(e.updates, &tg.UpdateNewMessage{
|
||||
Message: msg,
|
||||
Pts: len(e.s.messages.common),
|
||||
PtsCount: 1,
|
||||
})
|
||||
case *tg.PeerChannel:
|
||||
channel, ok := e.s.peers.channels[peer.ChannelID]
|
||||
if !ok {
|
||||
panic("peer not found")
|
||||
}
|
||||
|
||||
e.ents.Channels[channel.ID] = channel
|
||||
msgs := append(e.s.messages.channels[peer.ChannelID], msg)
|
||||
e.s.messages.channels[peer.ChannelID] = msgs
|
||||
e.updates = append(e.updates, &tg.UpdateNewChannelMessage{
|
||||
Message: msg,
|
||||
Pts: len(msgs),
|
||||
PtsCount: 1,
|
||||
})
|
||||
default:
|
||||
panic("unexpected peer type")
|
||||
}
|
||||
}
|
||||
|
||||
// CreateEvent creates new event.
|
||||
func (s *server) CreateEvent(f func(ev *EventBuilder)) *tg.Updates {
|
||||
s.mux.Lock()
|
||||
defer s.mux.Unlock()
|
||||
|
||||
s.date++
|
||||
ev := &EventBuilder{
|
||||
ents: NewEntities(),
|
||||
s: s,
|
||||
date: s.date,
|
||||
}
|
||||
f(ev)
|
||||
|
||||
return &tg.Updates{
|
||||
Updates: ev.updates,
|
||||
Users: ev.ents.AsUsers(),
|
||||
Chats: ev.ents.AsChats(),
|
||||
Date: s.date,
|
||||
Seq: 0,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user