diff options
Diffstat (limited to 'teleirc/matterbridge/bridge/whatsappmulti/helpers.go')
| -rw-r--r-- | teleirc/matterbridge/bridge/whatsappmulti/helpers.go | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/teleirc/matterbridge/bridge/whatsappmulti/helpers.go b/teleirc/matterbridge/bridge/whatsappmulti/helpers.go new file mode 100644 index 0000000..75d9f5f --- /dev/null +++ b/teleirc/matterbridge/bridge/whatsappmulti/helpers.go @@ -0,0 +1,124 @@ +//go:build whatsappmulti +// +build whatsappmulti + +package bwhatsapp + +import ( + "fmt" + "strings" + + "go.mau.fi/whatsmeow" + "go.mau.fi/whatsmeow/store" + "go.mau.fi/whatsmeow/store/sqlstore" + "go.mau.fi/whatsmeow/types" +) + +type ProfilePicInfo struct { + URL string `json:"eurl"` + Tag string `json:"tag"` + Status int16 `json:"status"` +} + +func (b *Bwhatsapp) reloadContacts() { + if _, err := b.wc.Store.Contacts.GetAllContacts(); err != nil { + b.Log.Errorf("error on update of contacts: %v", err) + } + + allcontacts, err := b.wc.Store.Contacts.GetAllContacts() + if err != nil { + b.Log.Errorf("error on update of contacts: %v", err) + } + + 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 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 { + 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 + } + + if exists && sender.FirstName != "" { + return sender.FirstName + } + + return "someone" +} + +func (b *Bwhatsapp) GetProfilePicThumb(jid string) (*types.ProfilePictureInfo, error) { + pjid, _ := types.ParseJID(jid) + + info, err := b.wc.GetProfilePictureInfo(pjid, &whatsmeow.GetProfilePictureParams{ + Preview: true, + }) + if err != nil { + return nil, fmt.Errorf("failed to get avatar: %v", err) + } + + return info, nil +} + +func isGroupJid(identifier string) bool { + return strings.HasSuffix(identifier, "@g.us") || + strings.HasSuffix(identifier, "@temp") || + strings.HasSuffix(identifier, "@broadcast") +} + +func (b *Bwhatsapp) getDevice() (*store.Device, error) { + device := &store.Device{} + + storeContainer, err := sqlstore.New("sqlite", "file:"+b.Config.GetString("sessionfile")+".db?_foreign_keys=on&_pragma=busy_timeout=10000", nil) + if err != nil { + return device, fmt.Errorf("failed to connect to database: %v", err) + } + + device, err = storeContainer.GetFirstDevice() + if err != nil { + return device, fmt.Errorf("failed to get device: %v", err) + } + + return device, nil +} |
