summaryrefslogtreecommitdiffstats
path: root/bridge
diff options
context:
space:
mode:
Diffstat (limited to 'bridge')
-rw-r--r--bridge/whatsappmulti/handlers.go16
-rw-r--r--bridge/whatsappmulti/helpers.go79
2 files changed, 50 insertions, 45 deletions
diff --git a/bridge/whatsappmulti/handlers.go b/bridge/whatsappmulti/handlers.go
index 379699d9..34dce471 100644
--- a/bridge/whatsappmulti/handlers.go
+++ b/bridge/whatsappmulti/handlers.go
@@ -51,10 +51,7 @@ 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)
@@ -82,9 +79,6 @@ 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)
}
@@ -118,7 +112,7 @@ 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 {
@@ -181,7 +175,7 @@ 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 {
@@ -238,7 +232,7 @@ 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 {
@@ -295,7 +289,7 @@ 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 5b1ec86c..c3c9d018 100644
--- a/bridge/whatsappmulti/helpers.go
+++ b/bridge/whatsappmulti/helpers.go
@@ -18,24 +18,7 @@ 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)
}
@@ -48,32 +31,60 @@ 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) {