diff --git a/internal/telegram/generate.go b/internal/telegram/generate.go index 4893cdc..2bf3aa5 100644 --- a/internal/telegram/generate.go +++ b/internal/telegram/generate.go @@ -121,13 +121,13 @@ func (bot *TipBot) generateDalleImages(event Event) { return } bot.trySendMessage(user.Telegram, "🔄 Your images are being generated. Please wait a few moments.") - var job = func(worker int) { + var job = func(workerId int) { // create the client with the bearer token api key dalleClient, err := dalle.NewHTTPClient(internal.Configuration.Generate.DalleKey) // handle err if err != nil { - log.Errorf("[NewHTTPClient-%d] %v", worker, err.Error()) - bot.dalleRefundUser(user) + log.Errorf("[NewHTTPClient-%d] %v", workerId, err.Error()) + bot.dalleRefundUser(user,"") return } @@ -136,8 +136,8 @@ func (bot *TipBot) generateDalleImages(event Event) { // generate a task to create an image with a prompt task, err := dalleClient.Generate(ctx, invoiceEvent.CallbackData) if err != nil { - log.Errorf("[Generate-%d] %v", worker, err.Error()) - bot.dalleRefundUser(user) + log.Errorf("[Generate-%d] %v", workerId, err.Error()) + bot.dalleRefundUser(user,"") return } // poll the task.ID until status is succeeded @@ -148,13 +148,13 @@ func (bot *TipBot) generateDalleImages(event Event) { for { select { case <-ctx.Done(): - bot.dalleRefundUser(user) - log.Errorf("[DALLE-%d] ctx done", worker) + bot.dalleRefundUser(user,"") + log.Errorf("[DALLE-%d] ctx done", workerId) return // Got a timeout! fail with a timeout error case <-timeout: - bot.dalleRefundUser(user) - log.Errorf("[DALLE-%d] timeout", worker) + bot.dalleRefundUser(user,"Timeout. Please try again later.") + log.Errorf("[DALLE-%d] timeout", workerId) return // Got a tick, we should check on checkSomething() case <-ticker: @@ -162,7 +162,7 @@ func (bot *TipBot) generateDalleImages(event Event) { // handle err if err != nil { log.Errorf("[GetTask] %v", err.Error()) - bot.dalleRefundUser(user) + bot.dalleRefundUser(user,"") return } if t.Status == dalle.StatusSucceeded { @@ -177,8 +177,8 @@ func (bot *TipBot) generateDalleImages(event Event) { return } else if t.Status == dalle.StatusRejected { - log.Errorf("[DALLE-%d] rejected: %s", worker, t.ID) - bot.dalleRefundUser(user) + log.Errorf("[DALLE-%d] rejected: %s", workerId, t.ID) + bot.dalleRefundUser(user,"Your prompt has been rejected by OpenAI. Do not use celebrity names, sexual expressions, or any other harmful content as prompt.") return } log.Debugf("[DALLE-%d] pending for user %s", worker, GetUserStr(user.Telegram)) @@ -214,7 +214,7 @@ func (bot *TipBot) downloadAndSendImages(ctx context.Context, dalleClient dalle. return nil } -func (bot *TipBot) dalleRefundUser(user *lnbits.User) error { +func (bot *TipBot) dalleRefundUser(user *lnbits.User, message string) error { if user.Wallet == nil { return fmt.Errorf("user has no wallet") } @@ -228,7 +228,7 @@ func (bot *TipBot) dalleRefundUser(user *lnbits.User) error { lnbits.InvoiceParams{ Out: false, Amount: int64(internal.Configuration.Generate.DallePrice), - Memo: "Refund for /generate", + Memo: fmt.Sprintf("Refund DALLE2 %s", GetUserStr(user.Telegram)), Webhook: internal.Configuration.Lnbits.WebhookServer}, bot.Client) if err != nil { @@ -242,6 +242,13 @@ func (bot *TipBot) dalleRefundUser(user *lnbits.User) error { return err } log.Warnf("[DALLE] refunding user %s with %d sat", GetUserStr(user.Telegram), internal.Configuration.Generate.DallePrice) - bot.trySendMessage(user.Telegram, "🚫 Something went wrong. You have been refunded.") + + var err_reason string + if len(message) > 0 { + err_reason = message + } else { + err_reason = "Something went wrong." + } + bot.trySendMessage(user.Telegram, fmt.Sprintf("🚫 %s You have been refunded.", err_reason)) return nil }