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