feat: add extra module for runtime code execution

This commit is contained in:
Ryan 2025-01-06 18:35:05 -05:00
parent f9489a869d
commit c69f1c7d26
Signed by: ErrorNoInternet
GPG Key ID: 2486BFB7B1E6A4A3
4 changed files with 88 additions and 0 deletions

View File

@ -28,6 +28,7 @@ RELOADABLE_MODULES = [
"constants",
"core",
"events",
"extra",
"tasks",
"utils",
"voice",

View File

@ -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,

85
extra.py Normal file
View File

@ -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)

View File

@ -2,4 +2,5 @@ audioop-lts
disnake
disnake_paginator
PyNaCl
youtube_transcript_api
yt-dlp