otiai10/amesh-bot

View on GitHub
commands/image_intent.go

Summary

Maintainability
A
0 mins
Test Coverage
package commands

import (
    "context"
    "fmt"
    "math/rand"
    "net/url"

    "github.com/otiai10/goapis/google"
)

type SearchIntent struct {
    url.Values
    Retry   int
    Request google.CustomSearchRequest
}

func RecoverIntent(ctx context.Context) *SearchIntent {
    intent, ok := ctx.Value(imageSearchIntentCtxKey).(*SearchIntent)
    if ok {
        intent.Values = url.Values{}
        return intent
    }
    return &SearchIntent{Values: url.Values{}}
}

func IncrementRetryIntent(ctx context.Context, intent *SearchIntent, request google.CustomSearchRequest) context.Context {
    intent.Retry = intent.Retry + 1
    intent.Request = request
    return context.WithValue(ctx, imageSearchIntentCtxKey, intent)
}

func (intent *SearchIntent) Unsafe(unsafe bool) {
    if unsafe {
        intent.Add("safe", "off")
    } else {
        intent.Add("safe", "active")
    }
}

func (intent *SearchIntent) Build() url.Values {
    if intent.Request.StartIndex == 0 {
        intent.Values.Add("start", fmt.Sprintf("%d", rand.Intn(90)))
    } else {
        start := intent.Request.StartIndex - 10
        if start < 0 {
            start = 0
        }
        intent.Values.Add("start", fmt.Sprintf("%d", start))
    }
    return intent.Values
}