This commit is contained in:
		
							
								
								
									
										15
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.drone.yml
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					*.pyc
 | 
				
			||||||
							
								
								
									
										11
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Dockerfile
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										49
									
								
								bot.py
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										8
									
								
								install.sh
									
									
									
									
									
										Normal 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'
 | 
				
			||||||
		Reference in New Issue
	
	Block a user