Watch
1
0
Fork
You've already forked mautrix-whatsapp
0
mirror of https://github.com/mautrix/whatsapp.git synced 2026-08-22 20:14:56 -04:00
mautrix-whatsapp/pkg/connector/id.go
2026-08-05 17:08:20 +03:00

84 lines
2.3 KiB
Go

package connector
import (
"context"
"github.com/rs/zerolog"
"go.mau.fi/util/ptr"
"go.mau.fi/whatsmeow/proto/waCommon"
"go.mau.fi/whatsmeow/types"
"maunium.net/go/mautrix/bridgev2"
"maunium.net/go/mautrix/bridgev2/networkid"
"go.mau.fi/mautrix-whatsapp/pkg/waid"
)
func (wa *WhatsAppClient) makeWAPortalKey(chatJID types.JID) networkid.PortalKey {
key := networkid.PortalKey{
ID: waid.MakePortalID(chatJID),
}
switch chatJID.Server {
case types.DefaultUserServer, types.BotServer, types.HiddenUserServer, types.BroadcastServer:
key.Receiver = wa.UserLogin.ID
default:
if wa.Main.Bridge.Config.SplitPortals {
key.Receiver = wa.UserLogin.ID
}
}
return key
}
func (wa *WhatsAppClient) makeEventSender(ctx context.Context, id types.JID) bridgev2.EventSender {
if id.Server == types.NewsletterServer {
// Send as bot
return bridgev2.EventSender{}
}
var senderLoginJID types.JID
if wa.Main.Bridge.Config.SplitPortals {
// no need for sender login ID
} else if id.Server == types.DefaultUserServer {
senderLoginJID = id
} else if id.Server == types.HiddenUserServer {
pn, err := wa.GetStore().LIDs.GetPNForLID(ctx, id)
if err != nil {
zerolog.Ctx(ctx).Err(err).
Stringer("lid", id).
Msg("Failed to get phone number for LID to make event sender")
} else if !pn.IsEmpty() {
senderLoginJID = pn
}
}
return bridgev2.EventSender{
IsFromMe: wa.IsOwnJID(id),
Sender: waid.MakeUserID(id),
SenderLogin: waid.MakeUserLoginID(senderLoginJID),
}
}
func (wa *WhatsAppClient) messageIDToKey(id *waid.ParsedMessageID) *waCommon.MessageKey {
key := &waCommon.MessageKey{
RemoteJID: ptr.Ptr(id.Chat.String()),
ID: ptr.Ptr(id.ID),
}
if wa.IsOwnJID(id.Sender) {
key.FromMe = ptr.Ptr(true)
}
if id.Chat.Server != types.MessengerServer && id.Chat.Server != types.DefaultUserServer &&
id.Chat.Server != types.HiddenUserServer && id.Chat.Server != types.BotServer {
key.Participant = ptr.Ptr(id.Sender.String())
}
return key
}
func (wa *WhatsAppClient) maybeConvertJIDToLID(ctx context.Context, jid types.JID) types.JID {
if jid.Server == types.DefaultUserServer {
if lidForPN, err := wa.GetStore().LIDs.GetLIDForPN(ctx, jid); err != nil {
wa.UserLogin.Log.Err(err).
Stringer("pn", jid).
Msg("Failed to get LID for phone number chat")
} else if !lidForPN.IsEmpty() {
return lidForPN
}
}
return jid
}