From ccaf013c4b77d634333f3cf4cb4ba2dabbb46ac6 Mon Sep 17 00:00:00 2001 From: TheProcedural Date: Mon, 16 Jun 2025 16:54:20 +0100 Subject: [PATCH] Add allow messages to self option --- src/.env.example | 3 ++- src/cmd/root.go | 11 ++++++++++- src/config/settings.go | 25 +++++++++++++------------ src/infrastructure/whatsapp/init.go | 12 +++++++++--- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/.env.example b/src/.env.example index 80a226a..fe465d2 100644 --- a/src/.env.example +++ b/src/.env.example @@ -12,5 +12,6 @@ DB_URI="file:storages/whatsapp.db?_foreign_keys=on" WHATSAPP_AUTO_REPLY="Auto reply message" WHATSAPP_WEBHOOK=https://webhook.site/07b69616-5943-4c7f-a8be-db4819df699e,https://webhook.site/09a38aff-d11a-4a38-a176-3f3efa0b5e8b WHATSAPP_WEBHOOK_SECRET=super-secret-key +CALL_WEBHOOK_ON_MESSAGE_TO_SELF=false WHATSAPP_ACCOUNT_VALIDATION=true -WHATSAPP_CHAT_STORAGE=true \ No newline at end of file +WHATSAPP_CHAT_STORAGE=true diff --git a/src/cmd/root.go b/src/cmd/root.go index 1f76819..4306c6d 100644 --- a/src/cmd/root.go +++ b/src/cmd/root.go @@ -47,7 +47,7 @@ var ( // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Short: "Send free whatsapp API", - Long: `This application is from clone https://github.com/aldinokemal/go-whatsapp-web-multidevice, + Long: `This application is from clone https://github.com/aldinokemal/go-whatsapp-web-multidevice, you can send whatsapp over http api but your whatsapp account have to be multi device version`, } @@ -108,6 +108,9 @@ func initEnvConfig() { if envChatStorage := viper.GetBool("WHATSAPP_CHAT_STORAGE"); !envChatStorage { config.WhatsappChatStorage = envChatStorage } + if envCallWebhookOnMessageToSelf := viper.GetBool("CALL_WEBHOOK_ON_MESSAGE_TO_SELF"); envCallWebhookOnMessageToSelf { + config.WhatsappCallWebhookOnMessageToSelf = envCallWebhookOnMessageToSelf + } } func initFlags() { @@ -183,6 +186,12 @@ func initFlags() { config.WhatsappChatStorage, `enable or disable chat storage --chat-storage . If you disable this, reply feature maybe not working properly | example: --chat-storage=true`, ) + rootCmd.PersistentFlags().BoolVarP( + &config.WhatsappCallWebhookOnMessageToSelf, + "call-webhook-on-message-to-self", "", + config.WhatsappCallWebhookOnMessageToSelf, + `enable or disable webhook calls for messages from yourself --call-webhook-on-message-to-self | example: --call-webhook-on-message-to-self=true`, + ) } func initApp() { diff --git a/src/config/settings.go b/src/config/settings.go index f7497a5..0808d41 100644 --- a/src/config/settings.go +++ b/src/config/settings.go @@ -24,16 +24,17 @@ var ( DBURI = "file:storages/whatsapp.db?_foreign_keys=on" - WhatsappAutoReplyMessage string - WhatsappWebhook []string - WhatsappWebhookSecret = "secret" - WhatsappLogLevel = "ERROR" - WhatsappSettingMaxImageSize int64 = 20000000 // 20MB - WhatsappSettingMaxFileSize int64 = 50000000 // 50MB - WhatsappSettingMaxVideoSize int64 = 100000000 // 100MB - WhatsappSettingMaxDownloadSize int64 = 500000000 // 500MB - WhatsappTypeUser = "@s.whatsapp.net" - WhatsappTypeGroup = "@g.us" - WhatsappAccountValidation = true - WhatsappChatStorage = true + WhatsappAutoReplyMessage string + WhatsappWebhook []string + WhatsappWebhookSecret = "secret" + WhatsappCallWebhookOnMessageToSelf = false + WhatsappLogLevel = "ERROR" + WhatsappSettingMaxImageSize int64 = 20000000 // 20MB + WhatsappSettingMaxFileSize int64 = 50000000 // 50MB + WhatsappSettingMaxVideoSize int64 = 100000000 // 100MB + WhatsappSettingMaxDownloadSize int64 = 500000000 // 500MB + WhatsappTypeUser = "@s.whatsapp.net" + WhatsappTypeGroup = "@g.us" + WhatsappAccountValidation = true + WhatsappChatStorage = true ) diff --git a/src/infrastructure/whatsapp/init.go b/src/infrastructure/whatsapp/init.go index 1190798..5398fe3 100644 --- a/src/infrastructure/whatsapp/init.go +++ b/src/infrastructure/whatsapp/init.go @@ -247,9 +247,15 @@ func handleAutoReply(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()) { + shouldCallWebhook := len(config.WhatsappWebhook) > 0 && + !strings.Contains(evt.Info.SourceString(), "broadcast") + + // Check if message is from myself and whether we should call webhook for self messages + if isFromMySelf(evt.Info.SourceString()) && !config.WhatsappCallWebhookOnMessageToSelf { + shouldCallWebhook = false + } + + if shouldCallWebhook { go func(evt *events.Message) { if err := forwardToWebhook(ctx, evt); err != nil { logrus.Error("Failed forward to webhook: ", err)