🐛 Fix bug to not find leaved users
This commit is contained in:
		
							parent
							
								
									fdb6eccb40
								
							
						
					
					
						commit
						ae1487e5a9
					
				@ -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)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -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) {
 | 
				
			||||||
 | 
				
			|||||||
@ -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,29 +43,29 @@ 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 {
 | 
				
			||||||
 | 
								user, err := d.groupHelperService.GetUserByID(int64(update.Message.LeftChatMember.ID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if update.Message.LeftChatMember != nil {
 | 
								if err != nil {
 | 
				
			||||||
		user, err := d.groupHelperService.GetUserByID(int64(update.Message.LeftChatMember.ID))
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err != nil {
 | 
								go func() {
 | 
				
			||||||
 | 
									success, err := d.groupHelperService.UserLeaveGroup(user, group)
 | 
				
			||||||
 | 
									log.Println(success)
 | 
				
			||||||
 | 
									log.Println(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}()
 | 
				
			||||||
 | 
								config := tgbotapi.ChatConfig{
 | 
				
			||||||
 | 
									ChatID: update.Message.Chat.ID,
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								size, _ := botAPI.GetChatMembersCount(config)
 | 
				
			||||||
 | 
								group.Size = size - 1
 | 
				
			||||||
 | 
								_, err = d.groupHelperService.UpdateGroup(group)
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
		go func() {
 | 
					 | 
				
			||||||
			success, err := d.groupHelperService.UserLeaveGroup(user, group)
 | 
					 | 
				
			||||||
			log.Println(success)
 | 
					 | 
				
			||||||
			log.Println(err)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		}()
 | 
					 | 
				
			||||||
		config := tgbotapi.ChatConfig{
 | 
					 | 
				
			||||||
			ChatID: update.Message.Chat.ID,
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		size, _ := botAPI.GetChatMembersCount(config)
 | 
					 | 
				
			||||||
		group.Size = size - 1
 | 
					 | 
				
			||||||
		_, err = d.groupHelperService.UpdateGroup(group)
 | 
					 | 
				
			||||||
		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 {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user