You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

85 lines
2.1 KiB

package services
import (
"errors"
"fmt"
"github.com/aldinokemal/go-whatsapp-web-multidevice/structs"
"github.com/aldinokemal/go-whatsapp-web-multidevice/utils"
"github.com/gofiber/fiber/v2"
"go.mau.fi/whatsmeow"
"go.mau.fi/whatsmeow/types"
)
type UserServiceImpl struct {
WaCli *whatsmeow.Client
}
func NewUserService(waCli *whatsmeow.Client) UserService {
return &UserServiceImpl{
WaCli: waCli,
}
}
func (service UserServiceImpl) UserInfo(_ *fiber.Ctx, request structs.UserInfoRequest) (response structs.UserInfoResponse, err error) {
if !service.WaCli.IsLoggedIn() {
panic(utils.AuthError{Message: "you are not loggin"})
}
var jids []types.JID
jid, ok := utils.ParseJID(request.PhoneNumber)
if !ok {
return response, errors.New("invalid JID " + request.PhoneNumber)
}
jids = append(jids, jid)
resp, err := service.WaCli.GetUserInfo(jids)
if err != nil {
return response, err
}
for _, userInfo := range resp {
var device []structs.UserInfoResponseDataDevice
for _, j := range userInfo.Devices {
device = append(device, structs.UserInfoResponseDataDevice{
User: j.User,
Agent: j.Agent,
Device: j.Device,
Server: j.Server,
AD: j.AD,
})
}
data := structs.UserInfoResponseData{
Status: userInfo.Status,
PictureID: userInfo.PictureID,
Devices: device,
}
if userInfo.VerifiedName != nil {
data.VerifiedName = fmt.Sprintf("%v", *userInfo.VerifiedName)
}
response.Data = append(response.Data, data)
}
return response, nil
}
func (service UserServiceImpl) UserAvatar(_ *fiber.Ctx, request structs.UserAvatarRequest) (response structs.UserAvatarResponse, err error) {
if !service.WaCli.IsLoggedIn() {
panic(utils.AuthError{Message: "you are not loggin"})
}
jid, ok := utils.ParseJID(request.PhoneNumber)
if !ok {
return response, errors.New("invalid JID " + request.PhoneNumber)
}
pic, err := service.WaCli.GetProfilePictureInfo(jid, false)
if err != nil {
return response, err
} else if pic == nil {
return response, errors.New("no avatar found")
} else {
response.URL = pic.URL
response.ID = pic.ID
response.Type = pic.Type
return response, nil
}
}