🐛 Fix bug to not find leaved users

This commit is contained in:
Alphyron 2021-04-01 22:14:25 +02:00
parent fdb6eccb40
commit ae1487e5a9
3 changed files with 65 additions and 41 deletions

View File

@ -24,31 +24,25 @@ func CheckForLeavingUser(ticker *time.Ticker, quitChannel <-chan struct{}, group
for _, group := range groups { for _, group := range groups {
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)
config := tgbotapi.ChatConfig{ config := tgbotapi.ChatConfig{
ChatID: group.GroupID, ChatID: group.GroupID,
} }
teleSize, _ := bot.GetChatMembersCount(config) teleSize, _ := bot.GetChatMembersCount(config)
teleSize -= 1
sqlSize, err := groupHelperService.GetGroupDatabaseSize(group)
if err != nil { if teleSize == group.Size {
log.Println("Error while counting the user in group") continue
}
if group.Size < teleSize {
group.Size = teleSize
_, err = groupHelperService.UpdateGroup(group)
log.Println(err) log.Println(err)
continue continue
} }
if teleSize == sqlSize { if teleSize < group.Size {
continue
}
if sqlSize < teleSize {
group.Size = teleSize
groupHelperService.UpdateGroup(group)
continue
}
if teleSize < sqlSize {
checkGroupUser(group, groupHelperService, bot) checkGroupUser(group, groupHelperService, bot)
groupHelperService.UpdateGroup(group) groupHelperService.UpdateGroup(group)
} }
@ -67,12 +61,17 @@ func checkGroupUser(group *models.Group, groupHelperService logic.GroupHelperSer
users, err := groupHelperService.ListGroupUsers(group) users, err := groupHelperService.ListGroupUsers(group)
log.Println("users")
if err != nil { if err != nil {
log.Println("Error while getting the users for group while checking for leaved user") log.Println("Error while getting the users for group while checking for leaved user")
log.Println(err) log.Println(err)
return return
} }
log.Println("no err")
log.Println(len(users))
for _, user := range users { for _, user := range users {
<-throttle // rate limit our Service.Method RPCs <-throttle // rate limit our Service.Method RPCs
@ -81,18 +80,33 @@ func checkGroupUser(group *models.Group, groupHelperService logic.GroupHelperSer
UserID: int(user.UserID), UserID: int(user.UserID),
} }
log.Println(user.UserID)
member, _ := bot.GetChatMember(userConfig) member, _ := bot.GetChatMember(userConfig)
log.Println(member.User.FirstName)
log.Println(member.HasLeft())
if !member.HasLeft() { if !member.HasLeft() {
continue continue
} }
log.Println("User left")
leaveMessage := group.UserLeaveMessage leaveMessage := group.UserLeaveMessage
leaveMessage = message.ReplaceMessage(leaveMessage, member.User) leaveMessage = message.ReplaceMessage(leaveMessage, member.User)
msg := tgbotapi.NewMessage(group.GroupID, leaveMessage) msg := tgbotapi.NewMessage(group.GroupID, leaveMessage)
msg.ParseMode = "Markdown" msg.ParseMode = "Markdown"
bot.Send(msg) bot.Send(msg)
groupHelperService.UserLeaveGroup(user, group) _, err = groupHelperService.UserLeaveGroup(user, group)
if err != nil {
log.Println(err)
}
group.Size = group.Size - 1
groupHelperService.UpdateGroup(group)
if err != nil {
log.Println(err)
}
} }
} }

View File

@ -11,6 +11,7 @@ import (
_ "github.com/jinzhu/gorm/dialects/mysql" _ "github.com/jinzhu/gorm/dialects/mysql"
_ "github.com/jinzhu/gorm/dialects/postgres" _ "github.com/jinzhu/gorm/dialects/postgres"
_ "github.com/jinzhu/gorm/dialects/sqlite" _ "github.com/jinzhu/gorm/dialects/sqlite"
"log"
) )
type groupHelperRepository struct { type groupHelperRepository struct {
@ -83,7 +84,17 @@ func (g groupHelperRepository) CreateGroup(group *models.Group) (*models.Group,
} }
func (g groupHelperRepository) UpdateGroup(group *models.Group) (*models.Group, error) { func (g groupHelperRepository) UpdateGroup(group *models.Group) (*models.Group, error) {
err := g.Conn.Where("id = ?", group.ID).Save(group).Error err := g.Conn.Model(&models.Group{}).Where("id = ?", group.ID).Update(models.Group{
Size: group.Size,
UserJoinMessage: group.UserJoinMessage,
UserVerifiedMessage: group.UserVerifiedMessage,
UserLeaveMessage: group.UserLeaveMessage,
UserKickMessage: group.UserKickMessage,
ForbidWriting: group.ForbidWriting,
OnlineCheck: group.OnlineCheck,
KickCooldown: group.KickCooldown,
AdminGroupID: group.AdminGroupID,
}).Error
return group, err return group, err
} }
@ -149,7 +160,8 @@ func (g groupHelperRepository) UserJoinGroup(user *models.User, group *models.Gr
} }
func (g groupHelperRepository) UserLeaveGroup(user *models.User, group *models.Group) (bool, error) { func (g groupHelperRepository) UserLeaveGroup(user *models.User, group *models.Group) (bool, error) {
err := g.Conn.Model(user).Association("Groups").Delete(group).Error log.Println("DELETE")
err := g.Conn.Exec("DELETE FROM `GroupUser` WHERE `group_id` = ? AND `user_id` = ?", group.ID, user.ID).Error
if err != nil { if err != nil {
return false, errors.New("problem while disconnecting the user from the group - " + err.Error()) return false, errors.New("problem while disconnecting the user from the group - " + err.Error())
@ -184,13 +196,12 @@ func (g groupHelperRepository) ListGroups() ([]*models.Group, error) {
} }
func (g groupHelperRepository) ListGroupUsers(group *models.Group) ([]*models.User, error) { func (g groupHelperRepository) ListGroupUsers(group *models.Group) ([]*models.User, error) {
var users []*models.User err := g.Conn.Model(group).Preload("Users").Find(group).Error
err := g.Conn.Model(group).Related(&users, "GroupUser").Error
if err != nil { if err != nil {
return nil, errors.New("problem while getting all users from group - " + err.Error()) return nil, errors.New("problem while getting all users from group - " + err.Error())
} }
return users, nil return group.Users, nil
} }
func (g groupHelperRepository) ListUsers() ([]*models.User, error) { func (g groupHelperRepository) ListUsers() ([]*models.User, error) {

View File

@ -5,7 +5,6 @@ import (
"git.dragon-labs.de/alphyron/group_helper/models" "git.dragon-labs.de/alphyron/group_helper/models"
"git.dragon-labs.de/alphyron/group_helper/telegram" "git.dragon-labs.de/alphyron/group_helper/telegram"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api"
"log"
) )
type databaseRoutine struct { type databaseRoutine struct {
@ -44,7 +43,7 @@ func (d databaseRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update
_, err := d.groupHelperService.UpdateGroup(group) _, err := d.groupHelperService.UpdateGroup(group)
return err return err
} }
/*
if update.Message.LeftChatMember != nil { if update.Message.LeftChatMember != nil {
user, err := d.groupHelperService.GetUserByID(int64(update.Message.LeftChatMember.ID)) user, err := d.groupHelperService.GetUserByID(int64(update.Message.LeftChatMember.ID))
@ -66,7 +65,7 @@ func (d databaseRoutine) Update(botAPI *tgbotapi.BotAPI, update *tgbotapi.Update
_, err = d.groupHelperService.UpdateGroup(group) _, err = d.groupHelperService.UpdateGroup(group)
return err return err
} }
*/
user, err := d.groupHelperService.GetUserByID(int64(update.Message.From.ID)) user, err := d.groupHelperService.GetUserByID(int64(update.Message.From.ID))
if err != nil { if err != nil {