Compare commits
11 Commits
f4b7e0f5ce
...
main
Author | SHA1 | Date | |
---|---|---|---|
019e60450f
|
|||
7672107c68
|
|||
ee6ea4eed4
|
|||
fed280e6c5
|
|||
1a8f84b333
|
|||
94bdb91eb0
|
|||
5c030a0557
|
|||
5344e89c26
|
|||
80e6d422e5
|
|||
71fad98d3d
|
|||
83d784c917
|
@@ -21,8 +21,11 @@ class Song:
|
||||
format_duration(self.player.duration) if self.player.duration else "stream"
|
||||
)
|
||||
if multiline:
|
||||
queue_time = (
|
||||
self.trigger_message.edited_at or self.trigger_message.created_at
|
||||
)
|
||||
return f"{title}\n**duration:** {duration}" + (
|
||||
f", **queued by:** <@{self.trigger_message.author.id}>"
|
||||
f", **queued by:** <@{self.trigger_message.author.id}> <t:{round(queue_time.timestamp())}:R>"
|
||||
if show_queuer
|
||||
else ""
|
||||
)
|
||||
@@ -48,18 +51,20 @@ class Song:
|
||||
else "[**stream**]"
|
||||
)
|
||||
),
|
||||
timestamp=self.trigger_message.edited_at or self.trigger_message.created_at,
|
||||
)
|
||||
|
||||
uploader_value = None
|
||||
if self.player.uploader_url:
|
||||
embed.add_field(
|
||||
name="Uploader",
|
||||
value=f"[{self.player.uploader}]({self.player.uploader_url})",
|
||||
)
|
||||
if self.player.uploader:
|
||||
uploader_value = f"[{self.player.uploader}]({self.player.uploader_url})"
|
||||
else:
|
||||
uploader_value = self.player.uploader_url
|
||||
elif self.player.uploader:
|
||||
embed.add_field(
|
||||
name="Uploader",
|
||||
value=self.player.uploader,
|
||||
)
|
||||
uploader_value = self.player.uploader
|
||||
|
||||
if uploader_value:
|
||||
embed.add_field(name="Uploader", value=uploader_value)
|
||||
if self.player.like_count:
|
||||
embed.add_field(name="Likes", value=f"{self.player.like_count:,}")
|
||||
if self.player.view_count:
|
||||
@@ -73,7 +78,7 @@ class Song:
|
||||
embed.set_image(self.player.thumbnail_url)
|
||||
|
||||
embed.set_footer(
|
||||
text=f"queued by {self.trigger_message.author.name}",
|
||||
text=f"Queued by {self.trigger_message.author.name}",
|
||||
icon_url=(
|
||||
self.trigger_message.author.avatar.url
|
||||
if self.trigger_message.author.avatar
|
||||
|
@@ -165,7 +165,7 @@ async def clear(message):
|
||||
tokens = commands.tokenize(message.content)
|
||||
parser = arguments.ArgumentParser(
|
||||
tokens[0],
|
||||
"bulk delete messages in the current channel matching certain criteria",
|
||||
"bulk delete messages in the current channel matching specified criteria",
|
||||
)
|
||||
parser.add_argument(
|
||||
"count",
|
||||
|
@@ -90,13 +90,13 @@ async def pause(message):
|
||||
|
||||
async def fast_forward(message):
|
||||
tokens = commands.tokenize(message.content)
|
||||
parser = arguments.ArgumentParser(tokens[0], "skip current sponsorblock segment")
|
||||
parser = arguments.ArgumentParser(tokens[0], "skip the current sponsorblock segment")
|
||||
parser.add_argument(
|
||||
"-s",
|
||||
"--seconds",
|
||||
nargs="?",
|
||||
type=lambda v: arguments.range_type(v, lower=0, upper=300),
|
||||
help="the amount of seconds to fast forward instead",
|
||||
help="the number of seconds to fast forward instead",
|
||||
)
|
||||
if not (args := await parser.parse_args(message, tokens)):
|
||||
return
|
||||
|
@@ -8,7 +8,7 @@ import audio
|
||||
import commands
|
||||
import utils
|
||||
from constants import EMBED_COLOR
|
||||
from state import client, players
|
||||
from state import client, players, trusted_users
|
||||
|
||||
from .playback import resume
|
||||
from .utils import command_allowed, ensure_joined, play_next
|
||||
@@ -147,6 +147,7 @@ async def queue_or_play(message, edited=False):
|
||||
)
|
||||
>= 5
|
||||
and not len(message.guild.voice_client.channel.members) == 2
|
||||
and message.author.id not in trusted_users
|
||||
):
|
||||
await utils.reply(
|
||||
message,
|
||||
@@ -240,7 +241,7 @@ async def queue_or_play(message, edited=False):
|
||||
|
||||
async def skip(message):
|
||||
tokens = commands.tokenize(message.content)
|
||||
parser = arguments.ArgumentParser(tokens[0], "skip the currently playing song")
|
||||
parser = arguments.ArgumentParser(tokens[0], "skip the song currently playing")
|
||||
parser.add_argument(
|
||||
"-n",
|
||||
"--next",
|
||||
|
27
core.py
27
core.py
@@ -3,6 +3,7 @@ import contextlib
|
||||
import importlib
|
||||
import inspect
|
||||
import io
|
||||
import signal
|
||||
import textwrap
|
||||
import time
|
||||
import traceback
|
||||
@@ -59,17 +60,8 @@ async def on_message(message, edited=False):
|
||||
|
||||
match matched:
|
||||
case C.RELOAD if message.author.id in OWNERS:
|
||||
reloaded_modules = set()
|
||||
start = time.time()
|
||||
|
||||
rreload(reloaded_modules, __import__("core"))
|
||||
rreload(reloaded_modules, __import__("extra"))
|
||||
for module in filter(
|
||||
lambda v: inspect.ismodule(v) and v.__name__ in RELOADABLE_MODULES,
|
||||
globals().values(),
|
||||
):
|
||||
rreload(reloaded_modules, module)
|
||||
|
||||
reloaded_modules = reload()
|
||||
end = time.time()
|
||||
debug(
|
||||
f"reloaded {len(reloaded_modules)} modules in {round(end - start, 2)}s",
|
||||
@@ -186,3 +178,18 @@ def rreload(reloaded_modules, module):
|
||||
|
||||
if "__reload_module__" in dir(module):
|
||||
module.__reload_module__()
|
||||
|
||||
|
||||
def reload(*_):
|
||||
reloaded_modules = set()
|
||||
rreload(reloaded_modules, __import__("core"))
|
||||
rreload(reloaded_modules, __import__("extra"))
|
||||
for module in filter(
|
||||
lambda v: inspect.ismodule(v) and v.__name__ in RELOADABLE_MODULES,
|
||||
globals().values(),
|
||||
):
|
||||
rreload(reloaded_modules, module)
|
||||
return reloaded_modules
|
||||
|
||||
|
||||
signal.signal(signal.SIGUSR1, reload)
|
||||
|
2
main.py
2
main.py
@@ -7,7 +7,7 @@ from state import client
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(
|
||||
format=(
|
||||
"%(asctime)s %(levelname)s %(name):%(module)s %(message)s"
|
||||
"%(asctime)s %(levelname)s %(name)s:%(module)s %(message)s"
|
||||
if __debug__
|
||||
else "%(asctime)s %(levelname)s %(message)s"
|
||||
),
|
||||
|
@@ -5,4 +5,4 @@ disnake_paginator
|
||||
psutil
|
||||
PyNaCl
|
||||
youtube_transcript_api
|
||||
yt-dlp
|
||||
yt-dlp[default] @ https://github.com/yt-dlp/yt-dlp/archive/master.tar.gz
|
||||
|
3
state.py
3
state.py
@@ -15,5 +15,6 @@ idle_tracker = {"is_idle": False, "last_used": time.time()}
|
||||
kill = {"transcript": False}
|
||||
message_responses = LimitedSizeDict()
|
||||
players = {}
|
||||
sponsorblock_cache = LimitedSizeDict(size_limit=100)
|
||||
sponsorblock_cache = LimitedSizeDict()
|
||||
start_time = time.time()
|
||||
trusted_users = []
|
||||
|
2
tasks.py
2
tasks.py
@@ -11,7 +11,7 @@ async def cleanup():
|
||||
debug("spawned cleanup thread")
|
||||
|
||||
while True:
|
||||
await asyncio.sleep(3600 * 12)
|
||||
await asyncio.sleep(3600)
|
||||
|
||||
targets = []
|
||||
for guild_id, player in players.items():
|
||||
|
@@ -50,7 +50,7 @@ def filter_secrets(text: str, secrets=SECRETS) -> str:
|
||||
|
||||
class LimitedSizeDict(OrderedDict):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.size_limit = kwargs.pop("size_limit", 1000)
|
||||
self.size_limit = kwargs.pop("size_limit", 100)
|
||||
super().__init__(*args, **kwargs)
|
||||
self._check_size_limit()
|
||||
|
||||
|
Reference in New Issue
Block a user