Working captcha concept.
This commit is contained in:
parent
587b98eb7e
commit
104fd180ab
|
@ -80,9 +80,33 @@ func handleNewJoined(ctx context.Context, b *bot.Bot, u *models.Update) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
_, err := db.Exec(`INSERT INTO captchas (user_id, chat_id, message_id, correct_answer, blocked_until) values ($1, $2, $3, 0, 0)`, user.ID, u.Message.Chat.ID, msg.ID)
|
_, err := db.Exec(`INSERT INTO captchas (user_id, chat_id, message_id) values ($1, $2, $3)`, user.ID, u.Message.Chat.ID, msg.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("newusers: can't add to db: ", err)
|
log.Println("newusers: can't add to db: ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, err = b.RestrictChatMember(ctx, &bot.RestrictChatMemberParams{
|
||||||
|
ChatID: u.Message.Chat.ID,
|
||||||
|
UserID: user.ID,
|
||||||
|
Permissions: &models.ChatPermissions{
|
||||||
|
CanSendMessages: false,
|
||||||
|
CanSendAudios: false,
|
||||||
|
CanSendDocuments: false,
|
||||||
|
CanSendPhotos: false,
|
||||||
|
CanSendVideos: false,
|
||||||
|
CanSendVideoNotes: false,
|
||||||
|
CanSendVoiceNotes: false,
|
||||||
|
CanSendPolls: false,
|
||||||
|
CanSendOtherMessages: false,
|
||||||
|
CanAddWebPagePreviews: false,
|
||||||
|
CanChangeInfo: false,
|
||||||
|
CanInviteUsers: false,
|
||||||
|
CanPinMessages: false,
|
||||||
|
CanManageTopics: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Can't restrict new user: ", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -149,7 +173,7 @@ func handlePrivateStartCaptcha(ctx context.Context, b *bot.Bot, u *models.Update
|
||||||
func handlePrivateCaptcha(ctx context.Context, b *bot.Bot, u *models.Update) {
|
func handlePrivateCaptcha(ctx context.Context, b *bot.Bot, u *models.Update) {
|
||||||
msg := u.Message
|
msg := u.Message
|
||||||
captcha := Captcha{}
|
captcha := Captcha{}
|
||||||
err := db.Get(&captcha, "select * from captcha where user_id = $1 and correct_answer != 0", msg.From.ID)
|
err := db.Get(&captcha, "select * from captchas where user_id = $1 and correct_answer != 0", msg.From.ID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Can't solve user captcha: ", err)
|
log.Println("Can't solve user captcha: ", err)
|
||||||
|
@ -164,18 +188,17 @@ func handlePrivateCaptcha(ctx context.Context, b *bot.Bot, u *models.Update) {
|
||||||
|
|
||||||
ban_minutes := 0
|
ban_minutes := 0
|
||||||
num, err := strconv.Atoi(msg.Text)
|
num, err := strconv.Atoi(msg.Text)
|
||||||
|
text := "That's not a number. Try again in 30 minutes."
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.SendMessage(ctx, &bot.SendMessageParams{ChatID: msg.From.ID, Text: "That's not a number. Try again in 30 minutes."})
|
|
||||||
ban_minutes = 30
|
ban_minutes = 30
|
||||||
}
|
} else if num != captcha.CorrectAnswer {
|
||||||
|
text = "That's the wrong answer. Try again in 5 hours."
|
||||||
if num != captcha.CorrectAnswer {
|
|
||||||
b.SendMessage(ctx, &bot.SendMessageParams{ChatID: msg.From.ID, Text: "That's the wrong answer. Try again in 5 hours."})
|
|
||||||
ban_minutes = 300
|
ban_minutes = 300
|
||||||
}
|
}
|
||||||
|
|
||||||
if ban_minutes > 0 {
|
if ban_minutes > 0 {
|
||||||
_, err := db.Exec("update captcha set banned_until = $2 where id = $1", captcha.Id, time.Now().Add(time.Minute * time.Duration(ban_minutes)).Unix())
|
b.SendMessage(ctx, &bot.SendMessageParams{ChatID: msg.From.ID, Text:text})
|
||||||
|
_, err := db.Exec("update captchas set blocked_until = $2 where id = $1", captcha.Id, time.Now().Add(time.Minute * time.Duration(ban_minutes)).Unix())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Can't block user from captcha: ", err)
|
log.Println("Can't block user from captcha: ", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue