V1
All checks were successful
continuous-integration/drone Build is passing

This commit is contained in:
Roy Olav Purser 2024-05-25 16:58:06 +02:00
commit 29eae47855
Signed by: roypur
GPG Key ID: 063DAA01D56E28CB
6 changed files with 87 additions and 0 deletions

15
.drone.yml Normal file
View File

@ -0,0 +1,15 @@
kind: pipeline
name: default
steps:
- name: docker
image: plugins/docker
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: roypur/stream-discord-bot
tags:
- latest
- ${DRONE_BUILD_FINISHED}

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.pyc

11
Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM python:3.12-alpine AS venv
RUN ["mkdir", "-p", "/app"]
COPY ["bot.py", "/app/bot.py"]
COPY ["start.sh", "/app/start.sh"]
COPY ["install.sh", "/app/install.sh"]
RUN ["sh", "/app/install.sh"]
FROM scratch
COPY --from=venv / /
USER 1455:1455
ENTRYPOINT ["/app/start.sh"]

49
bot.py Normal file
View File

@ -0,0 +1,49 @@
import os
from urllib.parse import urlparse, parse_qs
import discord
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"
)
intents = discord.Intents.default()
intents.message_content = True
CustomClient(intents=intents).run(DISCORD_TOKEN)

8
install.sh Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env sh
python3 -m venv /app/venv
source /app/venv/bin/activate
pip3 install --upgrade pip
pip3 install --upgrade wheel
pip3 install --upgrade 'discord.py'

3
start.sh Normal file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env sh
source /app/venv/bin/activate
exec /app/bot.py