Merge remote-tracking branch 'origin/mutex_states' into mutex_states

# Conflicts:
#	internal/telegram/generate.go
This commit is contained in:
gohumble 2022-08-31 15:47:56 +02:00
commit 5aa76f86da

View file

@ -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
}