first commit

This commit is contained in:
Clay 2023-11-13 22:48:01 -05:00
commit 9fd80a272d
2 changed files with 121 additions and 0 deletions

43
README.md Normal file
View 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
View 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()