Далее нужно запустить команду для установки зависимостей и модулей:
Для того чтобы отследить когда новый пользователь зайдет в чат, нужно добавить отлавливание этих событий:
b.Handle(tb.OnUserJoined, UserJoined(l, b, memoryStorage))
А вот так выглядит сама функция UserJoined :
func UserJoined(l *zap.SugaredLogger, b *tb.Bot, s data.Storage) func(m *tb.
Message) < return func(m *tb.Message) < r := rand.New(rand.NewSource(time.Now().
UnixNano())) // generating two random small number firstNumber := r.Intn(4) + 1 secondNumber := r.
Intn(4) + 1 fistNumberInWords := ntw.IntegerToRuRu(firstNumber) secondNumberInWords := ntw.
IntegerToRuRu(secondNumber) username := getUsername(m.Sender) welcomeMessageText := getWelcomeMessageText(username, m.Chat.
Title, fistNumberInWords, secondNumberInWords) welcomeMessage, err := b.Send(m.Chat, welcomeMessageText) if err != nil < l.
Флудер звонками | Полезности Telegram
Error(«error while sending welcome message», err) return > s.Add(m.Chat, m.Sender, data.
InfoWelcomeMessage: welcomeMessage, RightAnswer: firstNumber * secondNumber>) // Goroutine to delete message after 2 minutes // and block user if he or she still in the list go checkAndBanUser(l, b, welcomeMessage, s, m, username) > >
Она генерирут два случайных числа и конвертирует их в текст. Правильный ответ записывается в память. Затем в горутине ожидается 2 минуты от отправки сообщения, если пользователь так и не решил правильно ответ, то он блокируется и удаляется из чата
Вот так выглядит код для проверки ответа пользователя:
func Text(l *zap.SugaredLogger, b *tb.Bot, s data.Storage) func(m *tb.
Message) < return func(m *tb.Message) < info, ok := s.Exist(m.Chat, m.
Sender) if !ok < return > if m.Text != strconv.Itoa(info.RightAnswer) < err := b.
Delete(m) if err != nil < l.Errorf(«error while deleting (spam) user message: %v», err) > return > // in case of correct answer: s.Remove(m.
Chat, m.Sender) // Correct! Tell us about yourself approveMessage, err := b.Send(m.Chat, «Верно!
Расскажите нам о себе «) if err != nil < l.Errorf(«error while sending: %v», err) > go deleteWelcomeMessages(l, b, m, approveMessage, info.
WelcomeMessage) > >
Итог работы бота
По итогу бот очень успешно банит других ботов, не давая им написать сообщение с рекламой. Никто не переводит сообщения на английский язык и поэтому не знает что именно нужно делать. Таким образом пока получается блокировать всех ботов, хотя раньше с другими анти-спам ботами 50% просто решали капчу и писали спам
Исходный код
Исходный код, который деплоится затем на сервер вы можете найти тут:
Вы можете предложить свои изменения и улучшения, код открытый
🔥НОВЫЙ МОЩНЫЙ СМС/ЗВОНКИ БОМБЕР🔥50 ЗВОНКОВ В МИНУТУ🔥
После мержа код автоматически деплоится в продакшен (если билд пройдет успешно)
Источник: blogpavel.com