Example #1
0
    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
        )
Example #2
0
    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)
Example #3
0
 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))
Example #4
0
    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))
Example #5
0
    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))
Example #6
0
    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
        )
Example #7
0
    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
        )
Example #8
0
    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)
Example #9
0
    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
            )
Example #10
0
 async def user(self, message, user_id):
     await self.send_message(
         message.channel,
         f.mention(user_id),
         delete_after=15
     )
Example #11
0
 async def block(self, message, who):
     # TODO: Actually block that bitch 😂
     await self.send_message(
         message.channel,
         '{} is now blocked 👍'.format(f.mention(who))
     )