Skip to content

Commit 50ed26b

Browse files
committed
update get random
1 parent e3e7878 commit 50ed26b

File tree

1 file changed

+37
-34
lines changed

1 file changed

+37
-34
lines changed

cmd/worker/main_js.go

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,40 @@ telegram_ids = "40xxxxxx,42xxxxx"
5959
binding = "AI"
6060
*/
6161

62+
func getRandomWord() (string, string, error) {
63+
now := time.Now()
64+
65+
db, err := sql.Open("d1", "DB")
66+
if err != nil {
67+
return "", "", fmt.Errorf("open db failed: %w", err)
68+
}
69+
defer db.Close()
70+
71+
result, err := db.Query("SELECT word, explain FROM words WHERE reminder_time <= ? ORDER BY RANDOM() LIMIT 1", now.Add(-12*time.Hour).Unix())
72+
if err != nil {
73+
result, err = db.Query("SELECT word, explain FROM words ORDER BY RANDOM() LIMIT 1")
74+
if err != nil {
75+
return "", "", fmt.Errorf("get random word failed: %w", err)
76+
}
77+
}
78+
79+
result.Next()
80+
81+
var word, explain string
82+
err = result.Scan(&word, &explain)
83+
if err != nil {
84+
return "", "", fmt.Errorf("scan word failed: %w", err)
85+
}
86+
defer result.Close()
87+
88+
_, err = db.Exec("UPDATE words SET reminder_time = ? WHERE word = ?", now.Unix(), word)
89+
if err != nil {
90+
log.Println("update word failed", "err", err)
91+
}
92+
93+
return word, explain, nil
94+
}
95+
6296
func main() {
6397
cron.ScheduleTaskNonBlock(func(ctx context.Context) error {
6498
ankiIdstr := cloudflare.Getenv("anki_telegram_id")
@@ -73,25 +107,11 @@ func main() {
73107
return nil
74108
}
75109

76-
db, err := sql.Open("d1", "DB")
77-
if err != nil {
78-
return err
79-
}
80-
defer db.Close()
81-
82-
result, err := db.Query("SELECT word, explain FROM words ORDER BY RANDOM() LIMIT 1")
83-
if err != nil {
84-
return err
85-
}
86-
87-
result.Next()
88-
89-
var word, explain string
90-
err = result.Scan(&word, &explain)
110+
word, explain, err := getRandomWord()
91111
if err != nil {
112+
log.Println("get random word failed", "err", err)
92113
return err
93114
}
94-
defer result.Close()
95115

96116
msg := tgbotapi.NewMessage(ankiId, fmt.Sprintf(`<b>%s</b>
97117
<tg-spoiler><blockquote expandable>%s</blockquote></tg-spoiler>
@@ -337,29 +357,12 @@ func bot(w http.ResponseWriter, r *http.Request) {
337357
deleteMessage(umsg, false)
338358
return
339359
case "random":
340-
db, err := sql.Open("d1", "DB")
341-
if err != nil {
342-
log.Println("open db failed", "err", err)
343-
return
344-
}
345-
defer db.Close()
346-
347-
result, err := db.Query("SELECT word, explain FROM words ORDER BY RANDOM() LIMIT 1")
360+
word, explain, err := getRandomWord()
348361
if err != nil {
349362
log.Println("get random word failed", "err", err)
350363
return
351364
}
352365

353-
result.Next()
354-
355-
var word, explain string
356-
err = result.Scan(&word, &explain)
357-
if err != nil {
358-
log.Println("scan word failed", "err", err)
359-
return
360-
}
361-
defer result.Close()
362-
363366
msg := tgbotapi.NewMessage(umsg.Chat.ID, fmt.Sprintf(`<b>%s</b>
364367
<tg-spoiler><blockquote expandable>%s</blockquote></tg-spoiler>
365368
`, tgbotapi.EscapeText(tgbotapi.ModeHTML, word),

0 commit comments

Comments
 (0)