streaming-link-bot: import
This commit is contained in:
51
streaming-link-bot/bot.py
Executable file
51
streaming-link-bot/bot.py
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from telegram import Update, ForceReply
|
||||||
|
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import requests
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def convert_link(link: str) -> str:
|
||||||
|
if "spotify" in link:
|
||||||
|
to_service = "youtube_music"
|
||||||
|
elif "youtube" in link:
|
||||||
|
to_service = "spotify"
|
||||||
|
link = re.sub(r"//(www\.)?youtube.com", "//music.youtube.com", link)
|
||||||
|
else:
|
||||||
|
raise ValueError("Invalid streaming service: " + link)
|
||||||
|
print(f"Trying to convert {link}", file=sys.stderr)
|
||||||
|
r = requests.get(f'https://ytm2spotify.com/convert?url={link}&to_service={to_service}')
|
||||||
|
print(r.text, file=sys.stderr)
|
||||||
|
json = r.json()
|
||||||
|
print(json, file=sys.stderr)
|
||||||
|
return json["results"][0]["url"]
|
||||||
|
|
||||||
|
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||||
|
user = update.effective_user
|
||||||
|
await update.message.reply_html(
|
||||||
|
rf"Hi {user.mention_html()}! You can send me links to Spotify songs and I'll give you the link on YouTube Music—and vice versa.",
|
||||||
|
reply_markup=ForceReply(selective=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
async def streaming_link(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
||||||
|
try:
|
||||||
|
converted = convert_link(update.message.text)
|
||||||
|
await update.message.reply_text(converted)
|
||||||
|
except Exception as e:
|
||||||
|
print(e, file=sys.stderr)
|
||||||
|
await update.message.reply_text("Cannot convert this.")
|
||||||
|
|
||||||
|
def main(token: str) -> None:
|
||||||
|
application = Application.builder().token(token).build()
|
||||||
|
application.add_handler(CommandHandler("start", start))
|
||||||
|
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, streaming_link))
|
||||||
|
application.run_polling(allowed_updates=Update.ALL_TYPES)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
token = os.getenv("TELEGRAM_TOKEN")
|
||||||
|
if token:
|
||||||
|
main(token)
|
||||||
|
else:
|
||||||
|
print("Missing TELEGRAM_TOKEN environment variable", file=sys.stderr)
|
||||||
11
streaming-link-bot/shell.nix
Normal file
11
streaming-link-bot/shell.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
pkgs.mkShell {
|
||||||
|
packages = [
|
||||||
|
(pkgs.python3.withPackages (py: [
|
||||||
|
py.yt-dlp
|
||||||
|
py.spotipy
|
||||||
|
py.ytmusicapi
|
||||||
|
py.python-telegram-bot
|
||||||
|
]))
|
||||||
|
];
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user