Add anilist planning scanning
This commit is contained in:
parent
05980a4f38
commit
06b2752732
|
@ -1,6 +1,6 @@
|
||||||
import json
|
import json
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from utils import conjugator
|
from utils import conjugator, checks, request
|
||||||
|
|
||||||
|
|
||||||
class Japanese(commands.Cog):
|
class Japanese(commands.Cog):
|
||||||
|
@ -22,6 +22,7 @@ class Japanese(commands.Cog):
|
||||||
self.verbs = verbs
|
self.verbs = verbs
|
||||||
|
|
||||||
@commands.command(aliases=["活用", "かつよう", "katsuyou"])
|
@commands.command(aliases=["活用", "かつよう", "katsuyou"])
|
||||||
|
@checks.can_run(send_messages=True)
|
||||||
async def conjugate(self, ctx, verb):
|
async def conjugate(self, ctx, verb):
|
||||||
"""Conjugate the provided verb. Provide the verb in dictionary form
|
"""Conjugate the provided verb. Provide the verb in dictionary form
|
||||||
|
|
||||||
|
@ -35,6 +36,71 @@ class Japanese(commands.Cog):
|
||||||
|
|
||||||
await verb.display(ctx)
|
await verb.display(ctx)
|
||||||
|
|
||||||
|
@commands.group(invoke_without_command=True)
|
||||||
|
@checks.can_run(send_messages=True)
|
||||||
|
async def anime(self, ctx):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@anime.command(name="planning")
|
||||||
|
@checks.can_run(send_messages=True)
|
||||||
|
async def anime_planning(self, ctx, *, username):
|
||||||
|
"""Searches a user's planning list (ON ANILIST), and provides
|
||||||
|
the top up to 10 results based on the anime's average score
|
||||||
|
|
||||||
|
EXAMPLE: !anime planning User!
|
||||||
|
RESULT: Top 10 results of User!'s planning list based on anime's average score
|
||||||
|
"""
|
||||||
|
query = """
|
||||||
|
query ($name: String) {
|
||||||
|
MediaListCollection(userName:$name, type:ANIME, status:PLANNING, sort:MEDIA_POPULARITY_DESC) {
|
||||||
|
lists {
|
||||||
|
status
|
||||||
|
entries {
|
||||||
|
media {
|
||||||
|
title {
|
||||||
|
english
|
||||||
|
}
|
||||||
|
averageScore
|
||||||
|
status
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
url = "https://graphql.anilist.co"
|
||||||
|
payload = {"query": query, "variables": {"name": username}}
|
||||||
|
|
||||||
|
response = await request(url, method="POST", payload=payload)
|
||||||
|
# Anilist API is broken and doesn't filter correctly, guess we have to do that ourselves
|
||||||
|
data = []
|
||||||
|
|
||||||
|
for x in response.json()["data"]["MediaListCollection"]["lists"]:
|
||||||
|
data.extend(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title": r["media"]["title"]["english"],
|
||||||
|
"score": r["media"]["averageScore"],
|
||||||
|
}
|
||||||
|
for r in x["entries"]
|
||||||
|
if r["media"]["status"] == "FINISHED"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Filtering done, sort it
|
||||||
|
data = sorted(
|
||||||
|
data,
|
||||||
|
key=lambda n: n["score"],
|
||||||
|
reverse=True,
|
||||||
|
)
|
||||||
|
# And convert to a string
|
||||||
|
data = "\n".join(
|
||||||
|
f"**Score**: {x['score']} | **Title**: {x['title']}" for x in data
|
||||||
|
)
|
||||||
|
|
||||||
|
await ctx.send(data)
|
||||||
|
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
bot.add_cog(Japanese())
|
bot.add_cog(Japanese())
|
||||||
|
|
Loading…
Reference in a new issue