2 minutes to solve Captcha. Removing "Joined" message after ban
This commit is contained in:
		@ -15,4 +15,5 @@ type User struct {
 | 
				
			|||||||
	CaptchaMessage int    `bson:"captcha_message"`
 | 
						CaptchaMessage int    `bson:"captcha_message"`
 | 
				
			||||||
	IsBanned       bool   `bson:"is_banned"`
 | 
						IsBanned       bool   `bson:"is_banned"`
 | 
				
			||||||
	DateJoined     int64  `bson:"date_joined"`
 | 
						DateJoined     int64  `bson:"date_joined"`
 | 
				
			||||||
 | 
						JoinedMessage  int    `bson:"joined_message"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,7 @@ func userJoined(c tb.Context) error {
 | 
				
			|||||||
		LastName:      message.Sender.LastName,
 | 
							LastName:      message.Sender.LastName,
 | 
				
			||||||
		IsBanned:      false,
 | 
							IsBanned:      false,
 | 
				
			||||||
		ChatId:        message.Chat.ID,
 | 
							ChatId:        message.Chat.ID,
 | 
				
			||||||
 | 
							JoinedMessage: message.ID,
 | 
				
			||||||
		CorrectAnswer: int8(captcha.CorrectAnswer),
 | 
							CorrectAnswer: int8(captcha.CorrectAnswer),
 | 
				
			||||||
		DateJoined:    time.Now().Unix(),
 | 
							DateJoined:    time.Now().Unix(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -32,7 +33,7 @@ func userJoined(c tb.Context) error {
 | 
				
			|||||||
	ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
 | 
						ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
 | 
				
			||||||
	defer cancel()
 | 
						defer cancel()
 | 
				
			||||||
	log.Print(user)
 | 
						log.Print(user)
 | 
				
			||||||
	msg := fmt.Sprintf("Приветствую тебя, %v!\nДля подтверждения, что ты человек, выбери логотип движка, которому посвящен данный чат, и отправь его номер сюда.\nЯ дам тебе минуту на это.", user.FirstName)
 | 
						msg := fmt.Sprintf("Приветствую тебя, %v!\nДля подтверждения, что ты человек, выбери логотип движка, которому посвящен данный чат, и отправь его номер сюда.\nЯ дам тебе две минуты на это.", user.FirstName)
 | 
				
			||||||
	photo := tb.Photo{File: tb.FromReader(reader), Caption: msg}
 | 
						photo := tb.Photo{File: tb.FromReader(reader), Caption: msg}
 | 
				
			||||||
	result, err := bot.Send(tb.ChatID(message.Chat.ID), &photo, &tb.SendOptions{ReplyTo: message})
 | 
						result, err := bot.Send(tb.ChatID(message.Chat.ID), &photo, &tb.SendOptions{ReplyTo: message})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -54,6 +55,7 @@ func userLeft(c tb.Context) error {
 | 
				
			|||||||
	if user, err := d.GetUser(ctx, db.User{Id: sender.ID, ChatId: message.Chat.ID}); err == nil {
 | 
						if user, err := d.GetUser(ctx, db.User{Id: sender.ID, ChatId: message.Chat.ID}); err == nil {
 | 
				
			||||||
		d.RemoveUser(ctx, user)
 | 
							d.RemoveUser(ctx, user)
 | 
				
			||||||
		bot.Delete(&tb.Message{Chat: message.Chat, ID: user.CaptchaMessage})
 | 
							bot.Delete(&tb.Message{Chat: message.Chat, ID: user.CaptchaMessage})
 | 
				
			||||||
 | 
							bot.Delete(&tb.Message{Chat: message.Chat, ID: user.JoinedMessage})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -84,6 +86,7 @@ var HandlersV1 = []Handler{
 | 
				
			|||||||
				if !solved {
 | 
									if !solved {
 | 
				
			||||||
					bot.Delete(message)
 | 
										bot.Delete(message)
 | 
				
			||||||
					bot.Delete(&tb.Message{Chat: message.Chat, ID: user.CaptchaMessage})
 | 
										bot.Delete(&tb.Message{Chat: message.Chat, ID: user.CaptchaMessage})
 | 
				
			||||||
 | 
										bot.Delete(&tb.Message{Chat: message.Chat, ID: user.JoinedMessage})
 | 
				
			||||||
					bot.Ban(message.Chat, &tb.ChatMember{User: sender})
 | 
										bot.Ban(message.Chat, &tb.ChatMember{User: sender})
 | 
				
			||||||
					_ = d.RemoveUser(ctx, user)
 | 
										_ = d.RemoveUser(ctx, user)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@ func TaskKickOldUsers(b tb.Bot) {
 | 
				
			|||||||
	ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
 | 
						ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
 | 
				
			||||||
	defer cancel()
 | 
						defer cancel()
 | 
				
			||||||
	now := time.Now().Unix()
 | 
						now := time.Now().Unix()
 | 
				
			||||||
	old := now - 60
 | 
						old := now - 120
 | 
				
			||||||
	filter := bson.D{
 | 
						filter := bson.D{
 | 
				
			||||||
		primitive.E{Key: "date_joined", Value: bson.D{bson.E{Key: "$lt", Value: old}}},
 | 
							primitive.E{Key: "date_joined", Value: bson.D{bson.E{Key: "$lt", Value: old}}},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -30,8 +30,10 @@ func TaskKickOldUsers(b tb.Bot) {
 | 
				
			|||||||
		tbUser := tb.User{ID: user.Id}
 | 
							tbUser := tb.User{ID: user.Id}
 | 
				
			||||||
		member := tb.ChatMember{User: &tbUser}
 | 
							member := tb.ChatMember{User: &tbUser}
 | 
				
			||||||
		message := tb.Message{Chat: &chat, ID: user.CaptchaMessage}
 | 
							message := tb.Message{Chat: &chat, ID: user.CaptchaMessage}
 | 
				
			||||||
 | 
							joinMessage := tb.Message{Chat: &chat, ID: user.JoinedMessage}
 | 
				
			||||||
		b.Ban(&chat, &member)
 | 
							b.Ban(&chat, &member)
 | 
				
			||||||
		b.Delete(&message)
 | 
							b.Delete(&message)
 | 
				
			||||||
 | 
							b.Delete(&joinMessage)
 | 
				
			||||||
		d.RemoveUser(ctx, user)
 | 
							d.RemoveUser(ctx, user)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user