def register_for_wave(user, insta_username): def get_user_to_work(user_v): if u_man.user_exists_with_user_id(user_v.user_id): return u_man.get_by_user_id(user_v.user_id) else: u_man.insert_user(user_v) return u_man.get_by_user_id(user_v.user_id) if not InstaHelper.profile_exists(insta_username): return Status.InstagramProfileDoesNotExist if InstaHelper.is_profile_private(insta_username): return Status.InstagramProfileIsPrivate if not InstaHelper.has_post(insta_username): return Status.InstagramProfileHasNoPosts user = get_user_to_work(user) wave = w_man.get_wave_in_state(WaveStates.CREATED) if wave is None: return Status.NoWaveForRegistration to_work_with = json.loads(wave.users_profiles) if user.user_id in to_work_with.keys() or insta_username in to_work_with.values(): return Status.AlreadyRegisteredForWave to_work_with[user.user_id] = insta_username wave.users_profiles = json.dumps(to_work_with) w_man.update_wave(wave) user.profile = insta_username u_man.update_user(user) return Status.RegisteredForWave
def wrapped(bot, update, *args, **kwargs): if w_man.get_wave_in_state(wave_state): StatusHandler.handle_status(bot, update, Status.WaveStateAlreadyPresent, state=wave_state) return return func(bot, update, *args, **kwargs)
def start_bidding(): wave = w_man.get_wave_in_state(WaveStates.CREATED) usernames = json.loads(wave.users_profiles).values() posts, links = InstaHelper.get_posts_for_wave(usernames) post_dict = {'posts': posts} wave.posts = json.dumps(post_dict) wave.wave_state = WaveStates.BIDDING wave.bidding_start = datetime.datetime.utcnow() w_man.update_wave(wave) return Status.WaveBiddingStarted, links
def finish_wave(): wave = w_man.get_wave_in_state(WaveStates.ASSURING) posts = json.loads(wave.posts)['posts'] users_profiles = json.loads(wave.users_profiles) warned = InstaHelper.get_wave_warned(posts, users_profiles) warned_username = [] banned = [] for warned_user_id, insta_profile in warned.items(): user = u_man.get_by_user_id(warned_user_id) if user.is_privileged: continue user.warnings += 1 warned_username.append(user.username) if user.warnings >= WARNINGS_LIMIT: user.is_banned = True banned.append(user.username) u_man.update_user(user) summary = WaveSummary(warned_username, banned) wave.finish = datetime.datetime.utcnow() wave.wave_state = WaveStates.FINISHED w_man.update_wave(wave) return Status.WaveIsFinished, summary
def delete_user_from_wave(user): def get_user_to_work(user_v): if u_man.user_exists_with_user_id(user_v.user_id): return u_man.get_by_user_id(user_v.user_id) else: u_man.insert_user(user_v) return user_v user = get_user_to_work(user) wave = w_man.get_wave_in_state(WaveStates.CREATED) if wave is None: return Status.NoWaveForRegistration to_work_with = json.loads(wave.users_profiles) if user.user_id not in to_work_with.keys(): return Status.NotRegisteredInWave del to_work_with[user.user.user_id] wave.users_profiles = json.dumps(to_work_with) w_man.update_wave(wave) return Status.UnregisteredFromWave
def start_assuring_step(): wave = w_man.get_wave_in_state(WaveStates.BIDDING) wave.wave_state = WaveStates.ASSURING wave.assuring_start = datetime.datetime.utcnow() w_man.update_wave(wave) return Status.AssuringStepStarted
def rollback_from_assuring_to_bidding(): wave = w_man.get_wave_in_state(WaveStates.ASSURING) wave.wave_state = WaveStates.BIDDING wave.assuring_start = datetime.datetime.utcnow() w_man.update_wave(wave) return Status.InternalError