performance update

This commit is contained in:
AF 2022-12-20 02:18:49 +00:00
parent 39cf4f1691
commit f4dcc1a03a
5 changed files with 19 additions and 11 deletions

View File

@ -1,3 +1,4 @@
aiohttp>=3.7.4,<4
discord.py[voice]~=2.1.0
youtube_dl~=2021.12.17
yt-dlp~=2022.11.11

View File

@ -13,16 +13,20 @@ ResponseType: TypeAlias = list | dict | float | str | None
class Api:
class MisusedApi(KeyError):
def json(self) -> ResponseType:
def json(self) -> dict:
return {'error': list(map(str, self.args)), 'errormessage': str(self)}
class UnknownApi(MisusedApi):
pass
def json(self) -> dict:
return super().json() | {'unknownapi': None}
class ExplicitFailure(MisusedApi):
def __init__(self, explicit: Explicit) -> None:
super().__init__(*explicit.args)
def json(self) -> dict:
return super().json() | {'explicit': None}
def __init__(self, client: discord.Client, roles: dict[str, str]) -> None:
self.client = client
self.roles = roles
@ -36,7 +40,8 @@ class Api:
class UserApi:
class UnknownMember(Api.MisusedApi):
pass
def json(self) -> dict:
return super().json() | {'unknownmember': None}
def __init__(self, api: Api, request: dict, user_id: int) -> None:
self.pi = api
@ -118,7 +123,8 @@ class UserApi:
class GuildApi(UserApi):
class VoiceNotConnected(Api.MisusedApi):
pass
def json(self) -> dict:
return super().json() | {'notconnected': None}
def __init__(self, api: UserApi, member: discord.Member) -> None:
super().__init__(api.pi, api.request, member.id)
@ -199,6 +205,8 @@ class MainApi(VoiceApi):
return self.main.volume
case {'type': 'playing'}:
return self.vc.is_playing()
case {'type': 'paused'}:
return self.vc.is_paused()
case {'type': 'queueformat'}:
return await self.main.queue.format()
case {'type': 'queuejson'}:

View File

@ -1,13 +1,11 @@
import asyncio
from concurrent.futures import ProcessPoolExecutor
from v6d2ctx.context import Benchmark
from concurrent.futures import ThreadPoolExecutor
from v6d3music.utils.extract import extract
async def aextract(params: dict, url: str, **kwargs):
with ProcessPoolExecutor() as pool:
with ThreadPoolExecutor() as pool:
return await asyncio.get_running_loop().run_in_executor(
pool,
extract,

View File

@ -14,7 +14,6 @@ async def entries_for_url(url: str, tor: bool) -> AsyncIterable[
ef = tor_extract
info = await ef(
{
'playlistend': 128,
'logtostderr': True
},
url,

View File

@ -1,10 +1,12 @@
import discord.utils
import youtube_dl
import yt_dlp
def extract(params: dict, url: str, kwargs: dict):
try:
extracted = youtube_dl.YoutubeDL(params=params).extract_info(url, **kwargs)
extracted = yt_dlp.YoutubeDL(params=params).extract_info(url, **kwargs)
if not isinstance(extracted, dict):
raise TypeError
if 'entries' in extracted:
extracted['entries'] = list(extracted['entries'])
return extracted