package guild import ( "context" "errors" "time" ) func (s *service) KickMember(ctx context.Context, guildID int64, userID int64) error { m, err := s.readDB.GuildMembers.WithContext(ctx). Where(s.readDB.GuildMembers.GuildID.Eq(guildID)). Where(s.readDB.GuildMembers.UserID.Eq(userID)). Where(s.readDB.GuildMembers.Status.Eq(1)). Where(s.readDB.GuildMembers.JoinStatus.Eq(2)). First() if err != nil { return err } if m != nil && m.Role == "owner" { return errors.New("cannot kick owner, transfer ownership first") } _, err = s.writeDB.GuildMembers.WithContext(ctx). Where(s.readDB.GuildMembers.GuildID.Eq(guildID)). Where(s.readDB.GuildMembers.UserID.Eq(userID)). Where(s.readDB.GuildMembers.Status.Eq(1)). Where(s.readDB.GuildMembers.JoinStatus.Eq(2)). Updates(map[string]any{ s.readDB.GuildMembers.Status.ColumnName().String(): int32(2), s.readDB.GuildMembers.StartTime.ColumnName().String(): time.Now(), }) return err }