package routines import ( message2 "git.dragon-labs.de/alphyron/group_helper/message" "git.dragon-labs.de/alphyron/group_helper/models" "git.dragon-labs.de/alphyron/group_helper/obj" "git.dragon-labs.de/alphyron/group_helper/telegram" "git.dragon-labs.de/alphyron/group_helper/util" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" "log" "math/rand" "strconv" "strings" "time" ) type joinCheckerRoutine struct { verifyData *obj.VerifyData } func NewJoinCheckerRoutine(verifyData *obj.VerifyData) telegram.Routine { return joinCheckerRoutine{ verifyData: verifyData, } } func (j joinCheckerRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update, group *models.Group) error { if update.Message == nil { // ignore any non-Message Updates return nil } if update.Message.Chat.IsPrivate() || update.Message.Chat.IsChannel() { return nil } if update.Message.NewChatMembers != nil { for _, newUser := range *update.Message.NewChatMembers { if newUser.IsBot { continue } if hasDrugNames(strings.ToLower(newUser.FirstName)) || hasDrugNames(strings.ToLower(newUser.LastName)) || hasDrugNames(strings.ToLower(newUser.UserName)) { botAPI.KickChatMember(tgbotapi.KickChatMemberConfig{ ChatMemberConfig: tgbotapi.ChatMemberConfig{ ChatID: update.Message.Chat.ID, UserID: newUser.ID, }, }) botAPI.DeleteMessage(tgbotapi.NewDeleteMessage(group.GroupID, update.Message.MessageID)) return nil } length := 3 tasks := make([][]tgbotapi.InlineKeyboardButton, length) for i := 0; i < length; i++ { tasks[i] = tgbotapi.NewInlineKeyboardRow(tgbotapi.NewInlineKeyboardButtonData(util.GenerateCalculation(i == 0), "UserValidation: "+strconv.FormatBool(i == 0))) } rand.Seed(time.Now().UnixNano()) rand.Shuffle(len(tasks), func(i, j int) { tasks[i], tasks[j] = tasks[j], tasks[i] }) markup := tgbotapi.NewInlineKeyboardMarkup(tasks...) msg := tgbotapi.NewMessage(update.Message.Chat.ID, message2.ReplaceMessage(group.UserJoinMessage, &newUser, group)) msg.ParseMode = "Markdown" msg.ReplyMarkup = markup message, err := botAPI.Send(msg) if err != nil { log.Println("Problem to send verified Messages to user") log.Println(newUser.FirstName) log.Println(err) } j.verifyData.AddUser(&obj.VerifyUser{ UserID: newUser.ID, GroupID: group.GroupID, LeftTime: group.KickCooldown, MessageID: message.MessageID, }) } } return nil } func hasDrugNames(name string) bool { return strings.Contains(name, "weed") || strings.Contains(name, "viagra") || strings.Contains(name, "mdma") || strings.Contains(name, "xanax") || strings.Contains(name, "😘") || strings.Contains(name, "💊") }