예제 #1
0
    async def _osu_most_recent(self, ctx, username: str, mode: str = 'osu!'):
        """ Get most recent osu! play for player.
            Available modes:
                - osu!
                - taiko
                - ctb
                - mania
        """
        if mode.lower() == 'osu!':
            mode = 0
        elif mode.lower() == 'taiko':
            mode = 1
        elif mode.lower() == 'ctb':
            mode = 2
        elif mode.lower() == 'mania' or mode.lower() == 'osu!mania':
            mode = 3

        recentUrl = f'https://osu.ppy.sh/api/get_user_recent?k={c.data["osu"]}&u={username}&type=string&m={mode}'
        recentData = requests.get(recentUrl).json()
        beatmapUrl = f'https://osu.ppy.sh/api/get_beatmaps?k={c.data["osu"]}&b={recentData[0]["beatmap_id"]}'
        beatmapData = requests.get(beatmapUrl).json()

        embed = discord.Embed(
            title=f'most recent play for {username}',
            color=checks.getDominantColor(
                'https://assets.ppy.sh/beatmaps/542081/covers/cover.jpg?1521116828'
            ))
        embed.set_thumbnail(url=(
            f'{scraper("https://osu.ppy.sh/beatmaps/"+recentData[0]["beatmap_id"])}'
        ))
        await ctx.send(embed=embed)
예제 #2
0
 async def _display_image(self, ctx, *, url: str):
     """ Display an image in chat.
     """
     embed = discord.Embed(title='',
                           color=checks.getDominantColor(url),
                           url='')
     embed.set_image(url=url)
     await ctx.send(embed=embed)
예제 #3
0
    async def _osu_user(self, ctx, username: str, mode: str = 'osu!'):
        """ Get osu! user information.
            Available modes:
                - osu!
                - taiko
                - ctb
                - mania
        """
        def getTopBeatmaps(amount: int = 1):
            result = ''
            bestUrl = f'https://osu.ppy.sh/api/get_user_best?k={c.data["osu"]}&m={mode}&limit=3&u={username}&type=string'
            bestData = requests.get(bestUrl).json()
            for times in range(amount):
                bestMapsUrl = f'https://osu.ppy.sh/api/get_beatmaps?k={c.data["osu"]}&b={bestData[times]["beatmap_id"]}'
                bestMapsData = requests.get(bestMapsUrl).json()
                result = f'{result}\n\t{times+1}. {bestMapsData[0]["title"]}'
            return result

        if mode.lower() == 'osu!':
            mode = 0
        elif mode.lower() == 'taiko':
            mode = 1
        elif mode.lower() == 'ctb':
            mode = 2
        elif mode.lower() == 'mania' or mode.lower() == 'osu!mania':
            mode = 3

        userUrl = f'https://osu.ppy.sh/api/get_user?k={c.data["osu"]}&m={mode}&u={username}&type=string'
        userData = requests.get(userUrl).json()

        embed = discord.Embed(
            title=f'osu! user information for {userData[0]["username"]}',
            color=checks.getDominantColor(
                f'https://a.ppy.sh/{userData[0]["user_id"]}'))
        embed.set_thumbnail(url=(f'https://a.ppy.sh/{userData[0]["user_id"]}'))
        embed.set_footer(text='')
        embed.add_field(name="Username:"******"username"],
                        inline=True)
        embed.add_field(name="ID:", value=userData[0]["user_id"], inline=True)
        embed.add_field(name="Created:",
                        value=userData[0]["join_date"],
                        inline=True)
        embed.add_field(name="300:",
                        value=userData[0]["count300"],
                        inline=True)
        embed.add_field(name="100:",
                        value=userData[0]["count100"],
                        inline=True)
        embed.add_field(name="50:", value=userData[0]["count50"], inline=True)
        embed.add_field(name="Plays:",
                        value=userData[0]["playcount"],
                        inline=True)
        embed.add_field(name="Level:", value=userData[0]["level"], inline=True)
        embed.add_field(name="PP:", value=userData[0]["pp_raw"], inline=True)
        embed.add_field(name="Accuracy:",
                        value=userData[0]["accuracy"],
                        inline=True)
        embed.add_field(
            name="SS/SSH:",
            value=
            f'{userData[0]["count_rank_ss"]}/{userData[0]["count_rank_ssh"]}',
            inline=True)
        embed.add_field(
            name="S/SH:",
            value=
            f'{userData[0]["count_rank_s"]}/{userData[0]["count_rank_sh"]}',
            inline=True)
        embed.add_field(name="A:",
                        value=userData[0]["count_rank_a"],
                        inline=True)
        embed.add_field(
            name="Country:",
            value=
            f'{cc.countryCodes[userData[0]["country"]]} ({userData[0]["country"]})',
            inline=True)
        embed.add_field(name="Profile:",
                        value=f'https://osu.ppy.sh/u/{userData[0]["user_id"]}',
                        inline=True)
        embed.add_field(name="Top Scores:",
                        value=getTopBeatmaps(3),
                        inline=True)
        await ctx.send(embed=embed)
예제 #4
0
    async def _reddit_meme(self,
                           ctx,
                           subreddit: str = 'random',
                           section: str = 'random'):
        """ Get memes (images, gifs, videos) from a subreddit.
            Sections:
                - random
                - new
                - top
                - controversial
                - hot
                - rising
        """
        try:
            reddits = ['PewdiepieSubmissions', 'memes', 'dankmemes', 'me_irl']
            if subreddit.lower() == 'random':
                subreddit = random.choice(reddits)
            if section.lower() == 'random' or subreddit.lower() == 'random':
                num: int = random.randint(0, 24)
                section = 'new'
            else:
                num: int = 0
            # requests
            # reddit has blocked the curl user agent, change it
            headers = {'User-Agent': 'rufus-agent'}
            url = f'https://reddit.com/r/{subreddit}/new/.json'
            data = requests.get(url, headers=headers).json()
            aboutUrl = f'https://reddit.com/r/{subreddit}/about.json'
            aboutData = requests.get(aboutUrl, headers=headers).json()
            userUrl = f"https://reddit.com/user/{data['data']['children'][num]['data']['author']}/about.json"
            userData = requests.get(userUrl, headers=headers).json()

            # check if the post is a video
            if bool(data['data']['children'][num]['data']['is_video']):
                mediaUrl = str(data['data']['children'][num]['data']['media']
                               ['reddit_video']['fallback_url'])
            else:
                mediaUrl = str(data['data']['children'][num]['data']['url'])

            selftext = str(data['data']['children'][num]['data']['selftext'])
            description = selftext if bool(selftext) else ''
            try:
                icon = str(userData['data']['icon_img']).split('?')[0]
            except:
                icon = ''
            embed = discord.Embed(
                title=str(data['data']['children'][num]['data']['title']),
                timestamp=datetime.datetime.fromtimestamp(
                    int(data['data']['children'][num]['data']['created_utc'])),
                description=description,
                color=checks.getDominantColor(str(mediaUrl)),
                url='https://reddit.com' +
                data['data']['children'][num]['data']['permalink'])
            embed.set_author(
                name='u/' +
                str(data['data']['children'][num]['data']['author']),
                icon_url=icon)
            embed.set_footer(text=str(data['data']['children'][num]['data']
                                      ['subreddit_name_prefixed']),
                             icon_url=str(aboutData['data']['icon_img']))

            if bool(data['data']['children'][num]['data']
                    ['over_18']) and not ctx.message.channel.is_nsfw():
                embed.add_field(name="NSFW", value=str(mediaUrl), inline=False)
            else:
                try:
                    embed.set_image(url=mediaUrl)
                except:
                    pass

            await ctx.send(embed=embed)
        except:
            # CommandInvokeError: Command raised an exception: KeyError: 'is_video' (subreddit doesn't exist)
            # CommandInvokeError: Command raised an exception: KeyError: 'data' (subreddit is restricted)
            await ctx.send('```Subreddit restricted or non-existent.```')