async def stats_games(self, message, user_id): member = message.server.get_member(str(user_id)) if member is None: return # Flush current tracking self.update_game(member.id, member.game) games = self.top_user_games(user_id) top = [(game.name, game.duration) for game in games[:10]] if games: since = min(map(lambda g: g.created_at, games)) since_days = int((time() - since.timestamp()) / (3600 * 24)) response = ( '{} has played **{}** different games in the last **{}** days ' 'for a total of **{}** seconds\ntop 10:\n{}' ).format( f.mention(user_id), len(games), since_days, sum(map(lambda g: g.duration, games)), f.code_block(f.format_sql_rows(top)) ) else: response = '{} has not played any games yet'.format(f.mention(user_id)) await self.send_message( message.channel, response, delete_after = 25 )
async def stats_games(self, message, user_id): member = message.server.get_member(str(user_id)) if member is None: return # Flush current tracking self.update_game(member.id, member.game) games = self.top_user_games(user_id) top = [(game.name, game.duration) for game in games[:10]] if games: since = min(map(lambda g: g.created_at, games)) since_days = int((time() - since.timestamp()) / (3600 * 24)) response = ( '{} has played **{}** different games in the last **{}** days ' 'for a total of **{}** seconds\ntop 10:\n{}').format( f.mention(user_id), len(games), since_days, sum(map(lambda g: g.duration, games)), f.code_block(f.format_sql_rows(top))) else: response = '{} has not played any games yet'.format( f.mention(user_id)) await self.send_message(message.channel, response, delete_after=25)
async def trivia_stats(self, message, user_id, topic=None): ranks = self.get_ranks(message.server.id, topic) for_string = '' if topic is None else ' for `{}`'.format(topic) try: rank, points = next((i + 1, points) for i, (points, id) in enumerate(ranks) if id == user_id) except StopIteration: await self.send_message( message.channel, '{} has no points on this server{}'.format( f.mention(user_id), for_string)) else: await self.send_message( message.channel, '{} has {} points and is ranked #{} on this server{}'.format( f.mention(user_id), points, rank, for_string))
async def monitor_forever(self, name, server): self.info('Monitoring: {}'.format(name)) channel = await self.api.channel(name) events = await self.pubsub.subscribe( PubSub.Topics.VIDEO_PLAYBACK(channel.name), server.id ) async for event in events: self.debug(event) if event['type'] == 'stream-up': users = self.users_to_mention(name, server) users_mention = ' '.join(f.mention(user_id) for user_id in users) await self.send_message( server.default_channel, '{}\n`{}` just went live!\n{}\n' '🆕 *You can now link your Twitch account on https://globibot.com/#connections to get notified when your favorite streamers go live*' .format(users_mention, channel.display_name, channel.url) ) if event['type'] == 'stream-down': await self.send_message( server.default_channel, '`{}` just went offline 😢'.format(channel.display_name) ) self.info('Stopped monitoring: {}'.format(name))
async def monitor_forever(self, channel_name, server): self.info('Monitoring: {}'.format(channel_name)) await self.refresh_channel_info(channel_name) events = await self.pubsub.subscribe( PubSub.Topics.VIDEO_PLAYBACK(channel_name), server.id ) async for event in events: channel = self.channels_info[channel_name] if event['type'] == 'stream-up': users = self.users_to_mention(channel.name, server) mentions = ' '.join(f.mention(user_id) for user_id in users) await self.send_message( server.default_channel, '{}\nWake up!'.format(mentions), embed = twitch_alert_embed(channel, True) ) if event['type'] == 'stream-down': await self.send_message( server.default_channel, '`{}` just went offline 😢'.format(channel.display_name) ) self.info('Stopped monitoring: {}'.format(channel_name))
async def add_master(self, message, user): self.bot.masters.append(str(user)) await self.send_message( message.channel, '{} can now use master commands'.format(f.mention(user)), delete_after=20 )
async def remove_master(self, message, user): if message.author.id != '89108411861467136': return self.bot.masters.remove(str(user)) await self.send_message( message.channel, '{} can no longer use master commands'.format(f.mention(user)), delete_after=20 )
async def most_active(self, message, count=10): with self.transaction() as trans: trans.execute(q.most_logs, dict(server_id=message.server.id, limit=count)) results = [ '{}: {:,} messages'.format(f.mention(r[0]), r[1]) for r in trans.fetchall() ] await self.send_message( message.channel, 'most **{}** active users on this server\n{}'.format( len(results), '\n'.join(results)), delete_after=30)
async def most_active(self, message, count = 10): with self.transaction() as trans: trans.execute(q.most_logs, dict( server_id = message.server.id, limit = count )) results = [ '{}: {:,} messages'.format(f.mention(r[0]), r[1]) for r in trans.fetchall() ] await self.send_message( message.channel, 'most **{}** active users on this server\n{}' .format(len(results), '\n'.join(results)), delete_after = 30 )
async def user(self, message, user_id): await self.send_message( message.channel, f.mention(user_id), delete_after=15 )
async def block(self, message, who): # TODO: Actually block that bitch 😂 await self.send_message( message.channel, '{} is now blocked 👍'.format(f.mention(who)) )