initial metadata: set room name
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
+108
-45
@@ -120,58 +120,119 @@ func connectTelegramClient(ctx context.Context, client *telegram.Client) (contex
|
|||||||
|
|
||||||
func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, e tg.Entities, update *tg.UpdateNewMessage) error {
|
func (t *TelegramClient) onUpdateNewMessage(ctx context.Context, e tg.Entities, update *tg.UpdateNewMessage) error {
|
||||||
log := zerolog.Ctx(ctx)
|
log := zerolog.Ctx(ctx)
|
||||||
msg, ok := update.GetMessage().(*tg.Message)
|
switch msg := update.GetMessage().(type) {
|
||||||
if !ok {
|
case *tg.Message:
|
||||||
log.Error().Type("message", update.GetMessage()).Msg("unknown message type")
|
sender := t.getEventSender(msg)
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var sender bridgev2.EventSender
|
if media, ok := msg.GetMedia(); ok && media.TypeID() == tg.MessageMediaContactTypeID {
|
||||||
if msg.Out {
|
contact := media.(*tg.MessageMediaContact)
|
||||||
|
// TODO update the corresponding puppet
|
||||||
|
log.Info().Int64("user_id", contact.UserID).Msg("received contact")
|
||||||
|
}
|
||||||
|
|
||||||
|
t.main.Bridge.QueueRemoteEvent(t.userLogin, &bridgev2.SimpleRemoteEvent[*tg.Message]{
|
||||||
|
Type: bridgev2.RemoteEventMessage,
|
||||||
|
LogContext: func(c zerolog.Context) zerolog.Context {
|
||||||
|
return c.
|
||||||
|
Int("message_id", update.Message.GetID()).
|
||||||
|
Str("sender", string(sender.Sender)).
|
||||||
|
Str("sender_login", string(sender.SenderLogin)).
|
||||||
|
Bool("is_from_me", sender.IsFromMe)
|
||||||
|
},
|
||||||
|
ID: ids.MakeMessageID(msg.ID),
|
||||||
|
Sender: sender,
|
||||||
|
PortalKey: ids.MakePortalID(msg.PeerID),
|
||||||
|
Data: msg,
|
||||||
|
CreatePortal: true,
|
||||||
|
ConvertMessageFunc: t.msgConv.ToMatrix,
|
||||||
|
Timestamp: time.Unix(int64(msg.Date), 0),
|
||||||
|
})
|
||||||
|
case *tg.MessageService:
|
||||||
|
fmt.Printf("message service\n")
|
||||||
|
fmt.Printf("%v\n", msg)
|
||||||
|
|
||||||
|
// sender := t.getEventSender(msg)
|
||||||
|
// switch action := msg.Action.(type) {
|
||||||
|
// case *tg.MessageActionChatEditTitle:
|
||||||
|
// case *tg.MessageActionChatCreate:
|
||||||
|
// case *tg.MessageActionChatEditPhoto:
|
||||||
|
// case *tg.MessageActionChatDeletePhoto:
|
||||||
|
// case *tg.MessageActionChatAddUser:
|
||||||
|
// case *tg.MessageActionChatDeleteUser:
|
||||||
|
// case *tg.MessageActionChatJoinedByLink:
|
||||||
|
// case *tg.MessageActionChannelCreate:
|
||||||
|
// case *tg.MessageActionChatMigrateTo:
|
||||||
|
// case *tg.MessageActionChannelMigrateFrom:
|
||||||
|
// case *tg.MessageActionPinMessage:
|
||||||
|
// case *tg.MessageActionHistoryClear:
|
||||||
|
// case *tg.MessageActionGameScore:
|
||||||
|
// case *tg.MessageActionPaymentSentMe:
|
||||||
|
// case *tg.MessageActionPaymentSent:
|
||||||
|
// case *tg.MessageActionPhoneCall:
|
||||||
|
// case *tg.MessageActionScreenshotTaken:
|
||||||
|
// case *tg.MessageActionCustomAction:
|
||||||
|
// case *tg.MessageActionBotAllowed:
|
||||||
|
// case *tg.MessageActionSecureValuesSentMe:
|
||||||
|
// case *tg.MessageActionSecureValuesSent:
|
||||||
|
// case *tg.MessageActionContactSignUp:
|
||||||
|
// case *tg.MessageActionGeoProximityReached:
|
||||||
|
// case *tg.MessageActionGroupCall:
|
||||||
|
// case *tg.MessageActionInviteToGroupCall:
|
||||||
|
// case *tg.MessageActionSetMessagesTTL:
|
||||||
|
// case *tg.MessageActionGroupCallScheduled:
|
||||||
|
// case *tg.MessageActionSetChatTheme:
|
||||||
|
// case *tg.MessageActionChatJoinedByRequest:
|
||||||
|
// case *tg.MessageActionWebViewDataSentMe:
|
||||||
|
// case *tg.MessageActionWebViewDataSent:
|
||||||
|
// case *tg.MessageActionGiftPremium:
|
||||||
|
// case *tg.MessageActionTopicCreate:
|
||||||
|
// case *tg.MessageActionTopicEdit:
|
||||||
|
// case *tg.MessageActionSuggestProfilePhoto:
|
||||||
|
// case *tg.MessageActionRequestedPeer:
|
||||||
|
// case *tg.MessageActionSetChatWallPaper:
|
||||||
|
// case *tg.MessageActionGiftCode:
|
||||||
|
// case *tg.MessageActionGiveawayLaunch:
|
||||||
|
// case *tg.MessageActionGiveawayResults:
|
||||||
|
// case *tg.MessageActionBoostApply:
|
||||||
|
// case *tg.MessageActionRequestedPeerSentMe:
|
||||||
|
// default:
|
||||||
|
// return fmt.Errorf("unknown action type %T", action)
|
||||||
|
// }
|
||||||
|
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unknown message type %T", msg)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type messageWithSender interface {
|
||||||
|
GetOut() bool
|
||||||
|
GetFromID() (tg.PeerClass, bool)
|
||||||
|
GetPeerID() tg.PeerClass
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TelegramClient) getEventSender(msg messageWithSender) (sender bridgev2.EventSender) {
|
||||||
|
if msg.GetOut() {
|
||||||
sender.IsFromMe = true
|
sender.IsFromMe = true
|
||||||
sender.SenderLogin = ids.MakeUserLoginID(t.loginID)
|
sender.SenderLogin = ids.MakeUserLoginID(t.loginID)
|
||||||
sender.Sender = ids.MakeUserID(t.loginID)
|
sender.Sender = ids.MakeUserID(t.loginID)
|
||||||
} else if msg.FromID != nil {
|
} else if f, ok := msg.GetFromID(); ok {
|
||||||
switch from := msg.FromID.(type) {
|
switch from := f.(type) {
|
||||||
case *tg.PeerUser:
|
case *tg.PeerUser:
|
||||||
sender.SenderLogin = ids.MakeUserLoginID(from.UserID)
|
sender.SenderLogin = ids.MakeUserLoginID(from.UserID)
|
||||||
sender.Sender = ids.MakeUserID(from.UserID)
|
sender.Sender = ids.MakeUserID(from.UserID)
|
||||||
default:
|
default:
|
||||||
fmt.Printf("%+v\n", msg.FromID)
|
fmt.Printf("%+v\n", f)
|
||||||
fmt.Printf("%T\n", msg.FromID)
|
fmt.Printf("%T\n", f)
|
||||||
panic("unimplemented FromID")
|
panic("unimplemented FromID")
|
||||||
}
|
}
|
||||||
} else if peer, ok := msg.PeerID.(*tg.PeerUser); ok {
|
} else if peer, ok := msg.GetPeerID().(*tg.PeerUser); ok {
|
||||||
sender.SenderLogin = ids.MakeUserLoginID(peer.UserID)
|
sender.SenderLogin = ids.MakeUserLoginID(peer.UserID)
|
||||||
sender.Sender = ids.MakeUserID(peer.UserID)
|
sender.Sender = ids.MakeUserID(peer.UserID)
|
||||||
} else {
|
} else {
|
||||||
panic("not from anyone")
|
panic("not from anyone")
|
||||||
}
|
}
|
||||||
|
return
|
||||||
if media, ok := msg.GetMedia(); ok && media.TypeID() == tg.MessageMediaContactTypeID {
|
|
||||||
contact := media.(*tg.MessageMediaContact)
|
|
||||||
// TODO update the corresponding puppet
|
|
||||||
log.Info().Int64("user_id", contact.UserID).Msg("received contact")
|
|
||||||
}
|
|
||||||
|
|
||||||
t.main.Bridge.QueueRemoteEvent(t.userLogin, &bridgev2.SimpleRemoteEvent[*tg.Message]{
|
|
||||||
Type: bridgev2.RemoteEventMessage,
|
|
||||||
LogContext: func(c zerolog.Context) zerolog.Context {
|
|
||||||
return c.
|
|
||||||
Int("message_id", update.Message.GetID()).
|
|
||||||
Str("sender", string(sender.Sender)).
|
|
||||||
Str("sender_login", string(sender.SenderLogin)).
|
|
||||||
Bool("is_from_me", sender.IsFromMe)
|
|
||||||
},
|
|
||||||
ID: ids.MakeMessageID(msg.ID),
|
|
||||||
Sender: sender,
|
|
||||||
PortalKey: ids.MakePortalID(msg.PeerID),
|
|
||||||
Data: msg,
|
|
||||||
CreatePortal: true,
|
|
||||||
ConvertMessageFunc: t.msgConv.ToMatrix,
|
|
||||||
Timestamp: time.Unix(int64(msg.Date), 0),
|
|
||||||
})
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TelegramClient) onUpdateNewChannelMessage(ctx context.Context, e tg.Entities, update *tg.UpdateNewChannelMessage) error {
|
func (t *TelegramClient) onUpdateNewChannelMessage(ctx context.Context, e tg.Entities, update *tg.UpdateNewChannelMessage) error {
|
||||||
@@ -194,7 +255,7 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var name, topic string
|
var name string
|
||||||
var members []networkid.UserID
|
var members []networkid.UserID
|
||||||
var isSpace, isDM bool
|
var isSpace, isDM bool
|
||||||
|
|
||||||
@@ -215,15 +276,18 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta
|
|||||||
isDM = true
|
isDM = true
|
||||||
}
|
}
|
||||||
case ids.PeerTypeChat:
|
case ids.PeerTypeChat:
|
||||||
// TODO get name of chat
|
fullChat, err := t.client.API().MessagesGetFullChat(ctx, id)
|
||||||
chat, err := t.client.API().MessagesGetFullChat(ctx, id)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(chat.Users) == 0 {
|
for _, c := range fullChat.Chats {
|
||||||
return nil, fmt.Errorf("no users found in chat %d", id)
|
if c.GetID() == id {
|
||||||
|
name = c.(*tg.Chat).Title
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for _, user := range chat.Users {
|
|
||||||
|
for _, user := range fullChat.Users {
|
||||||
members = append(members, ids.MakeUserID(user.GetID()))
|
members = append(members, ids.MakeUserID(user.GetID()))
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -232,8 +296,7 @@ func (t *TelegramClient) GetChatInfo(ctx context.Context, portal *bridgev2.Porta
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &bridgev2.PortalInfo{
|
return &bridgev2.PortalInfo{
|
||||||
Name: &name,
|
Name: &name,
|
||||||
Topic: &topic, // TODO
|
|
||||||
// TODO
|
// TODO
|
||||||
// Avatar *Avatar
|
// Avatar *Avatar
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user