🐛 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