Captchas are time restricted now

This commit is contained in:
Nefrace 2024-11-17 02:09:53 +03:00
parent 2e5c9ad57c
commit 489a43c99e
2 changed files with 27 additions and 3 deletions

View File

@ -132,7 +132,7 @@ func handleNewJoined(ctx context.Context, b *bot.Bot, u *models.Update) {
if err != nil {
log.Println("Can't send message: ", err, "\n", text)
}
_, err = db.Exec(`INSERT INTO captchas (user_id, chat_id, message_id) values ($1, $2, $3)`, user.ID, u.Message.Chat.ID, msg.ID)
_, err = db.Exec(`INSERT INTO captchas (user_id, chat_id, message_id, created) values ($1, $2, $3, $4)`, user.ID, u.Message.Chat.ID, msg.ID, time.Now().Unix())
if err != nil {
log.Println("newusers: can't add to db: ", err)
return
@ -254,7 +254,7 @@ var NewCaptchaTemplate = `
*%s*, тебе необходимо пройти капчу для чата *%s*\.
Для этого посмотри на картинку, найди логотип движка, который относится к вышеуказанному чату, а потом введи сюда код, который расположен над или под ним\.
Время у тебя неограничено, я буду ждать\!
Я буду ждать\!
`
func handlePrivateStartCaptcha(ctx context.Context, b *bot.Bot, u *models.Update) {

View File

@ -77,7 +77,8 @@ task:
for {
select {
case <-timer.C:
deleteOldMessages(ctx, b)
go deleteOldMessages(ctx, b)
deleteOldCaptchas(ctx, b)
case <-ctx.Done():
break task
}
@ -103,3 +104,26 @@ func deleteOldMessages(ctx context.Context, b *bot.Bot) {
db.Exec(`DELETE FROM messagesToDelete WHERE id = $1`, message.Id)
}
}
func deleteOldCaptchas(ctx context.Context, b *bot.Bot) {
date := time.Now().Add(-24 * time.Hour).Unix()
captchas := []Captcha{}
err := db.Select(&captchas, `SELECT * from captchas WHERE created < $1`, date)
if err != nil {
log.Println("delete_old: can't get messages: ", err)
}
for _, captcha := range captchas {
if _, err := b.UnbanChatMember(ctx, &bot.UnbanChatMemberParams{
ChatID: captcha.ChatID,
UserID: captcha.UserID,
}); err != nil {
time.Sleep(200 * time.Millisecond)
continue
}
time.Sleep(200 * time.Millisecond)
success, err := b.DeleteMessage(ctx, &bot.DeleteMessageParams{ChatID: captcha.ChatID, MessageID: captcha.MessageID})
if !success {
log.Println("delete_old, captcha wasn't deleted: ", captcha.MessageID, " :: ", err)
}
db.Exec(`DELETE FROM captchas WHERE id = $1`, captcha.Id)
}
}