def load_config(config): global args global configs global ResourceID args = config.args configs = config ResourceID = resources(config.args.app_id)
def run(self, device, configs, storage, sessions, plugin): class State: def __init__(self): pass is_job_completed = False self.device_id = configs.args.device self.state = None self.sessions = sessions self.session_state = sessions[-1] self.args = configs.args self.ResourceID = resources(self.args.app_id) profile_filter = Filter() self.current_mode = plugin # IMPORTANT: in each job we assume being on the top of the Profile tab already sources = [source for source in self.args.blogger_followers] shuffle(sources) for source in sources: limit_reached = self.session_state.check_limit( self.args, limit_type=self.session_state.Limit.LIKES ) and self.session_state.check_limit( self.args, limit_type=self.session_state.Limit.FOLLOWS) self.state = State() is_myself = source[1:] == self.session_state.my_username its_you = is_myself and " (it's you)" or "" logger.info(f"Handle {source} {its_you}") on_interaction = partial( _on_interaction, likes_limit=int(self.args.total_likes_limit), source=source, interactions_limit=get_value(self.args.interactions_count, "Interactions count: {}", 70), sessions=self.sessions, session_state=self.session_state, args=self.args, ) on_like = partial(_on_like, sessions=self.sessions, session_state=self.session_state) on_watch = partial(_on_watch, sessions=self.sessions, session_state=self.session_state) if self.args.stories_count != "0": stories_percentage = get_value( self.args.stories_percentage, "Chance of watching stories: {}%", 40) else: stories_percentage = 0 @run_safely( device=device, device_id=self.device_id, sessions=self.sessions, session_state=self.session_state, screen_record=self.args.screen_record, ) def job(): self.handle_blogger( device, source[1:] if "@" in source else source, self.args.likes_count, self.args.stories_count, stories_percentage, int(self.args.follow_percentage), int(self.args.follow_limit) if self.args.follow_limit else None, storage, profile_filter, on_like, on_watch, on_interaction, ) self.state.is_job_completed = True while not self.state.is_job_completed and not limit_reached: job() if limit_reached: logger.info("Likes and follows limit reached.") self.session_state.check_limit( self.args, limit_type=self.session_state.Limit.ALL, output=True) break
def run(self, device, configs, storage, sessions, plugin): class State: def __init__(self): pass unfollowed_count = 0 is_job_completed = False self.args = configs.args self.device_id = configs.args.device self.state = State() self.session_state = sessions[-1] self.sessions = sessions self.unfollow_type = plugin self.ResourceID = resources(self.args.app_id) count_arg = get_value( getattr(self.args, self.unfollow_type.replace("-", "_")), "Unfollow count: {}", 10, ) count = min( count_arg, self.session_state.my_following_count - int(self.args.min_following), ) if self.unfollow_type == "unfollow": self.unfollow_type = UnfollowRestriction.FOLLOWED_BY_SCRIPT elif self.unfollow_type == "unfollow-non-followers": self.unfollow_type = UnfollowRestriction.FOLLOWED_BY_SCRIPT_NON_FOLLOWERS elif self.unfollow_type == "unfollow-any-non-followers": self.unfollow_type = UnfollowRestriction.ANY_NON_FOLLOWERS else: self.unfollow_type = UnfollowRestriction.ANY if count <= 0: logger.info("You want to unfollow " + str(count) + ", you have " + str(self.session_state.my_following_count) + " followings, min following is " + str(self.args.min_following) + ". Finish.") return @run_safely( device=device, device_id=self.device_id, sessions=self.sessions, session_state=self.session_state, screen_record=self.args.screen_record, ) def job(): self.unfollow( device, count - self.state.unfollowed_count, self.on_unfollow, storage, self.unfollow_type, self.session_state.my_username, ) logger.info(f"Unfollowed {self.state.unfollowed_count}, finish.") self.state.is_job_completed = True device.back() while not self.state.is_job_completed and (self.state.unfollowed_count < count): job()