changing request to use asyncio
This commit is contained in:
parent
9408d4b8d6
commit
2a0941643c
|
|
@ -7,25 +7,35 @@ from util import parallel_downloads
|
|||
|
||||
prev_label = "Prev"
|
||||
next_label = "Next"
|
||||
add_label = "Add"
|
||||
remove_label = "Remove"
|
||||
|
||||
|
||||
class ListManga(discord.ui.View):
|
||||
def __init__(self, manga_list: list[Manga]):
|
||||
def __init__(self, manga_list: list[Manga], user_manga_list: list[Manga]):
|
||||
super().__init__()
|
||||
self.user_manga_list = user_manga_list
|
||||
self.ret = []
|
||||
self.index = 0
|
||||
self.manga_list = manga_list
|
||||
self.thumbnail_files: list[str] = gen_manga_files(self.manga_list)
|
||||
self.comp = self.children
|
||||
self.prev: discord.Button = None
|
||||
self.next: discord.Button = None
|
||||
self.prev_button: discord.Button = None
|
||||
self.next_button: discord.Button = None
|
||||
self.add_button: discord.Button = None
|
||||
self.remove_button: discord.Button = None
|
||||
|
||||
for comp in self.comp:
|
||||
if comp.type.name == "button":
|
||||
button: discord.Button = comp
|
||||
if button.label == prev_label:
|
||||
self.prev = button
|
||||
self.prev_button = button
|
||||
if button.label == next_label:
|
||||
self.next = button
|
||||
self.next_button = button
|
||||
if button.label == add_label:
|
||||
self.add_button = button
|
||||
if button.label == remove_label:
|
||||
self.remove_button = button
|
||||
self.msg: discord.Message = None
|
||||
print(self.manga_list)
|
||||
|
||||
|
|
@ -33,17 +43,16 @@ class ListManga(discord.ui.View):
|
|||
self.msg = msg
|
||||
|
||||
async def update_buttons(self):
|
||||
self.prev.disabled = self.index == 0
|
||||
self.next.disabled = self.index == len(self.manga_list) - 1
|
||||
|
||||
print(f"index: {self.index}, prev: {self.prev.disabled}, next {self.next.disabled}")
|
||||
|
||||
self.prev_button.disabled = self.index == 0
|
||||
self.next_button.disabled = self.index == len(self.manga_list) - 1
|
||||
self.add_button.disabled = self.manga_list[self.index] in self.user_manga_list
|
||||
self.remove.disabled = self.manga_list[self.index] not in self.user_manga_list
|
||||
|
||||
async def force_reload(self):
|
||||
await self.update_buttons()
|
||||
|
||||
self.msg = await self.msg.edit(
|
||||
embed=manga_embed(self.manga_list[self.index]),
|
||||
embed=manga_embed(self.manga_list, self.index),
|
||||
attachments=[
|
||||
parallel_downloads.discord_file_from_filename(self.thumbnail_files[self.index])
|
||||
],
|
||||
|
|
@ -60,7 +69,7 @@ class ListManga(discord.ui.View):
|
|||
|
||||
@discord.ui.button(label=prev_label, style=discord.ButtonStyle.grey)
|
||||
async def previous(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
self.prev = button
|
||||
self.prev_button = button
|
||||
if self.index > 0:
|
||||
self.index -= 1
|
||||
print("cant go anymore back")
|
||||
|
|
@ -69,21 +78,27 @@ class ListManga(discord.ui.View):
|
|||
|
||||
@discord.ui.button(label=next_label, style=discord.ButtonStyle.grey)
|
||||
async def next(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
self.next = button
|
||||
self.next_button = button
|
||||
if self.index < len(self.manga_list) - 1:
|
||||
self.index += 1
|
||||
|
||||
await self.print_manga(interaction)
|
||||
|
||||
@discord.ui.button(label='Add', style=discord.ButtonStyle.green)
|
||||
@discord.ui.button(label=add_label, style=discord.ButtonStyle.green)
|
||||
async def add(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await interaction.response.defer()
|
||||
self.ret.append({"manga": self.manga_list[self.index].id, "action": 1})
|
||||
if self.manga_list[self.index] not in self.user_manga_list:
|
||||
self.user_manga_list.append(self.manga_list[self.index])
|
||||
|
||||
@discord.ui.button(label='Remove', style=discord.ButtonStyle.red)
|
||||
await self.print_manga(interaction)
|
||||
|
||||
@discord.ui.button(label=remove_label, style=discord.ButtonStyle.red)
|
||||
async def remove(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
await interaction.response.defer()
|
||||
self.ret.append({"manga": self.manga_list[self.index].id, "action": -1})
|
||||
if self.manga_list[self.index] in self.user_manga_list:
|
||||
self.user_manga_list.remove(self.manga_list[self.index])
|
||||
|
||||
await self.print_manga(interaction)
|
||||
|
||||
@discord.ui.button(label='Done', style=discord.ButtonStyle.blurple)
|
||||
async def exit(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
|
@ -98,18 +113,23 @@ def gen_manga_files(manga_list: list[Manga]):
|
|||
return parallel_downloads.parallel_download(manga_list)
|
||||
|
||||
|
||||
def manga_list_embed(manga_list: list[Manga], index: int):
|
||||
def manga_embed(manga_list: list[Manga], index: int):
|
||||
manga = manga_list[index]
|
||||
e = discord.Embed(title=f"({index+1}\\{len(manga_list)}) {manga.get_title()}", description=manga.get_description(), url=manga.get_url())
|
||||
e = discord.Embed(title=f"({index + 1}\\{len(manga_list)}) {manga.get_title()}",
|
||||
description=manga.get_description(), url=manga.get_url())
|
||||
extension = manga.get_cover_art_extension()
|
||||
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
|
||||
|
||||
return e
|
||||
|
||||
def manga_embed(manga: Manga):
|
||||
e = discord.Embed(title=manga.get_title(), description=manga.get_description(), url=manga.get_url())
|
||||
extension = manga.get_cover_art_extension()
|
||||
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
|
||||
def manga_list_embed(manga_list: list[Manga]):
|
||||
e = discord.Embed(
|
||||
title=f"Here's The Manga That Match Your Query ({len(manga_list)} Items)",
|
||||
description="".join(
|
||||
[f"{index+1} - {manga_list[index].get_title()}\n" for index in range(len(manga_list))]
|
||||
),
|
||||
color=discord.Color.blurple()
|
||||
)
|
||||
|
||||
return e
|
||||
|
||||
|
|
@ -118,7 +138,6 @@ def get_chapter_filenames(manga: Manga):
|
|||
return parallel_downloads.parallel_download([manga])
|
||||
|
||||
|
||||
|
||||
def chapter_embed(manga: Manga, chapter: Chapter):
|
||||
volume_info = f"Volume {chapter.get_volume()}" if chapter.get_volume() else ""
|
||||
chapter_title = f"{chapter.get_title()}" if chapter.get_title() else ""
|
||||
|
|
|
|||
12
main.py
12
main.py
|
|
@ -37,13 +37,12 @@ async def render_manga_list_in_dm(interaction: discord.Interaction, manga_list:
|
|||
await chanel.send("No Manga in Here")
|
||||
return
|
||||
|
||||
view = embed_util.ListManga(manga_list)
|
||||
msg = await chanel.send(view=view, embed=embed_util.manga_embed(manga_list[0]))
|
||||
list_msg = await interaction.followup.send(embed=embed_util.manga_list_embed(manga_list))
|
||||
view = embed_util.ListManga(manga_list, await man.get_user_mangas(interaction.user))
|
||||
msg = await interaction.followup.send(view=view, embed=embed_util.manga_embed(manga_list, 0))
|
||||
view.set_msg(msg)
|
||||
await view.force_reload()
|
||||
|
||||
await interaction.followup.send("Query done, Check your DM's")
|
||||
|
||||
await view.wait()
|
||||
|
||||
print("Done.. Checking Returns")
|
||||
|
|
@ -59,6 +58,7 @@ async def render_manga_list_in_dm(interaction: discord.Interaction, manga_list:
|
|||
man.remove_user_from_manga(interaction.user, manga_api.Manga(manga_id))
|
||||
|
||||
await msg.delete()
|
||||
await list_msg.delete()
|
||||
await man.update()
|
||||
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ async def search_command(
|
|||
):
|
||||
await interaction.response.defer()
|
||||
|
||||
await render_manga_list_in_dm(interaction, mh.search(title))
|
||||
await render_manga_list_in_dm(interaction, await mh.search(title))
|
||||
|
||||
|
||||
@tree.command(
|
||||
|
|
@ -83,7 +83,7 @@ async def search_command(
|
|||
async def list_command(interaction: discord.Interaction):
|
||||
await interaction.response.defer()
|
||||
|
||||
await render_manga_list_in_dm(interaction, man.get_user_mangas(interaction.user))
|
||||
await render_manga_list_in_dm(interaction, await man.get_user_mangas(interaction.user))
|
||||
|
||||
|
||||
@tasks.loop(minutes=5)
|
||||
|
|
|
|||
16
manager.py
16
manager.py
|
|
@ -17,14 +17,14 @@ class Manager:
|
|||
|
||||
self.load()
|
||||
|
||||
def get_user_mangas(self, user: discord.User) -> list[manga_api.Manga]:
|
||||
async def get_user_mangas(self, user: discord.User) -> list[manga_api.Manga]:
|
||||
manga_ids = []
|
||||
|
||||
for manga_id in self.manga.keys():
|
||||
if user.id in self.manga[manga_id]:
|
||||
manga_ids.append(manga_id)
|
||||
|
||||
return [manga_api.Manga(manga_id) for manga_id in manga_ids]
|
||||
return [await manga_api.Manga.init(manga_id) for manga_id in manga_ids]
|
||||
|
||||
def add_user_to_manga(self, user: discord.User, manga: manga_api.Manga) -> None:
|
||||
if manga.id in self.manga.keys():
|
||||
|
|
@ -36,13 +36,15 @@ class Manager:
|
|||
if manga.id in self.manga.keys():
|
||||
if user.id in self.manga[manga.id]:
|
||||
self.manga[manga.id].remove(user.id)
|
||||
if len(self.manga[manga.id]) == 0:
|
||||
self.manga.pop(manga.id)
|
||||
else:
|
||||
self.manga[manga.id] = []
|
||||
|
||||
async def update(self):
|
||||
for manga_id in self.manga.keys():
|
||||
manga = manga_api.Manga(manga_id)
|
||||
new_chap = self.check_for_new_chapter(manga)
|
||||
manga = await manga_api.Manga.init(manga_id)
|
||||
new_chap = await self.check_for_new_chapter(manga)
|
||||
if new_chap is not None:
|
||||
users = self.manga[manga_id]
|
||||
print(users)
|
||||
|
|
@ -50,14 +52,14 @@ class Manager:
|
|||
await self.send_message_to_user(await self.client.fetch_user(userid), manga, new_chap)
|
||||
self.save()
|
||||
|
||||
def check_for_new_chapter(self, manga: manga_api.Manga) -> manga_api.Chapter | None:
|
||||
latest_chap = manga.get_latest_chap()
|
||||
async def check_for_new_chapter(self, manga: manga_api.Manga) -> manga_api.Chapter | None:
|
||||
latest_chap = await manga.get_latest_chap()
|
||||
print("Comparing Chapters...")
|
||||
|
||||
if manga.id not in self.chapters.keys():
|
||||
self.chapters[manga.id] = latest_chap.id
|
||||
return latest_chap
|
||||
old_chap = manga_api.Chapter(self.chapters[manga.id])
|
||||
old_chap = await manga_api.Chapter.init(self.chapters[manga.id])
|
||||
|
||||
print(f"Latest Chap ID: {latest_chap.id}, Old Chap ID: {self.chapters[manga.id]}")
|
||||
print(f"Latest Chap: {latest_chap.get_volume()}:{latest_chap.get_number()}")
|
||||
|
|
|
|||
34
manga_api.py
34
manga_api.py
|
|
@ -1,6 +1,8 @@
|
|||
import os
|
||||
from dotenv import load_dotenv
|
||||
import requests
|
||||
import asyncio
|
||||
|
||||
|
||||
load_dotenv()
|
||||
|
||||
|
|
@ -15,7 +17,13 @@ class Chapter:
|
|||
|
||||
self.update_data()
|
||||
|
||||
def update_data(self):
|
||||
@classmethod
|
||||
async def init(cls, id: str , _base_url=base_url):
|
||||
self = cls(id, _base_url)
|
||||
await self.update_data()
|
||||
return self
|
||||
|
||||
async def update_data(self):
|
||||
r = requests.get(
|
||||
f"{self.base_url}/chapter/{self.id}"
|
||||
)
|
||||
|
|
@ -46,6 +54,9 @@ class Chapter:
|
|||
"chapter_url": self.get_url()
|
||||
})
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other.id
|
||||
|
||||
|
||||
class Manga:
|
||||
def __init__(self, id: str, _base_url=base_url):
|
||||
|
|
@ -53,9 +64,14 @@ class Manga:
|
|||
self.base_url = _base_url
|
||||
self.data = None
|
||||
|
||||
self.update_data()
|
||||
@classmethod
|
||||
async def init(cls, id: str, _base_url=base_url):
|
||||
self = cls(id, _base_url)
|
||||
await self.update_data()
|
||||
return self
|
||||
|
||||
def update_data(self):
|
||||
|
||||
async def update_data(self):
|
||||
r = requests.get(
|
||||
f"{self.base_url}/manga/{self.id}"
|
||||
)
|
||||
|
|
@ -70,7 +86,7 @@ class Manga:
|
|||
except KeyError:
|
||||
return "No Title"
|
||||
|
||||
def get_latest_chap(self) -> Chapter:
|
||||
async def get_latest_chap(self) -> Chapter:
|
||||
params = {
|
||||
"manga": self.id,
|
||||
"translatedLanguage": ["en"],
|
||||
|
|
@ -134,15 +150,18 @@ class Manga:
|
|||
"title": self.get_title(),
|
||||
"url": self.get_url(),
|
||||
"art_url": self.get_cover_art_url(),
|
||||
"latest_chapter": str(self.get_latest_chap())
|
||||
"latest_chapter": str(asyncio.ensure_future(self.get_latest_chap()))
|
||||
})
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other.id
|
||||
|
||||
|
||||
class MangaHandler:
|
||||
def __init__(self):
|
||||
self.base_url = base_url
|
||||
|
||||
def search(self, title: str) -> list[Manga]:
|
||||
async def search(self, title: str) -> list[Manga]:
|
||||
r = requests.get(
|
||||
f"{self.base_url}/manga",
|
||||
params={"title": title}
|
||||
|
|
@ -157,5 +176,4 @@ class MangaHandler:
|
|||
|
||||
|
||||
if __name__ == "__main__":
|
||||
mh = MangaHandler()
|
||||
print(mh.search("Umineko no Naku Koro ni Episode 4: Alliance of the Golden Witch")[0].get_latest_chap().data)
|
||||
mh = MangaHandler()
|
||||
Loading…
Reference in New Issue