🐛 Remove user when they leave from database and implement a already exists check for verification
This commit is contained in:
parent
52bb59bc21
commit
33d68aaa14
@ -7,14 +7,10 @@ import (
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
|
||||
"log"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
func CheckUnverifiedUser(ticker *time.Ticker, quitChannel <-chan struct{}, groupHelperService logic.GroupHelperService, bot *tgbotapi.BotAPI, data *obj.VerifyData) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(data.Users))
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
@ -25,7 +21,6 @@ func CheckUnverifiedUser(ticker *time.Ticker, quitChannel <-chan struct{}, group
|
||||
users := make(map[int]*models.User, 0)
|
||||
|
||||
for _, user := range data.Users {
|
||||
defer wg.Done()
|
||||
user.LeftTime -= 1
|
||||
|
||||
if user.LeftTime <= 0 {
|
||||
@ -128,7 +123,4 @@ func CheckUnverifiedUser(ticker *time.Ticker, quitChannel <-chan struct{}, group
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
}
|
||||
|
2
main.go
2
main.go
@ -82,7 +82,7 @@ func InitialRoutineManager(bot *tgbotapi.BotAPI, commandManager *cli.CommandMana
|
||||
rm.RegisterRoutine(routines.NewCommandRoutine(commandManager))
|
||||
rm.RegisterRoutine(routines.NewDatabaseRoutine(service))
|
||||
rm.RegisterRoutine(routines.NewJoinCheckerRoutine(userData))
|
||||
rm.RegisterRoutine(routines.NewVerifierRoutine(service))
|
||||
rm.RegisterRoutine(routines.NewVerifierRoutine(service, userData))
|
||||
|
||||
return rm
|
||||
}
|
||||
|
33
obj/verifydatas.go
Normal file
33
obj/verifydatas.go
Normal file
@ -0,0 +1,33 @@
|
||||
package obj
|
||||
|
||||
type VerifyData struct {
|
||||
Users []*VerifyUser
|
||||
}
|
||||
|
||||
type VerifyUser struct {
|
||||
UserID int
|
||||
GroupID int64
|
||||
LeftTime int
|
||||
MessageID int
|
||||
}
|
||||
|
||||
func (vd *VerifyData) AddUser(user *VerifyUser) {
|
||||
vd.Users = append(vd.Users, user)
|
||||
}
|
||||
|
||||
func (vd VerifyData) ExistCountdownForUserInGroup(userID int, groupID int64) bool {
|
||||
for _, user := range vd.Users {
|
||||
if user.UserID == userID && user.GroupID == groupID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (vd *VerifyData) RemoveUser(userID int, groupID int64) {
|
||||
for i, user := range vd.Users {
|
||||
if user.UserID == userID && user.GroupID == groupID {
|
||||
vd.Users = append(vd.Users[:i], vd.Users[i+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
@ -149,7 +149,7 @@ func (g groupHelperRepository) UserJoinGroup(user *models.User, group *models.Gr
|
||||
}
|
||||
|
||||
func (g groupHelperRepository) UserLeaveGroup(user *models.User, group *models.Group) (bool, error) {
|
||||
err := g.Conn.Model(user).Association("Groups").Append(group).Error
|
||||
err := g.Conn.Model(user).Association("Groups").Delete(group).Error
|
||||
|
||||
if err != nil {
|
||||
return false, errors.New("problem while disconnecting the user from the group - " + err.Error())
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"git.dragon-labs.de/alphyron/group_helper/models"
|
||||
"git.dragon-labs.de/alphyron/group_helper/telegram"
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
|
||||
"log"
|
||||
)
|
||||
|
||||
type databaseRoutine struct {
|
||||
@ -51,7 +52,12 @@ func (d databaseRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update
|
||||
return err
|
||||
}
|
||||
|
||||
go d.groupHelperService.UserLeaveGroup(user, group)
|
||||
go func() {
|
||||
success, err := d.groupHelperService.UserLeaveGroup(user, group)
|
||||
log.Println(success)
|
||||
log.Println(err)
|
||||
|
||||
}()
|
||||
config := tgbotapi.ChatConfig{
|
||||
ChatID: update.Message.Chat.ID,
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ func (j joinCheckerRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Upd
|
||||
|
||||
if update.Message.NewChatMembers != nil {
|
||||
for _, newUser := range *update.Message.NewChatMembers {
|
||||
length := 50
|
||||
length := 3
|
||||
|
||||
tasks := make([][]tgbotapi.InlineKeyboardButton, length)
|
||||
|
||||
|
@ -3,6 +3,7 @@ package routines
|
||||
import (
|
||||
"git.dragon-labs.de/alphyron/group_helper/logic"
|
||||
"git.dragon-labs.de/alphyron/group_helper/models"
|
||||
"git.dragon-labs.de/alphyron/group_helper/obj"
|
||||
"git.dragon-labs.de/alphyron/group_helper/telegram"
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
|
||||
"strconv"
|
||||
@ -11,11 +12,13 @@ import (
|
||||
|
||||
type verifierRoutine struct {
|
||||
groupHelperService logic.GroupHelperService
|
||||
verifyData *obj.VerifyData
|
||||
}
|
||||
|
||||
func NewVerifierRoutine(groupHelperService logic.GroupHelperService) telegram.Routine {
|
||||
func NewVerifierRoutine(groupHelperService logic.GroupHelperService, verifyData *obj.VerifyData) telegram.Routine {
|
||||
return verifierRoutine{
|
||||
groupHelperService: groupHelperService,
|
||||
verifyData: verifyData,
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,11 +39,10 @@ func (v verifierRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update
|
||||
|
||||
if success {
|
||||
|
||||
//TODO check if the user is really in countdown handler
|
||||
/*if isInGroup {
|
||||
if !v.verifyData.ExistCountdownForUserInGroup(update.CallbackQuery.From.ID, group.GroupID) {
|
||||
_, err = botAPI.AnswerCallbackQuery(tgbotapi.NewCallback(update.CallbackQuery.ID, "You are already verified!"))
|
||||
return err
|
||||
}*/
|
||||
}
|
||||
|
||||
// Delete after accept the Message
|
||||
botAPI.DeleteMessage(tgbotapi.DeleteMessageConfig{
|
||||
@ -56,7 +58,7 @@ func (v verifierRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update
|
||||
msg.ParseMode = "Markdown"
|
||||
_, err := botAPI.Send(msg)
|
||||
|
||||
//TODO Remove the user from the validator so dont get banned
|
||||
v.verifyData.RemoveUser(update.CallbackQuery.From.ID, group.GroupID)
|
||||
return err
|
||||
} else {
|
||||
_, err = botAPI.AnswerCallbackQuery(tgbotapi.NewCallback(update.CallbackQuery.ID, "Wrong answer"))
|
||||
|
Loading…
Reference in New Issue
Block a user