Browse Source

feat: update go lib

pull/301/head
Aldino Kemal 10 months ago
parent
commit
36496b3246
  1. 6
      src/cmd/root.go
  2. 2
      src/config/settings.go
  3. 8
      src/go.mod
  4. 8
      src/go.sum
  5. 76
      src/pkg/whatsapp/init.go
  6. 5
      src/pkg/whatsapp/utils.go
  7. 17
      src/pkg/whatsapp/webhook.go
  8. 12
      src/services/app.go
  9. 4
      src/services/message.go
  10. 8
      src/services/user.go

6
src/cmd/root.go

@ -1,6 +1,7 @@
package cmd
import (
"context"
"embed"
"fmt"
"log"
@ -230,8 +231,9 @@ func runRest(_ *cobra.Command, _ []string) {
}))
}
db := whatsapp.InitWaDB()
cli := whatsapp.InitWaCLI(db)
ctx := context.Background()
db := whatsapp.InitWaDB(ctx)
cli := whatsapp.InitWaCLI(ctx, db)
// Service
appService := services.NewAppService(cli, db)

2
src/config/settings.go

@ -5,7 +5,7 @@ import (
)
var (
AppVersion = "v5.6.1"
AppVersion = "v5.6.2"
AppPort = "3000"
AppDebug = false
AppOs = "AldinoKemal"

8
src/go.mod

@ -7,7 +7,7 @@ require (
github.com/disintegration/imaging v1.6.2
github.com/dustin/go-humanize v1.0.1
github.com/go-ozzo/ozzo-validation/v4 v4.3.0
github.com/gofiber/fiber/v2 v2.52.6
github.com/gofiber/fiber/v2 v2.52.8
github.com/gofiber/template/html/v2 v2.1.3
github.com/gofiber/websocket/v2 v2.2.1
github.com/google/uuid v1.6.0
@ -19,8 +19,8 @@ require (
github.com/spf13/viper v1.20.1
github.com/stretchr/testify v1.10.0
github.com/valyala/fasthttp v1.62.0
go.mau.fi/libsignal v0.1.2
go.mau.fi/whatsmeow v0.0.0-20250501130609-4c93ee4e6efa
go.mau.fi/libsignal v0.2.0
go.mau.fi/whatsmeow v0.0.0-20250521125706-91ac75c2f61a
golang.org/x/image v0.27.0
google.golang.org/protobuf v1.36.6
)
@ -55,7 +55,7 @@ require (
github.com/spf13/pflag v1.0.6 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
go.mau.fi/util v0.8.6 // indirect
go.mau.fi/util v0.8.7 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.38.0 // indirect
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect

8
src/go.sum

@ -36,6 +36,8 @@ github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlnd
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofiber/fiber/v2 v2.52.6 h1:Rfp+ILPiYSvvVuIPvxrBns+HJp8qGLDnLJawAu27XVI=
github.com/gofiber/fiber/v2 v2.52.6/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
github.com/gofiber/fiber/v2 v2.52.8 h1:xl4jJQ0BV5EJTA2aWiKw/VddRpHrKeZLF0QPUxqn0x4=
github.com/gofiber/fiber/v2 v2.52.8/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
github.com/gofiber/template v1.8.3 h1:hzHdvMwMo/T2kouz2pPCA0zGiLCeMnoGsQZBTSYgZxc=
github.com/gofiber/template v1.8.3/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8=
github.com/gofiber/template/html/v2 v2.1.3 h1:n1LYBtmr9C0V/k/3qBblXyMxV5B0o/gpb6dFLp8ea+o=
@ -144,8 +146,12 @@ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3i
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.mau.fi/libsignal v0.1.2 h1:Vs16DXWxSKyzVtI+EEXLCSy5pVWzzCzp/2eqFGvLyP0=
go.mau.fi/libsignal v0.1.2/go.mod h1:JpnLSSJptn/s1sv7I56uEMywvz8x4YzxeF5OzdPb6PE=
go.mau.fi/libsignal v0.2.0 h1:oRXj3OHhEJq51BFEM8/50UZblmWiTYH93hsNTPcbk90=
go.mau.fi/libsignal v0.2.0/go.mod h1:tvjoDsMejgT38CXTXwqaYu8itBiY8O2Mb6biWvZBb9k=
go.mau.fi/util v0.8.6 h1:AEK13rfgtiZJL2YsNK+W4ihhYCuukcRom8WPP/w/L54=
go.mau.fi/util v0.8.6/go.mod h1:uNB3UTXFbkpp7xL1M/WvQks90B/L4gvbLpbS0603KOE=
go.mau.fi/util v0.8.7 h1:ywKarPxouJQEEijTs4mPlxC7F4AWEKokEpWc+2TYy6c=
go.mau.fi/util v0.8.7/go.mod h1:j6R3cENakc1f8HpQeFl0N15UiSTcNmIfDBNJUbL71RY=
go.mau.fi/whatsmeow v0.0.0-20250318233852-06705625cf82 h1:AZlDkXHgoQNW4gd2hnTCvPH7hYznmwc3gPaYqGZ5w8A=
go.mau.fi/whatsmeow v0.0.0-20250318233852-06705625cf82/go.mod h1:WNhj4JeQ6YR6dUOEiCXKqmE4LavSFkwRoKmu4atRrRs=
go.mau.fi/whatsmeow v0.0.0-20250402091807-b0caa1b76088 h1:ns6nk2NjqdaQnCKrp+Qqwpf+3OI7+nnH56D71+7XzOM=
@ -154,6 +160,8 @@ go.mau.fi/whatsmeow v0.0.0-20250417131650-164ddf482526 h1:i9w16FdM3zmOWdF5nh1l2M
go.mau.fi/whatsmeow v0.0.0-20250417131650-164ddf482526/go.mod h1:NlPtoLdpX3RnltqCTCZQ6kIUfprqLirtSK1gHvwoNx0=
go.mau.fi/whatsmeow v0.0.0-20250501130609-4c93ee4e6efa h1:+bQKfMtnhX2jVoCSaneH4Ctk51IVT1K2gvjyqfFjVW0=
go.mau.fi/whatsmeow v0.0.0-20250501130609-4c93ee4e6efa/go.mod h1:NlPtoLdpX3RnltqCTCZQ6kIUfprqLirtSK1gHvwoNx0=
go.mau.fi/whatsmeow v0.0.0-20250521125706-91ac75c2f61a h1:PYtzz5wdma64I47CiquGicyubzg3HIPkH/jMzpmHu8g=
go.mau.fi/whatsmeow v0.0.0-20250521125706-91ac75c2f61a/go.mod h1:Qy3L3BNBcnxfrAQ09lmFMa0ItZfg8zl9DzxKrptzfU4=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

76
src/pkg/whatsapp/init.go

@ -53,11 +53,11 @@ var (
)
// InitWaDB initializes the WhatsApp database connection
func InitWaDB() *sqlstore.Container {
func InitWaDB(ctx context.Context) *sqlstore.Container {
log = waLog.Stdout("Main", config.WhatsappLogLevel, true)
dbLog := waLog.Stdout("Database", config.WhatsappLogLevel, true)
storeContainer, err := initDatabase(dbLog)
storeContainer, err := initDatabase(ctx, dbLog)
if err != nil {
log.Errorf("Database initialization error: %v", err)
panic(pkgError.InternalServerError(fmt.Sprintf("Database initialization error: %v", err)))
@ -67,19 +67,19 @@ func InitWaDB() *sqlstore.Container {
}
// initDatabase creates and returns a database store container based on the configured URI
func initDatabase(dbLog waLog.Logger) (*sqlstore.Container, error) {
func initDatabase(ctx context.Context, dbLog waLog.Logger) (*sqlstore.Container, error) {
if strings.HasPrefix(config.DBURI, "file:") {
return sqlstore.New("sqlite3", config.DBURI, dbLog)
return sqlstore.New(ctx, "sqlite3", config.DBURI, dbLog)
} else if strings.HasPrefix(config.DBURI, "postgres:") {
return sqlstore.New("postgres", config.DBURI, dbLog)
return sqlstore.New(ctx, "postgres", config.DBURI, dbLog)
}
return nil, fmt.Errorf("unknown database type: %s. Currently only sqlite3(file:) and postgres are supported", config.DBURI)
}
// InitWaCLI initializes the WhatsApp client
func InitWaCLI(storeContainer *sqlstore.Container) *whatsmeow.Client {
device, err := storeContainer.GetFirstDevice()
func InitWaCLI(ctx context.Context, storeContainer *sqlstore.Container) *whatsmeow.Client {
device, err := storeContainer.GetFirstDevice(ctx)
if err != nil {
log.Errorf("Failed to get device: %v", err)
panic(err)
@ -99,46 +99,48 @@ func InitWaCLI(storeContainer *sqlstore.Container) *whatsmeow.Client {
cli = whatsmeow.NewClient(device, waLog.Stdout("Client", config.WhatsappLogLevel, true))
cli.EnableAutoReconnect = true
cli.AutoTrustIdentity = true
cli.AddEventHandler(handler)
cli.AddEventHandler(func(rawEvt interface{}) {
handler(ctx, rawEvt)
})
return cli
}
// handler is the main event handler for WhatsApp events
func handler(rawEvt interface{}) {
func handler(ctx context.Context, rawEvt interface{}) {
switch evt := rawEvt.(type) {
case *events.DeleteForMe:
handleDeleteForMe(evt)
handleDeleteForMe(ctx, evt)
case *events.AppStateSyncComplete:
handleAppStateSyncComplete(evt)
handleAppStateSyncComplete(ctx, evt)
case *events.PairSuccess:
handlePairSuccess(evt)
handlePairSuccess(ctx, evt)
case *events.LoggedOut:
handleLoggedOut()
handleLoggedOut(ctx)
case *events.Connected, *events.PushNameSetting:
handleConnectionEvents()
handleConnectionEvents(ctx)
case *events.StreamReplaced:
handleStreamReplaced()
handleStreamReplaced(ctx)
case *events.Message:
handleMessage(evt)
handleMessage(ctx, evt)
case *events.Receipt:
handleReceipt(evt)
handleReceipt(ctx, evt)
case *events.Presence:
handlePresence(evt)
handlePresence(ctx, evt)
case *events.HistorySync:
handleHistorySync(evt)
handleHistorySync(ctx, evt)
case *events.AppState:
handleAppState(evt)
handleAppState(ctx, evt)
}
}
// Event handler functions
func handleDeleteForMe(evt *events.DeleteForMe) {
func handleDeleteForMe(_ context.Context, evt *events.DeleteForMe) {
log.Infof("Deleted message %s for %s", evt.MessageID, evt.SenderJID.String())
}
func handleAppStateSyncComplete(evt *events.AppStateSyncComplete) {
func handleAppStateSyncComplete(_ context.Context, evt *events.AppStateSyncComplete) {
if len(cli.Store.PushName) > 0 && evt.Name == appstate.WAPatchCriticalBlock {
if err := cli.SendPresence(types.PresenceAvailable); err != nil {
log.Warnf("Failed to send available presence: %v", err)
@ -148,21 +150,21 @@ func handleAppStateSyncComplete(evt *events.AppStateSyncComplete) {
}
}
func handlePairSuccess(evt *events.PairSuccess) {
func handlePairSuccess(_ context.Context, evt *events.PairSuccess) {
websocket.Broadcast <- websocket.BroadcastMessage{
Code: "LOGIN_SUCCESS",
Message: fmt.Sprintf("Successfully pair with %s", evt.ID.String()),
}
}
func handleLoggedOut() {
func handleLoggedOut(_ context.Context) {
websocket.Broadcast <- websocket.BroadcastMessage{
Code: "LIST_DEVICES",
Result: nil,
}
}
func handleConnectionEvents() {
func handleConnectionEvents(_ context.Context) {
if len(cli.Store.PushName) == 0 {
return
}
@ -176,11 +178,11 @@ func handleConnectionEvents() {
}
}
func handleStreamReplaced() {
func handleStreamReplaced(_ context.Context) {
os.Exit(0)
}
func handleMessage(evt *events.Message) {
func handleMessage(ctx context.Context, evt *events.Message) {
// Log message metadata
metaParts := buildMessageMetaParts(evt)
log.Infof("Received message %s from %s (%s): %+v",
@ -195,13 +197,13 @@ func handleMessage(evt *events.Message) {
utils.RecordMessage(evt.Info.ID, evt.Info.Sender.String(), message)
// Handle image message if present
handleImageMessage(evt)
handleImageMessage(ctx, evt)
// Handle auto-reply if configured
handleAutoReply(evt)
// Forward to webhook if configured
handleWebhookForward(evt)
handleWebhookForward(ctx, evt)
}
func buildMessageMetaParts(evt *events.Message) []string {
@ -221,9 +223,9 @@ func buildMessageMetaParts(evt *events.Message) []string {
return metaParts
}
func handleImageMessage(evt *events.Message) {
func handleImageMessage(ctx context.Context, evt *events.Message) {
if img := evt.Message.GetImageMessage(); img != nil {
if path, err := ExtractMedia(config.PathStorages, img); err != nil {
if path, err := ExtractMedia(ctx, config.PathStorages, img); err != nil {
log.Errorf("Failed to download image: %v", err)
} else {
log.Infof("Image downloaded to %s", path)
@ -244,19 +246,19 @@ func handleAutoReply(evt *events.Message) {
}
}
func handleWebhookForward(evt *events.Message) {
func handleWebhookForward(ctx context.Context, evt *events.Message) {
if len(config.WhatsappWebhook) > 0 &&
!strings.Contains(evt.Info.SourceString(), "broadcast") &&
!isFromMySelf(evt.Info.SourceString()) {
go func(evt *events.Message) {
if err := forwardToWebhook(evt); err != nil {
if err := forwardToWebhook(ctx, evt); err != nil {
logrus.Error("Failed forward to webhook: ", err)
}
}(evt)
}
}
func handleReceipt(evt *events.Receipt) {
func handleReceipt(_ context.Context, evt *events.Receipt) {
if evt.Type == types.ReceiptTypeRead || evt.Type == types.ReceiptTypeReadSelf {
log.Infof("%v was read by %s at %s", evt.MessageIDs, evt.SourceString(), evt.Timestamp)
} else if evt.Type == types.ReceiptTypeDelivered {
@ -264,7 +266,7 @@ func handleReceipt(evt *events.Receipt) {
}
}
func handlePresence(evt *events.Presence) {
func handlePresence(_ context.Context, evt *events.Presence) {
if evt.Unavailable {
if evt.LastSeen.IsZero() {
log.Infof("%s is now offline", evt.From)
@ -276,7 +278,7 @@ func handlePresence(evt *events.Presence) {
}
}
func handleHistorySync(evt *events.HistorySync) {
func handleHistorySync(_ context.Context, evt *events.HistorySync) {
id := atomic.AddInt32(&historySyncID, 1)
fileName := fmt.Sprintf("%s/history-%d-%s-%d-%s.json",
config.PathStorages,
@ -303,6 +305,6 @@ func handleHistorySync(evt *events.HistorySync) {
log.Infof("Wrote history sync to %s", fileName)
}
func handleAppState(evt *events.AppState) {
func handleAppState(ctx context.Context, evt *events.AppState) {
log.Debugf("App state event: %+v / %+v", evt.Index, evt.SyncActionValue)
}

5
src/pkg/whatsapp/utils.go

@ -1,6 +1,7 @@
package whatsapp
import (
"context"
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
@ -23,13 +24,13 @@ import (
)
// ExtractMedia is a helper function to extract media from whatsapp
func ExtractMedia(storageLocation string, mediaFile whatsmeow.DownloadableMessage) (extractedMedia ExtractedMedia, err error) {
func ExtractMedia(ctx context.Context, storageLocation string, mediaFile whatsmeow.DownloadableMessage) (extractedMedia ExtractedMedia, err error) {
if mediaFile == nil {
logrus.Info("Skip download because data is nil")
return extractedMedia, nil
}
data, err := cli.Download(mediaFile)
data, err := cli.Download(ctx, mediaFile)
if err != nil {
return extractedMedia, err
}

17
src/pkg/whatsapp/webhook.go

@ -2,6 +2,7 @@ package whatsapp
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
@ -14,9 +15,9 @@ import (
)
// forwardToWebhook is a helper function to forward event to webhook url
func forwardToWebhook(evt *events.Message) error {
func forwardToWebhook(ctx context.Context, evt *events.Message) error {
logrus.Info("Forwarding event to webhook:", config.WhatsappWebhook)
payload, err := createPayload(evt)
payload, err := createPayload(ctx, evt)
if err != nil {
return err
}
@ -31,7 +32,7 @@ func forwardToWebhook(evt *events.Message) error {
return nil
}
func createPayload(evt *events.Message) (map[string]interface{}, error) {
func createPayload(ctx context.Context, evt *events.Message) (map[string]interface{}, error) {
message := buildEventMessage(evt)
waReaction := buildEventReaction(evt)
forwarded := buildForwarded(evt)
@ -61,7 +62,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
if audioMedia := evt.Message.GetAudioMessage(); audioMedia != nil {
path, err := ExtractMedia(config.PathMedia, audioMedia)
path, err := ExtractMedia(ctx, config.PathMedia, audioMedia)
if err != nil {
logrus.Errorf("Failed to download audio from %s: %v", evt.Info.SourceString(), err)
return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download audio: %v", err))
@ -74,7 +75,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
if documentMedia := evt.Message.GetDocumentMessage(); documentMedia != nil {
path, err := ExtractMedia(config.PathMedia, documentMedia)
path, err := ExtractMedia(ctx, config.PathMedia, documentMedia)
if err != nil {
logrus.Errorf("Failed to download document from %s: %v", evt.Info.SourceString(), err)
return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download document: %v", err))
@ -83,7 +84,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
if imageMedia := evt.Message.GetImageMessage(); imageMedia != nil {
path, err := ExtractMedia(config.PathMedia, imageMedia)
path, err := ExtractMedia(ctx, config.PathMedia, imageMedia)
if err != nil {
logrus.Errorf("Failed to download image from %s: %v", evt.Info.SourceString(), err)
return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download image: %v", err))
@ -108,7 +109,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
if stickerMedia := evt.Message.GetStickerMessage(); stickerMedia != nil {
path, err := ExtractMedia(config.PathMedia, stickerMedia)
path, err := ExtractMedia(ctx, config.PathMedia, stickerMedia)
if err != nil {
logrus.Errorf("Failed to download sticker from %s: %v", evt.Info.SourceString(), err)
return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download sticker: %v", err))
@ -117,7 +118,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
if videoMedia := evt.Message.GetVideoMessage(); videoMedia != nil {
path, err := ExtractMedia(config.PathMedia, videoMedia)
path, err := ExtractMedia(ctx, config.PathMedia, videoMedia)
if err != nil {
logrus.Errorf("Failed to download video from %s: %v", evt.Info.SourceString(), err)
return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download video: %v", err))

12
src/services/app.go

@ -107,7 +107,7 @@ func (service serviceApp) LoginWithCode(ctx context.Context, phoneNumber string)
// reconnect first
_ = service.Reconnect(ctx)
loginCode, err = service.WaCli.PairPhone(phoneNumber, true, whatsmeow.PairClientChrome, "Chrome (Linux)")
loginCode, err = service.WaCli.PairPhone(ctx, phoneNumber, true, whatsmeow.PairClientChrome, "Chrome (Linux)")
if err != nil {
logrus.Errorf("Error when pairing phone: %s", err.Error())
return loginCode, err
@ -117,7 +117,7 @@ func (service serviceApp) LoginWithCode(ctx context.Context, phoneNumber string)
return loginCode, nil
}
func (service serviceApp) Logout(_ context.Context) (err error) {
func (service serviceApp) Logout(ctx context.Context) (err error) {
// delete history
files, err := filepath.Glob(fmt.Sprintf("./%s/history-*", config.PathStorages))
if err != nil {
@ -158,7 +158,7 @@ func (service serviceApp) Logout(_ context.Context) (err error) {
}
}
err = service.WaCli.Logout()
err = service.WaCli.Logout(ctx)
return
}
@ -172,7 +172,7 @@ func (service serviceApp) FirstDevice(ctx context.Context) (response domainApp.D
return response, pkgError.ErrWaCLI
}
devices, err := service.db.GetFirstDevice()
devices, err := service.db.GetFirstDevice(ctx)
if err != nil {
return response, err
}
@ -187,12 +187,12 @@ func (service serviceApp) FirstDevice(ctx context.Context) (response domainApp.D
return response, nil
}
func (service serviceApp) FetchDevices(_ context.Context) (response []domainApp.DevicesResponse, err error) {
func (service serviceApp) FetchDevices(ctx context.Context) (response []domainApp.DevicesResponse, err error) {
if service.WaCli == nil {
return response, pkgError.ErrWaCLI
}
devices, err := service.db.GetAllDevices()
devices, err := service.db.GetAllDevices(ctx)
if err != nil {
return nil, err
}

4
src/services/message.go

@ -131,7 +131,7 @@ func (service serviceMessage) DeleteMessage(ctx context.Context, request domainM
}},
}
if err = service.WaCli.SendAppState(patchInfo); err != nil {
if err = service.WaCli.SendAppState(ctx, patchInfo); err != nil {
return err
}
return nil
@ -176,7 +176,7 @@ func (service serviceMessage) StarMessage(ctx context.Context, request domainMes
patchInfo := appstate.BuildStar(dataWaRecipient.ToNonAD(), *service.WaCli.Store.ID, request.MessageID, isFromMe, request.IsStarred)
if err = service.WaCli.SendAppState(patchInfo); err != nil {
if err = service.WaCli.SendAppState(ctx, patchInfo); err != nil {
return err
}
return nil

8
src/services/user.go

@ -146,10 +146,10 @@ func (service userService) MyListNewsletter(_ context.Context) (response domainU
return response, nil
}
func (service userService) MyPrivacySetting(_ context.Context) (response domainUser.MyPrivacySettingResponse, err error) {
func (service userService) MyPrivacySetting(ctx context.Context) (response domainUser.MyPrivacySettingResponse, err error) {
whatsapp.MustLogin(service.WaCli)
resp, err := service.WaCli.TryFetchPrivacySettings(true)
resp, err := service.WaCli.TryFetchPrivacySettings(ctx, true)
if err != nil {
return
}
@ -164,7 +164,7 @@ func (service userService) MyPrivacySetting(_ context.Context) (response domainU
func (service userService) MyListContacts(ctx context.Context) (response domainUser.MyListContactsResponse, err error) {
whatsapp.MustLogin(service.WaCli)
contacts, err := service.WaCli.Store.Contacts.GetAllContacts()
contacts, err := service.WaCli.Store.Contacts.GetAllContacts(ctx)
if err != nil {
return
}
@ -236,7 +236,7 @@ func (service userService) ChangeAvatar(ctx context.Context, request domainUser.
func (service userService) ChangePushName(ctx context.Context, request domainUser.ChangePushNameRequest) (err error) {
whatsapp.MustLogin(service.WaCli)
err = service.WaCli.SendAppState(appstate.BuildSettingPushName(request.PushName))
err = service.WaCli.SendAppState(ctx, appstate.BuildSettingPushName(request.PushName))
if err != nil {
return err
}

Loading…
Cancel
Save