commit 545ae2c0dd6acc697bacfb09efb9b060a97c35bf
Author: ilmaisin <iiro.laiho@iki.fi>
Date: Thu Dec 15 00:47:30 2022 +0000
diff --git a/bridge/whatsappmulti/handlers.go b/bridge/whatsappmulti/handlers.go
index 379699d..34dce47 100644
--- a/bridge/whatsappmulti/handlers.go
+++ b/bridge/whatsappmulti/handlers.go
@@ -5110 +517 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto.
senderJID := messageInfo.Sender
channel := messageInfo.Chat
- senderName := b.getSenderName(messageInfo.Sender)
- if senderName == "" {
- senderName = "Someone" // don't expose telephone number
- }
+ senderName := b.getSenderName(messageInfo)
if msg.GetExtendedTextMessage() == nil && msg.GetConversation() == "" {
b.Log.Debugf("message without text content? %#v", msg)
@@ -829 +796 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto.
// mentions comes as telephone numbers and we don't want to expose it to other bridges
// replace it with something more meaninful to others
mention := b.getSenderNotify(types.NewJID(numberAndSuffix[0], types.DefaultUserServer))
- if mention == "" {
- mention = "someone"
- }
text = strings.Replace(text, "@"+numberAndSuffix[0], "@"+mention, 1)
}
@@ -1187 +1127 @@ func (b *Bwhatsapp) handleImageMessage(msg *events.Message) {
imsg := msg.Message.GetImageMessage()
senderJID := msg.Info.Sender
- senderName := b.getSenderName(senderJID)
+ senderName := b.getSenderName(msg.Info)
ci := imsg.GetContextInfo()
if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -1817 +1757 @@ func (b *Bwhatsapp) handleVideoMessage(msg *events.Message) {
imsg := msg.Message.GetVideoMessage()
senderJID := msg.Info.Sender
- senderName := b.getSenderName(senderJID)
+ senderName := b.getSenderName(msg.Info)
ci := imsg.GetContextInfo()
if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -2387 +2327 @@ func (b *Bwhatsapp) handleAudioMessage(msg *events.Message) {
imsg := msg.Message.GetAudioMessage()
senderJID := msg.Info.Sender
- senderName := b.getSenderName(senderJID)
+ senderName := b.getSenderName(msg.Info)
ci := imsg.GetContextInfo()
if senderJID == (types.JID{}) && ci.Participant != nil {
@@ -2957 +2897 @@ func (b *Bwhatsapp) handleDocumentMessage(msg *events.Message) {
imsg := msg.Message.GetDocumentMessage()
senderJID := msg.Info.Sender
- senderName := b.getSenderName(senderJID)
+ senderName := b.getSenderName(msg.Info)
ci := imsg.GetContextInfo()
if senderJID == (types.JID{}) && ci.Participant != nil {
diff --git a/bridge/whatsappmulti/helpers.go b/bridge/whatsappmulti/helpers.go
index 5b1ec86..c3c9d01 100644
--- a/bridge/whatsappmulti/helpers.go
+++ b/bridge/whatsappmulti/helpers.go
@@ -1824 +187 @@ type ProfilePicInfo struct {
Status int16 `json:"status"`
}
-func (b *Bwhatsapp) getSenderName(senderJid types.JID) string {
- if sender, exists := b.contacts[senderJid]; exists {
- if sender.FullName != "" {
- return sender.FullName
- }
- // if user is not in phone contacts
- // it is the most obvious scenario unless you sync your phone contacts with some remote updated source
- // users can change it in their WhatsApp settings -> profile -> click on Avatar
- if sender.PushName != "" {
- return sender.PushName
- }
-
- if sender.FirstName != "" {
- return sender.FirstName
- }
- }
-
- // try to reload this contact
+func (b *Bwhatsapp) reloadContacts(){
if _, err := b.wc.Store.Contacts.GetAllContacts(); err != nil {
b.Log.Errorf("error on update of contacts: %v", err)
}
@@ -4832 +3160 @@ func (b *Bwhatsapp) getSenderName(senderJid types.JID) string {
if len(allcontacts) > 0 {
b.contacts = allcontacts
}
+}
+
+func (b *Bwhatsapp) getSenderName(info types.MessageInfo) string {
+ // Parse AD JID
+ var senderJid types.JID
+ senderJid.User, senderJid.Server = info.Sender.User, info.Sender.Server
+
+ sender, exists := b.contacts[senderJid]
+
+ if !exists || (sender.FullName == "" && sender.FirstName == "") {
+ b.reloadContacts() // Contacts may need to be reloaded
+ sender, exists = b.contacts[senderJid]
+ }
- if sender, exists := b.contacts[senderJid]; exists {
- if sender.FullName != "" {
- return sender.FullName
- }
- // if user is not in phone contacts
- // it is the most obvious scenario unless you sync your phone contacts with some remote updated source
- // users can change it in their WhatsApp settings -> profile -> click on Avatar
- if sender.PushName != "" {
- return sender.PushName
- }
-
- if sender.FirstName != "" {
- return sender.FirstName
- }
+ if exists && sender.FullName != "" {
+ return sender.FullName
+ }
+
+ if info.PushName != "" {
+ return info.PushName
}
+ if exists && sender.FirstName != "" {
+ return sender.FirstName
+ }
+
return "Someone"
}
func (b *Bwhatsapp) getSenderNotify(senderJid types.JID) string {
- if sender, exists := b.contacts[senderJid]; exists {
+ sender, exists := b.contacts[senderJid]
+
+ if !exists || (sender.FullName == "" && sender.PushName == "" && sender.FirstName == "") {
+ b.reloadContacts() // Contacts may need to be reloaded
+ sender, exists = b.contacts[senderJid]
+ }
+
+ if !exists {
+ return "someone"
+ }
+
+ if exists && sender.FullName != "" {
+ return sender.FullName
+ }
+
+ if exists && sender.PushName != "" {
return sender.PushName
}
- return ""
+ if exists && sender.FirstName != "" {
+ return sender.FirstName
+ }
+
+ return "someone"
}
func (b *Bwhatsapp) GetProfilePicThumb(jid string) (*types.ProfilePictureInfo, error) {