Example #1
0
async def build_info(msg: discord.Message):
    info = {}

    def set_info(flag='', content='', image_url='', custom_author=''):
        info['flag'] = flag
        info['content'] = content
        info['image_url'] = image_url
        info['custom_author'] = custom_author

    # good ol' regex
    url = re.findall(
        r"((?:https?):(?://)+(?:[\w\d_.~\-!*'();:@&=+$,/?#[\]]*))",
        msg.content)

    if f'{msg.guild.id}{msg.channel.id}{msg.id}' in exceptions:
        set_info('image', msg.content,
                 exceptions.pop(f'{msg.guild.id}{msg.channel.id}{msg.id}'))
    else:
        # tldr, someone might want to override the image
        if url and not msg.attachments:
            if 'deviantart.com' in url[0] or 'tumblr.com' in url[
                    0] or 'pixiv.net' in url[0]:
                processed_url = requests.get(url[0].replace('mobile.',
                                                            '')).text
                set_info(
                    'image',
                    f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                    BeautifulSoup(processed_url,
                                  'html.parser').find('meta',
                                                      attrs={
                                                          'property':
                                                          'og:image'
                                                      }).get('content'))
            elif 'www.instagram.com' in url[0]:
                set_info(
                    'image',
                    f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                    Instagram.return_link(url[0]))
            elif 'twitter.com' in url[0]:
                # f**k twitter
                tweet_id = re.findall(r'https://twitter\.com/.*?/status/(\d*)',
                                      url[0].replace('mobile.', ''))
                r = requests.get(
                    f'https://api.twitter.com/1.1/statuses/show.json?id={tweet_id[0]}&tweet_mode=extended',
                    auth=twitter).json()
                if 'errors' not in r:
                    if 'media' in r['entities']:
                        set_info(
                            'image',
                            f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                            r['entities']['media'][0]['media_url'])
                    else:
                        set_info('message', msg.content)
            elif 'reddit.com' in url[0] or 'redd.it' in url[0]:
                set_info(
                    'image',
                    f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                    Reddit.return_link(url[0])[0])
            elif 'youtube.com' in url[0] or 'youtu.be' in url[0]:
                set_info(
                    'image',
                    f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                    f'https://img.youtube.com/vi/{get_id(url[0])}/0.jpg')
            elif 'dcinside.com' in url[0]:
                set_info(
                    'image',
                    f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                    msg.attachments[0].url)
            elif 'imgur' in url[0]:
                if 'i.imgur' not in url[0]:
                    processed_url = requests.get(url[0].replace('mobile.',
                                                                '')).text
                    set_info(
                        'image',
                        f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                        BeautifulSoup(processed_url, 'html.parser').find(
                            'meta', attrs={
                                'property': 'og:image'
                            }).get('content').replace('?fb', ''))
                else:
                    set_info('image',
                             msg.content.replace(url[0], "").strip(), url[0])
            elif 'https://tenor.com' in url[0]:
                processed_url = requests.get(url[0].replace('mobile.',
                                                            '')).text
                for img in BeautifulSoup(processed_url, 'html.parser').findAll(
                        'img', attrs={'src': True}):
                    if 'media1.tenor.com' in img.get('src'):
                        set_info(
                            'image',
                            f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                            img.get('src'))
            elif any(ext in url[0] for ext in ['.mp4', '.mov', '.webm']):
                set_info(
                    'video',
                    f'[The video below](https://youtu.be/dQw4w9WgXcQ)\n{msg.content.replace(url[0], "").strip()}',
                    url[0])
            elif 'discordapp.com' in url[0] or 'twimg.com' in url[0]:
                set_info('image',
                         msg.content.replace(url[0], '').strip(),
                         msg.embeds[0].url)
            else:
                # high chance that it's the actual image
                if msg.embeds and msg.embeds[0].url != url[0]:
                    set_info(
                        'image',
                        f'[Source]({url[0]})\n{msg.content.replace(url[0], "").strip()}',
                        msg.embeds[0].url)
                else:
                    set_info(
                        'message',
                        msg.content,
                    )
        else:
            if msg.attachments:
                file = msg.attachments[0]
                is_video = any(ext in msg.attachments[0].url
                               for ext in ['.mp4', '.mov', '.webm'])
                set_info(
                    'video' if is_video else 'image',
                    f'{msg.content}\n[{"Video spoiler alert!" if is_video else "Spoiler alert!"}]({msg.attachments[0].url})'
                    if file.is_spoiler() else
                    (f'[The video below](https://youtu.be/dQw4w9WgXcQ)\n{msg.content}'
                     if is_video else msg.content),
                    '' if file.is_spoiler() else msg.attachments[0].url)
            else:
                if Reddit.validate_embed(
                        msg.embeds) or Instagram.validate_embed(msg.embeds):
                    content = msg.embeds[0].description.split('\n')
                    set_info(
                        'image',
                        '\n'.join(content[1:]) if len(content) > 1 else '',
                        msg.embeds[0].image.__getattribute__('url'), await
                        bot.fetch_user(
                            msg.embeds[0].fields[0].__dict__['value'][(
                                3 if '!' in msg.embeds[0].fields[0].
                                __dict__['value'] else 2
                            ):len(msg.embeds[0].fields[0].__dict__['value']) -
                                                                      1]))
                else:
                    set_info(
                        'message',
                        msg.content,
                    )

    return info