async def create_response(entry_data, preview=False): if entry_data: entry_id = entry_data['_id'] title = entry_data['title'] content = entry_data.get('content', '[no content]') unlisted = entry_data.get('unlisted', False) image = entry_data.get('image') markdown = entry_data.get('markdown') no_html = entry_data.get('nohtml_content') content = await utils.before_show_text(content) markdown = utils.html_to_markdown(content) owner_id = entry_data.get('owner_id') else: return web.HTTPNotFound() url_title = utils.url_title(title) if preview: return {'title': title, 'preview': utils.remove_html(content), 'html': content, 'id': entry_id, 'image': image} else: return { 'slug': url_title, 'id': entry_id, 'title': title, 'html': content, 'unlisted': unlisted, 'image': image, 'markdown': markdown, 'no_html': no_html, 'owner_id': owner_id, }
async def create_entry_embed(entry_data, author_id=None, raw_entry=False): if not raw_entry: html = entry_data['content'] content = utils.html_to_markdown(html) content_ending = '' if len(content) > 2048: content = content[:2045 - len(content_ending)] + '...' content += content_ending title = utils.url_title(entry_data['title']) view_url = f'{BASE_URL}/entry/{title}' view_url = view_url embed = discord.Embed(title=entry_data['title'], description=content, url=view_url) if entry_data.get('image'): embed.set_thumbnail(url=entry_data['image']['src']) return embed else: entry_data = dict(entry_data) content = entry_data['nohtml_content'] content_ending = '' if len(content) > 1024: content = content[:1021 - len(content_ending)] + '...' try: del entry_data['image'] except KeyError: pass entry_data['nohtml_content'] = content del entry_data['content'] del entry_data['history'] return utils.embed_from_dict(entry_data, color=0x00FF00, title='raw entry data')
async def api_entry(request): entry_name = utils.url_title(request.match_info.get('entry')) entry_data = await database.get_entry(name=entry_name) data = await create_response(entry_data) if not data: raise web.HTTPNotFound() if data['slug'] != entry_name: return web.HTTPFound('/api/entry/' + data['slug']) return json_response(data)
async def new_entry(message, search_query: str): search_query_url_encoded = utils.url_title(search_query) edit_url = f'{BASE_URL}/edit?title={search_query_url_encoded}' edit_url = edit_url if message.author.id in EDITOR_IDS: embed = discord.Embed(title=f'Write {search_query}', description=f'[Click here to write it!]({edit_url})') found = await database.search_entries(search_query, limit=1) if found: embed.set_footer(text='Alert: There may be an entry with the same/similar name or topic.') else: embed = discord.Embed(title='This command is editor only') await message.send(embed=embed)
async def view_entry(request): entry_name = request.match_info.get('entry') entry_data = await database.get_entry(name=entry_name) if entry_data: entry_id = entry_data['_id'] title = entry_data['title'] content = entry_data.get('content', '[no content]') nohtml_content = entry_data.get('nohtml_content', '') unlisted = entry_data.get('unlisted', False) history = entry_data.get('history', []) image = entry_data.get('image') else: return web.HTTPNotFound() url_title = utils.url_title(title) if url_title != entry_name: if not unlisted: # redirect the entry if it's not unlisted return web.HTTPFound('/entry/' + url_title) sid_cookie = request.cookies.get('sid') if sid_cookie: discord_id = await database.get_editor_session(sid_cookie) else: discord_id = None is_editor = discord_id in EDITOR_IDS if discord_id: if entry_data.get('owner_id') == int(discord_id): is_editor = True article_text = None # ok you figure this out imma do templating article_text = None return Template( 'entry.html', title=title, content=content, nohtml_content=nohtml_content, id=entry_id, unlisted=unlisted, history=history, image=image, is_editor=is_editor, back_location='/', article_text=article_text, )
async def show_entry(message, search_query: str): if message.message.author.id in BLACKLIST_IDS: await asyncio.sleep(blacklist_wait) found = await database.search_entries(search_query, limit=1) if found: embed = await create_entry_embed(found[0], author_id=message.author.id) await message.send(embed=embed) else: embed = discord.Embed(title="This entry doesn't exist") search_query_url_encoded = utils.url_title(search_query) edit_url = f'{BASE_URL}/edit?title={search_query_url_encoded}' edit_url = edit_url if message.author.id in EDITOR_IDS: embed.description = f'[Click here to write it!]({edit_url})' await message.send(embed=embed)
async def view_entry(request): entry_name = request.match_info.get('entry') entry_data = await database.get_entry(name=entry_name) if entry_data: entry_id = entry_data['_id'] title = entry_data['title'] content = entry_data.get('content', '[no content]') nohtml_content = entry_data.get('nohtml_content', '') unlisted = entry_data.get('unlisted', False) history = entry_data.get('history', []) image = entry_data.get('image') else: print(entry_name, 'not found') return web.HTTPNotFound() url_title = utils.url_title(title) if url_title != entry_name: if not unlisted: print('Redirected', entry_name, 'to', url_title) return web.HTTPFound('/entry/' + url_title) else: print( f'{entry_name} ({url_title}) is unlisted so it was not redirected' ) sid_cookie = request.cookies.get('sid') if sid_cookie: discord_id = await database.get_editor_session(sid_cookie) else: discord_id = None is_editor = discord_id in EDITOR_IDS if discord_id: if entry_data.get('owner_id') == int(discord_id): is_editor = True article_text = None translated = False # ok you figure this out imma do templating article_text = None translated = False lang = None if_lang = bool(request.query.get('lang', False)) if lang in language_codes: try: cached = entry_id in translated_cache if cached: if lang in translated_cache[entry_id]: article_text = translated_cache[entry_id][lang] translated = True print('used lang translation cache') else: cached = False if not cached and language_translator: translation = language_translator.translate( text=nohtml_content, model_id='en-{}'.format(lang)).get_result() article_text = translation['translations'][0]['translation'] try: translated_cache[entry_id][lang] = article_text except KeyError: translated_cache[entry_id] = {lang: article_text} translated = True except Exception as e: print(e) elif if_lang: translated = True article_text = 'Translations are currently disabled' return Template( 'entry.html', title=title, content=content, nohtml_content=nohtml_content, id=entry_id, unlisted=unlisted, history=history, image=image, is_editor=is_editor, back_location='/', article_text=article_text, translated=translated, )