diff --git a/constants.py b/constants.py index fb4985a..050c22a 100644 --- a/constants.py +++ b/constants.py @@ -28,6 +28,7 @@ RELOADABLE_MODULES = [ "constants", "core", "events", + "extra", "tasks", "utils", "voice", diff --git a/core.py b/core.py index e316ad2..f757a54 100644 --- a/core.py +++ b/core.py @@ -48,6 +48,7 @@ async def on_message(message, edited=False): case C.RELOAD if message.author.id in constants.OWNERS: 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 constants.RELOADABLE_MODULES, diff --git a/extra.py b/extra.py new file mode 100644 index 0000000..6751842 --- /dev/null +++ b/extra.py @@ -0,0 +1,85 @@ +import asyncio +import string + +import disnake +import youtube_transcript_api + +from state import client, players + + +async def transcript(message, languages=["en"], max_messages=6, min_messages=3): + initial_id = message.guild.voice_client.source.id + transcript_list = youtube_transcript_api.YouTubeTranscriptApi.list_transcripts( + initial_id + ) + try: + transcript = transcript_list.find_manually_created_transcript(languages).fetch() + except Exception: + transcript = transcript_list.find_generated_transcript(languages).fetch() + await message.channel.send("(autogenerated)") + + messages = [] + for line in transcript: + if ( + players[message.guild.id].current.player.original.progress + >= line["start"] + line["duration"] + ): + continue + + while ( + players[message.guild.id].current.player.original.progress < line["start"] + ): + await asyncio.sleep(0.2) + + messages.insert(0, await message.channel.send(line["text"].upper())) + if len(messages) > max_messages: + try: + await message.channel.delete_messages( + [messages.pop() for _ in range(max_messages - min_messages)] + ) + except Exception: + pass + + if message.guild.voice_client.source.id != initial_id: + break + + +def messages_per_second(): + oldest = 2**64 + newest = 0 + guilds = set() + members = set() + + for message in client.cached_messages: + if message.guild: + guilds.add(message.guild.id) + members.add(message.author.id) + + t = message.created_at.timestamp() + if t < oldest: + oldest = t + elif t > newest: + newest = t + + average = round(len(client.cached_messages) / (newest - oldest), 1) + if average == 1.0: + average = 1 + print( + f"I am receiving **{average} {'message' if average == 1 else 'messages'} per second** " + f"from **{len(members)} {'member' if len(members) == 1 else 'members'}** across **{len(guilds)} {'guild' if len(guilds) == 1 else 'guilds'}**" + ) + + +async def auto_count(channel_id): + if (channel := await client.fetch_channel(channel_id)) and isinstance( + channel, disnake.TextChannel + ): + last_message = (await channel.history(limit=1).flatten())[0] + try: + result = str( + int("".join(filter(lambda d: d in string.digits, last_message.content))) + + 1 + ) + except Exception: + result = "where number" + await channel.send(result) diff --git a/requirements.txt b/requirements.txt index 4aebd9f..705d660 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ audioop-lts disnake disnake_paginator PyNaCl +youtube_transcript_api yt-dlp