first commit
This commit is contained in:
		
						commit
						9fd80a272d
					
				
					 2 changed files with 121 additions and 0 deletions
				
			
		
							
								
								
									
										43
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					1. Create a working dir
 | 
				
			||||||
 | 
					 `mkdir /absolute/path/to/` 
 | 
				
			||||||
 | 
					3. Create a python virtual environment
 | 
				
			||||||
 | 
					 `python3 -m venv /absolute/path/to/venv`
 | 
				
			||||||
 | 
					5. Install depends in venv
 | 
				
			||||||
 | 
					 `/absolute/path/to/venv/bin/pip install spotdl`
 | 
				
			||||||
 | 
					 `/absolute/path/to/venv/bin/pip install python-telegram-bot`
 | 
				
			||||||
 | 
					 script was written with version 4.14.0
 | 
				
			||||||
 | 
					`/absolute/path/to/venv/bin/pip install python-telegram-bot==4.14.0`
 | 
				
			||||||
 | 
					6. Edit start.py with correct telegram API token and change directories
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start the script
 | 
				
			||||||
 | 
					`/absolute/path/to/venv/bin/python start.py`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Unit file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=tg_spotdl
 | 
				
			||||||
 | 
					After=network-online.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					User=clay
 | 
				
			||||||
 | 
					ExecStart=/absolute/path/to/venv/bin/python /absolute/path/to/start.py
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					RestartSec=5s
 | 
				
			||||||
 | 
					RuntimeMaxSec=12h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## start script
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					/absolute/path/to/venv/bin/python /absolute/path/to/start.py
 | 
				
			||||||
 | 
					exit
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## useful links
 | 
				
			||||||
 | 
					https://github.com/eternnoir/pyTelegramBotAPI
 | 
				
			||||||
							
								
								
									
										78
									
								
								start.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								start.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,78 @@
 | 
				
			||||||
 | 
					import telebot
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Replace 'YOUR_API_TOKEN' with your actual Telegram Bot API token
 | 
				
			||||||
 | 
					bot = telebot.TeleBot("TOKEN GOES HERE")
 | 
				
			||||||
 | 
					dldir = "/WHERE/TO/PUT/THE/MUSIC"
 | 
				
			||||||
 | 
					workingdir = "WHERE/IS/THE/PYTHON/VENV"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Get the current day of the month
 | 
				
			||||||
 | 
					current_day = datetime.date.today().day
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check if the day is divisible by 3
 | 
				
			||||||
 | 
					if current_day % 3 == 0:
 | 
				
			||||||
 | 
					    # Replace the following command with the command you want to execute
 | 
				
			||||||
 | 
					    command_to_run = f"{workingdir}bin/pip install --upgrade spotdl"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Execute the command
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        subprocess.run(command_to_run, shell=True, check=True)
 | 
				
			||||||
 | 
					        print(f"Updated SpotDL!.")
 | 
				
			||||||
 | 
					    except subprocess.CalledProcessError as e:
 | 
				
			||||||
 | 
					        print(f"Error updating SpotDL: {e}")
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    print("Not upgrading SpotDL today.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define conversation states
 | 
				
			||||||
 | 
					ARTIST, URL = range(2)
 | 
				
			||||||
 | 
					user_data = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print("tg_spotdl bot is running.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@bot.message_handler(commands=['start'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def start(message):
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, "Hi! I'm a bot that can download music for you.")
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, "Please enter the artist name:")
 | 
				
			||||||
 | 
					    bot.register_next_step_handler(message, get_artist)
 | 
				
			||||||
 | 
					    print("User pushed start.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_artist(message):
 | 
				
			||||||
 | 
					    user_data['artist'] = message.text
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, "Please enter the Spotify URL for the artist:")
 | 
				
			||||||
 | 
					    bot.register_next_step_handler(message, get_url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_url(message):
 | 
				
			||||||
 | 
					    artist = user_data['artist']
 | 
				
			||||||
 | 
					    url = message.text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, "This is going to take a while. Please wait!")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Create a directory for the artist
 | 
				
			||||||
 | 
					    artist_directory = f"{dldir}{artist}"
 | 
				
			||||||
 | 
					    os.makedirs(artist_directory, exist_ok=True)
 | 
				
			||||||
 | 
					    os.chdir(artist_directory)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Download the music using spotdl
 | 
				
			||||||
 | 
					    subprocess.run([
 | 
				
			||||||
 | 
					        f"{workingdir}bin/spotdl",
 | 
				
			||||||
 | 
					        "--format", "opus",
 | 
				
			||||||
 | 
					        "--bitrate", "80k",
 | 
				
			||||||
 | 
					        url
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, f"Finished downloading {artist}")
 | 
				
			||||||
 | 
					    print("Download completed.")
 | 
				
			||||||
 | 
					    bot.send_message(message.chat.id, "Use the /start command to download another artist.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@bot.message_handler(func=lambda message: True)
 | 
				
			||||||
 | 
					def echo_all(message):
 | 
				
			||||||
 | 
					    bot.reply_to(message, "I don't understand. Please use the /start command to begin.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    bot.polling()
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue