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