chatinfo: improve handling LIDs

This commit is contained in:
Tulir Asokan 2024-12-15 12:15:49 +02:00
parent 96c00016f7
commit cc52b435f2
2 changed files with 28 additions and 1 deletions

View file

@ -286,23 +286,35 @@ func (wa *WhatsAppClient) wrapGroupInfoChange(evt *events.GroupInfo) *bridgev2.C
MemberMap: make(map[networkid.UserID]bridgev2.ChatMember),
}
for _, userID := range evt.Join {
if userID.Server != types.DefaultUserServer {
continue
}
memberChanges.MemberMap[waid.MakeUserID(userID)] = bridgev2.ChatMember{
EventSender: wa.makeEventSender(userID),
}
}
for _, userID := range evt.Promote {
if userID.Server != types.DefaultUserServer {
continue
}
memberChanges.MemberMap[waid.MakeUserID(userID)] = bridgev2.ChatMember{
EventSender: wa.makeEventSender(userID),
PowerLevel: ptr.Ptr(adminPL),
}
}
for _, userID := range evt.Demote {
if userID.Server != types.DefaultUserServer {
continue
}
memberChanges.MemberMap[waid.MakeUserID(userID)] = bridgev2.ChatMember{
EventSender: wa.makeEventSender(userID),
PowerLevel: ptr.Ptr(defaultPL),
}
}
for _, userID := range evt.Leave {
if userID.Server != types.DefaultUserServer {
continue
}
memberChanges.MemberMap[waid.MakeUserID(userID)] = bridgev2.ChatMember{
EventSender: wa.makeEventSender(userID),
Membership: event.MembershipLeave,

View file

@ -36,15 +36,30 @@ func ParsePortalID(portal networkid.PortalID) (types.JID, error) {
return parsed, nil
}
const LIDPrefix = "lid-"
func MakeUserID(user types.JID) networkid.UserID {
return networkid.UserID(user.User)
switch user.Server {
case types.DefaultUserServer:
return networkid.UserID(user.User)
case types.HiddenUserServer:
return networkid.UserID(LIDPrefix + user.User)
default:
return ""
}
}
func ParseUserID(user networkid.UserID) types.JID {
if strings.HasPrefix(string(user), LIDPrefix) {
return types.NewJID(strings.TrimPrefix(string(user), LIDPrefix), types.HiddenUserServer)
}
return types.NewJID(string(user), types.DefaultUserServer)
}
func MakeUserLoginID(user types.JID) networkid.UserLoginID {
if user.Server != types.DefaultUserServer {
return ""
}
return networkid.UserLoginID(user.User)
}