handletelegram: use per-message profiles for guest bots

This commit is contained in:
Tulir Asokan
2026-05-11 15:43:32 +03:00
parent 99fadcdff2
commit cf6d403ed9
2 changed files with 24 additions and 4 deletions

View File

@@ -686,11 +686,18 @@ func (tc *TelegramClient) migrateChat(ctx context.Context, oldPortalKey, newPort
return nil
}
func (tc *TelegramClient) getEventSender(msg interface {
type eventSenderable interface {
GetOut() bool
GetFromID() (tg.PeerClass, bool)
GetPeerID() tg.PeerClass
}, isBroadcastChannel bool) bridgev2.EventSender {
}
type extendedEventSenderable interface {
eventSenderable
GetGuestchatViaFrom() (value tg.PeerClass, ok bool)
}
func (tc *TelegramClient) getEventSender(msg eventSenderable, isBroadcastChannel bool) bridgev2.EventSender {
if isBroadcastChannel && msg.GetPeerID().TypeID() == tg.PeerChannelTypeID {
// Always send as the channel in broadcast channels. We set a
// per-message profile to indicate the actual user it was from.
@@ -701,7 +708,15 @@ func (tc *TelegramClient) getEventSender(msg interface {
return tc.mySender()
}
peer, ok := msg.GetFromID()
var peer tg.PeerClass
var ok bool
var extended extendedEventSenderable
if extended, ok = msg.(extendedEventSenderable); ok {
peer, ok = extended.GetGuestchatViaFrom()
}
if !ok {
peer, ok = msg.GetFromID()
}
if !ok {
peer = msg.GetPeerID()
}

View File

@@ -134,6 +134,11 @@ func (tc *TelegramClient) mediaToMatrix(
}
}
func hasGuestchatViaFrom(msg *tg.Message) bool {
_, ok := msg.GetGuestchatViaFrom()
return ok
}
func (tc *TelegramClient) convertToMatrix(
ctx context.Context,
portal *bridgev2.Portal,
@@ -150,7 +155,7 @@ func (tc *TelegramClient) convertToMatrix(
var perMessageProfile *event.BeeperPerMessageProfile
if peerType, _, _, err := ids.ParsePortalID(portal.ID); err != nil {
return nil, fmt.Errorf("failed to parse portal ID: %w", err)
} else if peerType == ids.PeerTypeChannel && !portal.Metadata.(*PortalMetadata).IsSuperGroup {
} else if (peerType == ids.PeerTypeChannel && !portal.Metadata.(*PortalMetadata).IsSuperGroup) || hasGuestchatViaFrom(msg) {
var sender *networkid.UserID
if msg.Out {
sender = &tc.userID