1
0
Fork 0
mirror of https://github.com/mautrix/whatsapp.git synced 2026-05-15 10:16:52 -04:00
mautrix-whatsapp/pkg/connector/id.go

83 lines
2.5 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: id.User == wa.GetStore().GetJID().User || id.User == wa.GetStore().GetLID().User,
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 id.Sender.User == wa.GetStore().GetJID().User || id.Sender.User == wa.GetStore().GetLID().User {
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, chatJID types.JID) types.JID {
if chatJID.Server == types.HiddenUserServer {
if pn, err := wa.GetStore().LIDs.GetPNForLID(ctx, chatJID); err != nil {
wa.UserLogin.Log.Err(err).
Stringer("lid", chatJID).
Msg("Failed to get phone number for LID chat")
} else if !pn.IsEmpty() {
return pn.ToNonAD()
}
}
return chatJID
}