mirror of
https://github.com/mautrix/telegram.git
synced 2026-05-16 23:15:45 +03:00
handletelegram: use per-message profiles for guest bots
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user