diff --git a/addition/web/duckduckgo.go b/addition/web/duckduckgo.go index 187cf3d..dfad6b6 100644 --- a/addition/web/duckduckgo.go +++ b/addition/web/duckduckgo.go @@ -29,7 +29,7 @@ func formatResponse(data *DDGResponse) string { return strings.Join(res, "\n") } -func CallDuckDuckGoAPI(query string) *DDGResponse { +func CallDuckDuckGoAPI(query string) (*DDGResponse, error) { data, err := utils.Get(fmt.Sprintf( "%s/search?q=%s&max_results=%d", channel.SystemInstance.GetSearchEndpoint(), @@ -38,8 +38,8 @@ func CallDuckDuckGoAPI(query string) *DDGResponse { ), nil) if err != nil { - return nil + return nil, err } - return utils.MapToStruct[DDGResponse](data) + return utils.MapToRawStruct[DDGResponse](data) } diff --git a/addition/web/search.go b/addition/web/search.go index 7e6ad20..556ec0f 100644 --- a/addition/web/search.go +++ b/addition/web/search.go @@ -1,7 +1,9 @@ package web import ( + "chat/globals" "chat/utils" + "fmt" "net/url" ) @@ -22,13 +24,8 @@ func RequestWithUA(url string) string { return data } -func SearchWebResult(q string) string { - if res := CallDuckDuckGoAPI(q); res != nil { - if resp := formatResponse(res); resp != "" { - return resp - } - } - +func SearchReverse(q string) string { + // deprecated uri := GetBingUrl(q) if res := CallPilotAPI(uri); res != nil { return utils.Marshal(res.Results) @@ -36,3 +33,15 @@ func SearchWebResult(q string) string { data := RequestWithUA(uri) return ParseBing(data) } + +func SearchWebResult(q string) string { + res, err := CallDuckDuckGoAPI(q) + if err != nil { + globals.Warn(fmt.Sprintf("[web] failed to get search result: %s (query: %s)", err.Error(), q)) + return "" + } + + content := formatResponse(res) + globals.Debug(fmt.Sprintf("[web] search result: %s (query: %s)", utils.Extract(content, 50, "..."), q)) + return content +} diff --git a/app/src/components/admin/RedeemTable.tsx b/app/src/components/admin/RedeemTable.tsx index 6fb7c7e..6c668fa 100644 --- a/app/src/components/admin/RedeemTable.tsx +++ b/app/src/components/admin/RedeemTable.tsx @@ -27,7 +27,7 @@ import { Textarea } from "@/components/ui/textarea.tsx"; import { saveAsFile } from "@/utils/dom.ts"; import { useEffectAsync } from "@/utils/hook.ts"; -function GenerateDialog() { +function GenerateDialog({ sync }: { sync: () => void }) { const { t } = useTranslation(); const { toast } = useToast(); const [open, setOpen] = useState(false); @@ -41,12 +41,15 @@ function GenerateDialog() { async function generateCode() { const data = await generateRedeem(Number(quota), Number(number)); - if (data.status) setData(data.data.join("\n")); - else + if (data.status) { + setData(data.data.join("\n")); + sync(); + } else { toast({ title: t("admin.error"), description: data.message, }); + } } function close() { @@ -174,7 +177,7 @@ function RedeemTable() { - + ); diff --git a/channel/system.go b/channel/system.go index 69b4ba2..f548b17 100644 --- a/channel/system.go +++ b/channel/system.go @@ -142,7 +142,7 @@ func (c *SystemConfig) GetInitialQuota() float64 { } func (c *SystemConfig) GetBackend() string { - return c.General.Backend + return strings.TrimSuffix(c.General.Backend, "/") } func (c *SystemConfig) GetMail() *utils.SmtpPoster { @@ -209,10 +209,10 @@ func (c *SystemConfig) GetSearchEndpoint() string { } endpoint := c.Search.Endpoint - if strings.HasSuffix(endpoint, "/") { - return endpoint[:len(endpoint)-1] - } else if !strings.HasSuffix(endpoint, "/search") { + if strings.HasSuffix(endpoint, "/search") { return endpoint[:len(endpoint)-7] + } else if strings.HasSuffix(endpoint, "/") { + return endpoint[:len(endpoint)-1] } return endpoint diff --git a/utils/char.go b/utils/char.go index 2d1b100..815b2e4 100644 --- a/utils/char.go +++ b/utils/char.go @@ -169,7 +169,12 @@ func SplitLangItems(data string) []string { return SplitItems(data, []string{",", ",", " ", "\n"}) } -func Extract(data string, length int, flow string) string { +func Extract(data string, length int, flow_ ...string) string { + flow := "" + if len(flow_) > 0 { + flow = flow_[0] + } + value := []rune(data) if len(value) > length { return string(value[:length]) + flow