async def get_schuled(message: Message): """ Get List of Scheduled Anime """ var = {"notYetAired": True} await message.edit("`Fetching Scheduled Animes`") result = await return_json_senpai(AIRING_QUERY, var) error = result.get("errors") if error: await CLOG.log(f"**ANILIST RETURNED FOLLOWING ERROR:**\n\n{error}") error_sts = error[0].get("message") await message.err(f"[{error_sts}]") return data = result["data"]["Page"]["airingSchedules"] c = 0 totl_schld = len(data) out = "" for air in data: romaji = air["media"]["title"]["romaji"] english = air["media"]["title"]["english"] mid = air["mediaId"] epi_air = air["episode"] air_at = make_it_rw(air["airingAt"], True) site = air["media"]["siteUrl"] title_ = english or romaji out += f"<h3>[🇯🇵]{title_}</h3>" out += f" • <b>ID:</b> {mid}<br>" out += f" • <b>Airing Episode:</b> {epi_air}<br>" out += f" • <b>Next Airing:</b> {air_at}<br>" out += f" • <a href='{site}'>[Visit on anilist.co]</a><br><br>" c += 1 if out: out_p = f"<h1>Showing [{c}/{totl_schld}] Scheduled Animes:</h1><br><br>{out}" link = post_to_tp("Scheduled Animes", out_p) await message.edit(f"[Open in Telegraph]({link})")
async def get_char(var): result = await return_json_senpai(CHARACTER_QUERY, var) error = result.get("errors") if error: await CLOG.log(f"**ANILIST RETURNED FOLLOWING ERROR:**\n\n`{error}`") error_sts = error[0].get("message") return [f"[{error_sts}]"] data = result["data"]["Character"] # Character Data id_ = data["id"] name = data["name"]["full"] native = data["name"]["native"] img = data["image"]["large"] site_url = data["siteUrl"] description = data["description"] featured = data["media"]["nodes"] snin = "\n" sninal = "" sninml = "" for ani in featured: k = ani["title"]["english"] or ani["title"]["romaji"] kk = ani["type"] if kk=="MANGA": sninml += f" • {k}\n" for ani in featured: kkk = ani["title"]["english"] or ani["title"]["romaji"] kkkk = ani["type"] if kkkk=="ANIME": sninal += f" • {kkk}\n" sninal += "\n" sninm = " `MANGAS`\n" if len(sninml)!=0 else "" snina = " `ANIMES`\n" if len(sninal)!=0 else "" snin = f"\n{snina}{sninal}{sninm}{sninml}" sp = 0 cntnt = "" for cf in featured: out = "<br>" out += f"""<img src="{cf['coverImage']['extraLarge']}"/>""" out += "<br>" title = cf["title"]["english"] or cf["title"]["romaji"] out += f"<h3>{title}</h3>" out += f"<em>[🇯🇵] {cf['title']['native']}</em><br>" out += f"""<a href="{cf['siteUrl']}>{cf['type']}</a><br>""" out += f"<b>Media ID:</b> {cf['id']}<br>" out += f"<b>SCORE:</b> {cf['averageScore']}/100<br>" out += cf.get("description", "N/A") + "<br>" cntnt += out sp += 1 out = "" if sp > 5: break html_cntnt = f"<img src='{img}' title={name}/>" html_cntnt += f"<h1>[🇯🇵] {native}</h1>" html_cntnt += "<h3>About Character:</h3>" html_cntnt += description html_cntnt += "<br>" if cntnt: html_cntnt += "<h2>Top Featured Anime</h2>" html_cntnt += cntnt html_cntnt += "<br><br>" url_ = post_to_tp(name, html_cntnt) cap_text = f"""[🇯🇵] __{native}__ (`{name}`) **ID:** {id_} **Featured in:** __{snin}__ [About Character]({url_}) [Visit Website]({site_url})""" return img, cap_text
async def get_ani(vars_): result = await return_json_senpai(ANIME_QUERY, vars_) error = result.get("errors") if error: await CLOG.log(f"**ANILIST RETURNED FOLLOWING ERROR:**\n\n`{error}`") error_sts = error[0].get("message") return [f"[{error_sts}]"] data = result["data"]["Media"] # Data of all fields in returned json # pylint: disable=possibly-unused-variable idm = data.get("id") idmal = data.get("idMal") romaji = data["title"]["romaji"] english = data["title"]["english"] native = data["title"]["native"] formats = data.get("format") status = data.get("status") episodes = data.get("episodes") synopsis = data.get("description") duration = data.get("duration") country = data.get("countryOfOrigin") c_flag = cflag.flag(country) source = data.get("source") prqlsql = data.get("relations").get('edges') bannerImg = data.get("bannerImage") s_date = data.get("startDate") adult = data.get("isAdult") trailer_link = "N/A" if data["title"]["english"] is not None: name = f'''[{c_flag}]**{romaji}** __{english}__ {native}''' else: name = f'''[{c_flag}]**{romaji}** {native}''' prql, prql_id, sql, sql_id = "", "None", "", "None" for i in prqlsql: if i['relationType']=="PREQUEL": pname = i["node"]["title"]["english"] if i["node"]["title"]["english"] is not None else i["node"]["title"]["romaji"] prql += f"**PREQUEL:** `{pname}`\n" prql_id = f"{i['node']['id']}" break for i in prqlsql: if i['relationType']=="SEQUEL": sname = i["node"]["title"]["english"] if i["node"]["title"]["english"] is not None else i["node"]["title"]["romaji"] sql += f"**SEQUEL:** `{sname}`\n" sql_id = f"{i['node']['id']}" break additional = f"{prql}{sql}" dura = f"\n➤ **DURATION:** `{duration} min/ep`" if duration!=None else "" charlist = [] for char in data["characters"]["nodes"]: charlist.append(f" •{char['name']['full']}") chrctrs = "\n" chrctrs += ("\n").join(charlist[:10]) chrctrsls = f"\n➤ **CHARACTERS:** `{chrctrs}`" if len(charlist)!=0 else "" air_on = None if data["nextAiringEpisode"]: nextAir = data["nextAiringEpisode"]["airingAt"] air_on = make_it_rw(nextAir) eps = data['nextAiringEpisode']['episode'] ep_ = list(str(eps)) x = ep_.pop() th = "th" if len(ep_)>=1: if ep_.pop()!="1": th = pos_no(x) else: th = pos_no(x) air_on += f" | {eps}{th} eps" if air_on==None: eps_ = f" | {episodes} eps" if episodes!=None else "" status_air = f"➤ <b>STATUS:</b> `{status}{eps_}`" else: status_air = f"➤ <b>STATUS:</b> `{status}`\n➤ <b>NEXT AIRING:</b> `{air_on}`" if data["trailer"] and data["trailer"]["site"] == "youtube": trailer_link = f"[Trailer](https://youtu.be/{data['trailer']['id']})" html_char = "" for character in data["characters"]["nodes"]: html_ = "" html_ += "<br>" html_ += f"""<a href="{character['siteUrl']}">""" html_ += f"""<img src="{character['image']['large']}"/></a>""" html_ += "<br>" html_ += f"<h3>{character['name']['full']}</h3>" html_ += f"<em>{c_flag} {character['name']['native']}</em><br>" html_ += f"<b>Character ID</b>: {character['id']}<br>" html_ += ( f"<h4>About Character and Role:</h4>{character.get('description', 'N/A')}" ) html_char += f"{html_}<br><br>" studios = "".join("<a href='{}'>• {}</a> ".format(studio["siteUrl"], studio["name"]) for studio in data["studios"]["nodes"]) url = data.get("siteUrl") title_img = f"https://img.anili.st/media/{idm}" # Telegraph Post mejik html_pc = "" html_pc += f"<img src='{title_img}' title={romaji}/>" html_pc += f"<h1>[{c_flag}] {native}</h1>" html_pc += "<h3>Synopsis:</h3>" html_pc += synopsis html_pc += "<br>" if html_char: html_pc += "<h2>Main Characters:</h2>" html_pc += html_char html_pc += "<br><br>" html_pc += "<h3>More Info:</h3>" html_pc += f"<b>Started On:</b> {s_date['day']}/{s_date['month']}/{s_date['year']}" html_pc += f"<br><b>Studios:</b> {studios}<br>" html_pc += f"<a href='https://myanimelist.net/anime/{idmal}'>View on MAL</a>" html_pc += f"<a href='{url}'> View on anilist.co</a>" html_pc += f"<img src='{bannerImg}'/>" title_h = english or romaji synopsis_link = post_to_tp(title_h, html_pc) try: finals_ = ANIME_TEMPLATE.format(**locals()) except KeyError as kys: return [f"{kys}"] return title_img, finals_, prql_id, sql_id, adult, romaji, idm
async def character_search(message: Message): """ Get Info about a Character """ query = message.input_str if not query: await message.err("NameError: 'query' not defined") return var = {"search": query, "asHtml": True} result = await return_json_senpai(CHARACTER_QUERY, var) error = result.get("errors") if error: await CLOG.log(f"**ANILIST RETURNED FOLLOWING ERROR:**\n\n`{error}`") error_sts = error[0].get("message") await message.err(f"[{error_sts}]") return data = result["data"]["Character"] # Character Data id_ = data["id"] name = data["name"]["full"] native = data["name"]["native"] img = data["image"]["large"] site_url = data["siteUrl"] description = data["description"] featured = data["media"]["nodes"] sp = 0 cntnt = "" for cf in featured: out = "<br>" out += f"""<img src="{cf['coverImage']['extraLarge']}"/>""" out += "<br>" title = cf["title"]["english"] or cf["title"]["romaji"] out += f"<h3>{title}</h3>" out += f"<em>[🇯🇵] {cf['title']['native']}</em><br>" out += f"""<a href="{cf['siteUrl']}>{cf['type']}</a><br>""" out += f"<b>Media ID:</b> {cf['id']}<br>" out += f"<b>SCORE:</b> {cf['averageScore']}/100<br>" out += cf.get("description", "N/A") + "<br>" cntnt += out sp += 1 out = "" if sp > 5: break html_cntnt = f"<img src='{img}' title={name}/>" html_cntnt += f"<h1>[🇯🇵] {native}</h1>" html_cntnt += "<h3>About Character:</h3>" html_cntnt += description html_cntnt += "<br>" if cntnt: html_cntnt += "<h2>Top Featured Anime</h2>" html_cntnt += cntnt html_cntnt += "<br><br>" url_ = post_to_tp(name, html_cntnt) cap_text = f"""[🇯🇵] __{native}__ (`{name}`) **ID:** {id_} [About Character]({url_}) [Visit Website]({site_url})""" await message.reply_photo(img, caption=cap_text) await message.delete()
async def anim_arch(message: Message): """ Search Anime Info """ query = message.filtered_input_str if not query: await message.err("NameError: 'query' not defined") return vars_ = {"search": query, "asHtml": True, "type": "ANIME"} if query.isdigit(): vars_ = {"id": int(query), "asHtml": True, "type": "ANIME"} if "-mid" in message.flags: vars_ = {"idMal": int(query), "asHtml": True, "type": "ANIME"} result = await return_json_senpai(ANIME_QUERY, vars_) error = result.get("errors") if error: await CLOG.log(f"**ANILIST RETURNED FOLLOWING ERROR:**\n\n`{error}`") error_sts = error[0].get("message") await message.err(f"[{error_sts}]") return data = result["data"]["Media"] # Data of all fields in returned json # pylint: disable=possibly-unused-variable idm = data.get("id") idmal = data.get("idMal") romaji = data["title"]["romaji"] english = data["title"]["english"] native = data["title"]["native"] formats = data.get("format") status = data.get("status") synopsis = data.get("description") season = data.get("season") episodes = data.get("episodes") duration = data.get("duration") country = data.get("countryOfOrigin") c_flag = cflag.flag(country) source = data.get("source") coverImg = data.get("coverImage")["extraLarge"] bannerImg = data.get("bannerImage") genres = data.get("genres") genre = genres[0] if len(genres) != 1: genre = ", ".join(genres) score = data.get("averageScore") air_on = None if data["nextAiringEpisode"]: nextAir = data["nextAiringEpisode"]["airingAt"] air_on = make_it_rw(nextAir) s_date = data.get("startDate") adult = data.get("isAdult") trailer_link = "N/A" if data["trailer"] and data["trailer"]["site"] == "youtube": trailer_link = f"[Trailer](https://youtu.be/{data['trailer']['id']})" html_char = "" for character in data["characters"]["nodes"]: html_ = "" html_ += "<br>" html_ += f"""<a href="{character['siteUrl']}">""" html_ += f"""<img src="{character['image']['large']}"/></a>""" html_ += "<br>" html_ += f"<h3>{character['name']['full']}</h3>" html_ += f"<em>{c_flag} {character['name']['native']}</em><br>" html_ += f"<b>Character ID</b>: {character['id']}<br>" html_ += ( f"<h4>About Character and Role:</h4>{character.get('description', 'N/A')}" ) html_char += f"{html_}<br><br>" studios = "" for studio in data["studios"]["nodes"]: studios += "<a href='{}'>• {}</a> ".format(studio["siteUrl"], studio["name"]) url = data.get("siteUrl") title_img = coverImg or bannerImg # Telegraph Post mejik html_pc = "" html_pc += f"<img src='{title_img}' title={romaji}/>" html_pc += f"<h1>[{c_flag}] {native}</h1>" html_pc += "<h3>Synopsis:</h3>" html_pc += synopsis html_pc += "<br>" if html_char: html_pc += "<h2>Main Characters:</h2>" html_pc += html_char html_pc += "<br><br>" html_pc += "<h3>More Info:</h3>" html_pc += f"<b>Started On:</b> {s_date['day']}/{s_date['month']}/{s_date['year']}" html_pc += f"<br><b>Studios:</b> {studios}<br>" html_pc += f"<a href='https://myanimelist.net/anime/{idmal}'>View on MAL</a>" html_pc += f"<a href='{url}'> View on anilist.co</a>" html_pc += f"<img src='{bannerImg}'/>" title_h = english or romaji synopsis_link = post_to_tp(title_h, html_pc) try: finals_ = ANIME_TEMPLATE.format(**locals()) except KeyError as kys: await message.err(kys) return if "-wp" in message.flags: finals_ = f"[\u200b]({title_img}) {finals_}" await message.edit(finals_) return await message.reply_photo(title_img, caption=finals_) await message.delete()