Added actual captcha testing
This commit is contained in:
@ -1,39 +1,48 @@
|
||||
package kicker
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"image/png"
|
||||
"kickerbot/captchagen"
|
||||
"kickerbot/db"
|
||||
"log"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
tb "gopkg.in/tucnak/telebot.v3"
|
||||
)
|
||||
|
||||
func userJoined(c tb.Context) error {
|
||||
m := c.Message()
|
||||
bot := c.Bot()
|
||||
captcha := captchagen.GenCaptcha()
|
||||
reader := captcha.ToReader()
|
||||
message := c.Message()
|
||||
user := db.User{
|
||||
Id: m.Sender.ID,
|
||||
Username: m.Sender.Username,
|
||||
FirstName: m.Sender.FirstName,
|
||||
LastName: m.Sender.LastName,
|
||||
Id: message.Sender.ID,
|
||||
Username: message.Sender.Username,
|
||||
FirstName: message.Sender.FirstName,
|
||||
LastName: message.Sender.LastName,
|
||||
IsBanned: false,
|
||||
ChatId: m.Chat.ID,
|
||||
CorrectAnswer: 0,
|
||||
ChatId: message.Chat.ID,
|
||||
CorrectAnswer: int8(captcha.CorrectAnswer),
|
||||
DateJoined: time.Now().Unix(),
|
||||
}
|
||||
user.CorrectAnswer = int8(captcha.CorrectAnswer)
|
||||
d := db.GetDatabase()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||
defer cancel()
|
||||
d.NewUser(ctx, user)
|
||||
log.Print(user)
|
||||
str := fmt.Sprintf("%v", user)
|
||||
c.Bot().Send(&tb.User{ID: 60441930}, str)
|
||||
msg := fmt.Sprintf("Приветствую, %v!\nПеред тем, как дать тебе что-то здесь писать, я задам тебе один вопрос:\nКакой из этих движков самый лучший? Подумай хорошенько, и дай ответ цифрой.", user.FirstName)
|
||||
c.Reply(msg)
|
||||
photo := tb.Photo{File: tb.FromReader(reader), Caption: msg}
|
||||
result, err := bot.Send(tb.ChatID(message.Chat.ID), &photo, &tb.SendOptions{ReplyTo: message})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user.CaptchaMessage = result.ID
|
||||
db.Log("new user", str)
|
||||
|
||||
d.NewUser(ctx, user)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -41,7 +50,27 @@ var HandlersV1 = []Handler{
|
||||
{
|
||||
Endpoint: tb.OnText,
|
||||
Handler: func(c tb.Context) error {
|
||||
db.Log("message", c.Message())
|
||||
sender := c.Sender()
|
||||
message := c.Message()
|
||||
d := db.GetDatabase()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||
defer cancel()
|
||||
if user, err := d.GetUser(ctx, db.User{Id: sender.ID, ChatId: message.Chat.ID, IsBanned: false}); err == nil {
|
||||
text := message.Text
|
||||
if num, err := strconv.Atoi(text); err == nil {
|
||||
if num == int(user.CorrectAnswer) {
|
||||
_ = d.RemoveUser(ctx, user)
|
||||
c.Reply("Капча пройдена!")
|
||||
c.Bot().Delete(&tb.Message{Chat: message.Chat, ID: user.CaptchaMessage})
|
||||
} else {
|
||||
c.Reply("Ещё разочек")
|
||||
}
|
||||
} else {
|
||||
log.Print(err)
|
||||
}
|
||||
} else {
|
||||
c.Bot().Ban(message.Chat, &tb.ChatMember{User: sender})
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@ -49,13 +78,7 @@ var HandlersV1 = []Handler{
|
||||
Endpoint: "/gen",
|
||||
Handler: func(c tb.Context) error {
|
||||
captcha := captchagen.GenCaptcha()
|
||||
buff := new(bytes.Buffer)
|
||||
err := png.Encode(buff, captcha.Image)
|
||||
if err != nil {
|
||||
fmt.Println("failed to create buffer", err)
|
||||
}
|
||||
reader := bytes.NewReader(buff.Bytes())
|
||||
// log.Print(reader)
|
||||
reader := captcha.ToReader()
|
||||
caption := fmt.Sprintf("Правильный ответ: %d", captcha.CorrectAnswer)
|
||||
c.Reply(&tb.Photo{File: tb.FromReader(reader), Caption: caption})
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user