2024-07-23 17:31:23 +01:00
|
|
|
from manga_api import Manga, Chapter
|
2024-07-23 00:32:44 +01:00
|
|
|
import discord
|
2024-07-23 02:42:08 +01:00
|
|
|
import os.path
|
|
|
|
|
|
|
|
|
|
import requests
|
2024-07-23 14:19:45 +01:00
|
|
|
from util import parallel_downloads
|
2024-07-23 00:32:44 +01:00
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
prev_label = "Prev"
|
|
|
|
|
next_label = "Next"
|
2024-07-24 22:19:38 +01:00
|
|
|
add_label = "Add"
|
|
|
|
|
remove_label = "Remove"
|
2024-07-24 14:16:51 +01:00
|
|
|
|
2024-07-23 00:32:44 +01:00
|
|
|
|
|
|
|
|
class ListManga(discord.ui.View):
|
2024-07-24 22:19:38 +01:00
|
|
|
def __init__(self, manga_list: list[Manga], user_manga_list: list[Manga]):
|
2024-07-23 00:32:44 +01:00
|
|
|
super().__init__()
|
2024-07-24 22:19:38 +01:00
|
|
|
self.user_manga_list = user_manga_list
|
2024-07-23 00:32:44 +01:00
|
|
|
self.ret = []
|
|
|
|
|
self.index = 0
|
|
|
|
|
self.manga_list = manga_list
|
2024-07-24 20:28:19 +01:00
|
|
|
self.thumbnail_files: list[str] = gen_manga_files(self.manga_list)
|
2024-07-24 14:16:51 +01:00
|
|
|
self.comp = self.children
|
2024-07-24 22:19:38 +01:00
|
|
|
self.prev_button: discord.Button = None
|
|
|
|
|
self.next_button: discord.Button = None
|
|
|
|
|
self.add_button: discord.Button = None
|
|
|
|
|
self.remove_button: discord.Button = None
|
|
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
for comp in self.comp:
|
|
|
|
|
if comp.type.name == "button":
|
|
|
|
|
button: discord.Button = comp
|
|
|
|
|
if button.label == prev_label:
|
2024-07-24 22:19:38 +01:00
|
|
|
self.prev_button = button
|
2024-07-24 14:16:51 +01:00
|
|
|
if button.label == next_label:
|
2024-07-24 22:19:38 +01:00
|
|
|
self.next_button = button
|
|
|
|
|
if button.label == add_label:
|
|
|
|
|
self.add_button = button
|
|
|
|
|
if button.label == remove_label:
|
|
|
|
|
self.remove_button = button
|
2024-07-24 14:16:51 +01:00
|
|
|
self.msg: discord.Message = None
|
|
|
|
|
print(self.manga_list)
|
|
|
|
|
|
|
|
|
|
def set_msg(self, msg):
|
|
|
|
|
self.msg = msg
|
|
|
|
|
|
|
|
|
|
async def update_buttons(self):
|
2024-07-24 22:19:38 +01:00
|
|
|
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
|
2024-07-23 14:19:45 +01:00
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
|
2024-07-23 00:32:44 +01:00
|
|
|
|
|
|
|
|
async def print_manga(self, interaction: discord.Interaction):
|
2024-07-24 14:16:51 +01:00
|
|
|
|
2024-07-23 00:32:44 +01:00
|
|
|
await interaction.response.defer()
|
|
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
await self.update_buttons()
|
|
|
|
|
|
2024-07-24 23:07:10 +01:00
|
|
|
await interaction.message.edit(
|
|
|
|
|
embed=await manga_embed(self.manga_list, self.index),
|
|
|
|
|
attachments=[
|
|
|
|
|
parallel_downloads.discord_file_from_filename(self.thumbnail_files[self.index])
|
|
|
|
|
],
|
|
|
|
|
view=self
|
|
|
|
|
)
|
2024-07-24 03:24:11 +01:00
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
@discord.ui.button(label=prev_label, style=discord.ButtonStyle.grey)
|
2024-07-23 00:32:44 +01:00
|
|
|
async def previous(self, interaction: discord.Interaction, button: discord.ui.Button):
|
2024-07-24 22:19:38 +01:00
|
|
|
self.prev_button = button
|
2024-07-23 00:32:44 +01:00
|
|
|
if self.index > 0:
|
|
|
|
|
self.index -= 1
|
2024-07-24 14:16:51 +01:00
|
|
|
print("cant go anymore back")
|
2024-07-23 00:32:44 +01:00
|
|
|
|
|
|
|
|
await self.print_manga(interaction)
|
|
|
|
|
|
2024-07-24 14:16:51 +01:00
|
|
|
@discord.ui.button(label=next_label, style=discord.ButtonStyle.grey)
|
2024-07-23 00:32:44 +01:00
|
|
|
async def next(self, interaction: discord.Interaction, button: discord.ui.Button):
|
2024-07-24 22:19:38 +01:00
|
|
|
self.next_button = button
|
2024-07-24 03:24:11 +01:00
|
|
|
if self.index < len(self.manga_list) - 1:
|
2024-07-23 00:32:44 +01:00
|
|
|
self.index += 1
|
|
|
|
|
|
|
|
|
|
await self.print_manga(interaction)
|
|
|
|
|
|
2024-07-24 22:19:38 +01:00
|
|
|
@discord.ui.button(label=add_label, style=discord.ButtonStyle.green)
|
2024-07-23 00:32:44 +01:00
|
|
|
async def add(self, interaction: discord.Interaction, button: discord.ui.Button):
|
2024-07-23 17:42:36 +01:00
|
|
|
self.ret.append({"manga": self.manga_list[self.index].id, "action": 1})
|
2024-07-24 22:19:38 +01:00
|
|
|
if self.manga_list[self.index] not in self.user_manga_list:
|
|
|
|
|
self.user_manga_list.append(self.manga_list[self.index])
|
2024-07-23 00:32:44 +01:00
|
|
|
|
2024-07-24 22:19:38 +01:00
|
|
|
await self.print_manga(interaction)
|
|
|
|
|
|
|
|
|
|
@discord.ui.button(label=remove_label, style=discord.ButtonStyle.red)
|
2024-07-23 00:32:44 +01:00
|
|
|
async def remove(self, interaction: discord.Interaction, button: discord.ui.Button):
|
2024-07-23 17:42:36 +01:00
|
|
|
self.ret.append({"manga": self.manga_list[self.index].id, "action": -1})
|
2024-07-24 22:19:38 +01:00
|
|
|
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)
|
2024-07-23 00:32:44 +01:00
|
|
|
|
|
|
|
|
@discord.ui.button(label='Done', style=discord.ButtonStyle.blurple)
|
|
|
|
|
async def exit(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
|
|
|
if len(self.ret) > 0:
|
|
|
|
|
await interaction.response.send_message("Your list has been altered successfully", ephemeral=True)
|
|
|
|
|
else:
|
|
|
|
|
await interaction.response.send_message("You didn't make any changes", ephemeral=True)
|
|
|
|
|
self.stop()
|
|
|
|
|
|
|
|
|
|
|
2024-07-23 13:35:34 +01:00
|
|
|
def gen_manga_files(manga_list: list[Manga]):
|
2024-07-23 14:19:45 +01:00
|
|
|
return parallel_downloads.parallel_download(manga_list)
|
2024-07-23 02:42:08 +01:00
|
|
|
|
|
|
|
|
|
2024-07-24 23:07:10 +01:00
|
|
|
async def manga_embed(manga_list: list[Manga], index: int):
|
2024-07-24 20:28:19 +01:00
|
|
|
manga = manga_list[index]
|
2024-07-24 22:19:38 +01:00
|
|
|
e = discord.Embed(title=f"({index + 1}\\{len(manga_list)}) {manga.get_title()}",
|
|
|
|
|
description=manga.get_description(), url=manga.get_url())
|
2024-07-24 23:07:10 +01:00
|
|
|
extension = await manga.get_cover_art_extension()
|
2024-07-24 20:28:19 +01:00
|
|
|
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
|
|
|
|
|
|
|
|
|
|
return e
|
|
|
|
|
|
2024-07-24 22:19:38 +01:00
|
|
|
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()
|
|
|
|
|
)
|
2024-07-23 02:42:08 +01:00
|
|
|
|
2024-07-23 00:32:44 +01:00
|
|
|
return e
|
2024-07-23 17:31:23 +01:00
|
|
|
|
|
|
|
|
|
2024-07-24 20:28:19 +01:00
|
|
|
def get_chapter_filenames(manga: Manga):
|
2024-07-23 17:31:23 +01:00
|
|
|
return parallel_downloads.parallel_download([manga])
|
|
|
|
|
|
|
|
|
|
|
2024-07-24 23:07:10 +01:00
|
|
|
async def chapter_embed(manga: Manga, chapter: Chapter):
|
2024-07-24 03:24:11 +01:00
|
|
|
volume_info = f"Volume {chapter.get_volume()}" if chapter.get_volume() else ""
|
2024-07-24 23:07:10 +01:00
|
|
|
chapter_title = f"\"{chapter.get_title()}\" " if chapter.get_title() else ""
|
2024-07-23 17:31:23 +01:00
|
|
|
e = discord.Embed(
|
2024-07-24 23:07:10 +01:00
|
|
|
title=f'"{manga.get_title()}" Chapter {chapter_title}Released!',
|
2024-07-24 03:24:11 +01:00
|
|
|
description=f"{volume_info} Chapter {chapter.get_number()} of {manga.get_title()} Released."
|
2024-07-23 20:20:06 +01:00
|
|
|
f"\nGo read it now!",
|
2024-07-24 02:20:06 +01:00
|
|
|
url=chapter.get_url()
|
2024-07-23 17:31:23 +01:00
|
|
|
)
|
2024-07-24 23:07:10 +01:00
|
|
|
e.set_thumbnail(url=f"attachment://{manga.id}.{await manga.get_cover_art_extension()}")
|
2024-07-23 20:20:06 +01:00
|
|
|
return e
|