def update_chatters_stage2(self, chatters): points = 1 if self.bot.is_online else 0 log.debug('Updating {0} chatters'.format(len(chatters))) self.bot.stream_manager.update_chatters(chatters, self.update_chatters_interval) with RedisManager.pipeline_context() as pipeline: with DBManager.create_session_scope() as db_session: user_models = UserManager.get().bulk_load_user_models(chatters, db_session) users = [] for username in chatters: user_model = user_models.get(username, None) user = UserManager.get().get_user(username, db_session=db_session, user_model=user_model, redis=pipeline) users.append(user) more_update_data = {} if self.bot.is_online: more_update_data['minutes_in_chat_online'] = self.update_chatters_interval else: more_update_data['minutes_in_chat_offline'] = self.update_chatters_interval points_to_give_out = {} dt_now = datetime.datetime.now().timestamp() for user in users: user._set_last_seen(dt_now) num_points = points if user.subscriber: num_points *= 5 # TODO: Load user tags during the pipeline redis data fetch if self.bot.streamer == 'forsenlol' and 'trumpsc_sub' in user.get_tags(): num_points *= 0.5 num_points = int(num_points) if num_points not in points_to_give_out: points_to_give_out[num_points] = [] points_to_give_out[num_points].append(user.username) user.save(save_to_db=False) for num_points, usernames in points_to_give_out.items(): payload = { User.points: User.points + num_points, } if self.bot.is_online: payload[User.minutes_in_chat_online] = User.minutes_in_chat_online + self.update_chatters_interval else: payload[User.minutes_in_chat_offline] = User.minutes_in_chat_offline + self.update_chatters_interval db_session.query(User).filter(User.username.in_(usernames)).\ update(payload, synchronize_session=False) pipeline.execute()
def command_masspoints(self, **options): bot = options["bot"] source = options["source"] message = options["message"] if not message: return False pointsArgument = message.split(" ")[0] givePoints = 0 try: givePoints = int(pointsArgument) except ValueError: bot.whisper(source.username_raw, "Error: You must give an integer") return False currentChatters = bot.twitch_tmi_api.get_chatters(bot.streamer) numUsers = len(currentChatters) if not currentChatters: bot.say("Error fetching chatters") return False with RedisManager.pipeline_context() as pipeline: with DBManager.create_session_scope() as db_session: userModels = UserManager.get().bulk_load_user_models( currentChatters, db_session) for userName in currentChatters: userModel = userModels.get(userName, None) userInstance = UserManager.get().get_user( userName, db_session=db_session, user_model=userModel, redis=pipeline) # Bot/idler check. Quicker than removing from list? if userInstance.num_lines < 5: numUsers -= 1 continue if userInstance.subscriber: userInstance.points += givePoints * self.settings[ "sub_points"] else: userInstance.points += givePoints bot.say("{} just gave {} viewers {} points each! Enjoy FeelsGoodMan". format(source.username_raw, numUsers, givePoints))
def on_message(self, source, message, emotes, whisper, urls, event): if whisper is False and source.username in self.valid_usernames: # Did twitchnotify tell us about a new sub? m = self.new_sub_regex.search(message) if m and 'subscribed to ' not in message: username = m.group(1) with UserManager.get().get_user_context(username) as user: self.on_new_sub(user) HandlerManager.trigger('on_user_sub', user)
def on_message(self, source, message, emotes, whisper, urls, event): if whisper is False and source.username in self.valid_usernames: # Did twitchnotify tell us about a new sub? m = self.new_sub_regex.search(message) if m: username = m.group(1) with UserManager.get().get_user_context(username) as user: self.on_new_sub(user) HandlerManager.trigger('on_user_sub', user)
def on_message(self, source, message, emotes, whisper, urls, event): if whisper is False and source.username in self.valid_usernames: # Did twitchnotify tell us about a new sub? m = self.new_sub_regex.search(message) if m: username = m.group(1) with UserManager.get().get_user_context(username) as user: self.on_new_sub(user) HandlerManager.trigger('on_user_sub', user) else: # Did twitchnotify tell us about a resub? m = self.resub_regex.search(message) if m: username = m.group(1) num_months = int(m.group(2)) with UserManager.get().get_user_context(username) as user: self.on_resub(user, num_months) HandlerManager.trigger('on_user_resub', user, num_months)
def update_chatters_stage2(self, chatters): points = 1 if self.bot.is_online else 0 log.debug('Updating {0} chatters'.format(len(chatters))) self.bot.stream_manager.update_chatters(chatters, self.update_chatters_interval) with RedisManager.pipeline_context() as pipeline: with DBManager.create_session_scope() as db_session: user_models = UserManager.get().bulk_load_user_models( chatters, db_session) users = [] for username in chatters: user_model = user_models.get(username, None) user = UserManager.get().get_user(username, db_session=db_session, user_model=user_model, redis=pipeline) users.append(user) more_update_data = {} if self.bot.is_online: more_update_data[ 'minutes_in_chat_online'] = self.update_chatters_interval else: more_update_data[ 'minutes_in_chat_offline'] = self.update_chatters_interval points_to_give_out = {} dt_now = datetime.datetime.now().timestamp() for user in users: user._set_last_seen(dt_now) num_points = points if user.subscriber: num_points *= 5 # TODO: Load user tags during the pipeline redis data fetch if self.bot.streamer == 'forsenlol' and 'trumpsc_sub' in user.get_tags( ): num_points *= 0.5 num_points = int(num_points) if num_points not in points_to_give_out: points_to_give_out[num_points] = [] points_to_give_out[num_points].append(user.username) user.save(save_to_db=False) for num_points, usernames in points_to_give_out.items(): payload = { User.points: User.points + num_points, } if self.bot.is_online: payload[ User. minutes_in_chat_online] = User.minutes_in_chat_online + self.update_chatters_interval else: payload[ User. minutes_in_chat_offline] = User.minutes_in_chat_offline + self.update_chatters_interval db_session.query(User).filter(User.username.in_(usernames)).\ update(payload, synchronize_session=False) pipeline.execute()