2024-05-25 16:01:04 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2024-05-25 14:58:06 +00:00
|
|
|
import os
|
|
|
|
from urllib.parse import urlparse, parse_qs
|
2024-05-25 17:09:44 +00:00
|
|
|
import aiohttp
|
2024-05-25 14:58:06 +00:00
|
|
|
import discord
|
|
|
|
|
2024-05-25 17:09:44 +00:00
|
|
|
|
2024-05-25 14:58:06 +00:00
|
|
|
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
|
|
|
|
DISCORD_CHANNEL = int(os.getenv("DISCORD_CHANNEL"))
|
|
|
|
DISCORD_GUILD = int(os.getenv("DISCORD_GUILD"))
|
|
|
|
|
|
|
|
|
|
|
|
class CustomClient(discord.Client):
|
|
|
|
async def on_ready(self):
|
|
|
|
print(f"{self.user} has connected to Discord!")
|
|
|
|
|
|
|
|
async def on_message(self, message: discord.message.Message):
|
|
|
|
if (
|
|
|
|
message.channel.id == DISCORD_CHANNEL
|
|
|
|
and message.guild.id == DISCORD_GUILD
|
|
|
|
and message.author.id != self.user.id
|
|
|
|
):
|
|
|
|
url = urlparse(message.content)
|
|
|
|
if "youtu" in url.hostname:
|
|
|
|
if (
|
|
|
|
url.path.strip("/").startswith("shorts")
|
|
|
|
and len(splitted := url.path.split("/")) >= 2
|
|
|
|
):
|
|
|
|
video_id = splitted[len(splitted) - 1]
|
|
|
|
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{video_id}?provider=youtube&direct=true"
|
|
|
|
)
|
|
|
|
elif video := parse_qs(url.query).get("v"):
|
|
|
|
if isinstance(video, str):
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{video}?provider=youtube&direct=true"
|
|
|
|
)
|
|
|
|
elif isinstance(video, list):
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{video[0]}?provider=youtube&direct=true"
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
video_id = url.path.strip("/")
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{video_id}?provider=youtube&direct=true"
|
|
|
|
)
|
|
|
|
|
2024-05-25 17:09:44 +00:00
|
|
|
elif "seafile" in url.hostname:
|
|
|
|
stripped = url.path.strip("/")
|
|
|
|
async with aiohttp.ClientSession(
|
|
|
|
timeout=aiohttp.ClientTimeout(total=5)
|
|
|
|
) as session:
|
|
|
|
resp = await session.head(
|
2024-05-25 17:57:26 +00:00
|
|
|
f"https://stream.purser.it/{stripped}/?provider=seafile&raw=true",
|
2024-05-25 17:36:05 +00:00
|
|
|
allow_redirects=True,
|
2024-05-25 17:09:44 +00:00
|
|
|
)
|
2024-05-25 18:08:06 +00:00
|
|
|
if (ctype := resp.headers.get("content-type")) and "image" in ctype:
|
|
|
|
await message.reply(
|
|
|
|
content=f"<https://stream.purser.it/{stripped}/?provider=seafile&raw=true>"
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{stripped}/?provider=seafile&raw=false"
|
|
|
|
)
|
2024-05-25 17:09:44 +00:00
|
|
|
|
|
|
|
elif "twitch" in url.hostname:
|
|
|
|
stripped = url.path.strip("/")
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{stripped}?provider=twitch"
|
|
|
|
)
|
|
|
|
|
|
|
|
elif "twitter" in url.hostname:
|
|
|
|
stripped = url.path.strip("/")
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{stripped}?provider=twitter"
|
|
|
|
)
|
|
|
|
|
|
|
|
elif "x.com" in url.hostname:
|
|
|
|
stripped = url.path.strip("/")
|
|
|
|
await message.reply(
|
|
|
|
content=f"https://stream.purser.it/{stripped}?provider=twitter"
|
|
|
|
)
|
|
|
|
|
2024-05-25 14:58:06 +00:00
|
|
|
|
|
|
|
intents = discord.Intents.default()
|
|
|
|
intents.message_content = True
|
|
|
|
CustomClient(intents=intents).run(DISCORD_TOKEN)
|