music = {'type': 'radio',
'url': url,
'user': user}
+
+ log.info("bot: fetching radio server description")
+ music["name"] = media.radio.get_radio_server_description(url)
+
var.playlist.append(music)
log.info("cmd: add to playlist: " + util.format_debug_song_string(music))
bot.async_download_next()
if url != "-1":
log.info('cmd: Found url: ' + url)
music = {'type': 'radio',
- 'title': stationname,
+ 'name': stationname,
'artist': homepage,
'url': url,
'user': user}
def cmd_yt_play(bot, user, text, command, parameter):
global log, yt_last_result
- if parameter and parameter.isdigit() and 0 < int(parameter) - 1 < len(yt_last_result):
+ if parameter and parameter.isdigit() and 0 <= int(parameter) - 1 < len(yt_last_result):
url = "https://www.youtube.com/watch?v=" + yt_last_result[int(parameter) - 1][0]
cmd_play_url(bot, user, text, command, url)
else:
queue_contents = Items on the playlist:
queue_empty = Playlist is empty!
invalid_index = Invalid index <i>{index}</i>. Use '!queue' to see your playlist.
-now_playing = Now playing {item}<br />{thumb}
+now_playing_radio = Now Playing Radio: <br /> <a href="{url}">{title}</a> <i>from</i> {name} <i>added by</i> {user}
+now_playing_file = Now Playing File:<br /> {artist} - {title} <i>added by</i> {user}
+now_playing_from_playlist = Now Playing URL:<br /> {title} <i>from playlist</i> <a href="{url}">{playlist}</a> <i>added by</i> {user}
+now_playing_url = Now Playing URL: <br /> <a href="{url}">{title}</a> <i>added by</i> {user}
not_in_my_channel = You're not in my channel, command refused!
pm_not_allowed = Private message aren't allowed.
too_long = This music is too long, skip!
from werkzeug.utils import secure_filename
import errno
import media
+import media.radio
import logging
import time
import constants
var.botamusique.async_download_next()
elif 'add_radio' in request.form:
+ url = request.form['add_radio']
music = var.playlist.append({'type': 'radio',
- 'path': request.form['add_radio'],
+ 'url': url,
'user': "Remote Control"})
+ log.info("web: fetching radio server description")
+ music["name"] = media.radio.get_radio_server_description(url)
log.info("web: add to playlist: " + util.format_debug_song_string(music))
elif 'delete_music' in request.form:
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
for i in range(2):
try:
- print(var.playlist)
info = ydl.extract_info(music['url'], download=False)
music['duration'] = info['duration'] / 60
music['title'] = info['title']
if len(matches) == 1:
self.log.info("bot: {:s} matches {:s}".format(command, matches[0]))
command_exc = matches[0]
- self.cmd_handle[matches[0]](self, user, text, command, parameter)
+ self.cmd_handle[command_exc](self, user, text, command_exc, parameter)
elif len(matches) > 1:
self.mumble.users[text.actor].send_text_message(
constants.strings('which_command', commands="<br>".join(matches)))
elif music["type"] == "radio":
uri = music["url"]
- if 'title' not in music:
+ if 'name' not in music:
self.log.info("bot: fetching radio server description")
title = media.radio.get_radio_server_description(uri)
- music["title"] = title
+ music["name"] = title
if var.config.getboolean('bot', 'announce_current_music'):
self.send_msg(util.format_current_playing())
break
except:
error_traceback = traceback.format_exc().split("During")[0]
- self.log.error("bot: download failed with error:\n %s" % error_traceback)
+ error = error_traceback.rstrip().split("\n")[-1]
+ self.log.error("bot: download failed with error:\n %s" % error)
if not download_succeed:
for f in [mp3, path.replace(".%(ext)s", ".jpg"), path.replace(".%(ext)s", ".m4a")]:
import variables as var
import constants
import zipfile
-import urllib.request
+import requests
import mutagen
import re
import subprocess as sp
artist = music["artist"] if "artist" in music else "Unknown artist"
if source == "radio":
- display = "[radio] {title} from {url} by {user}".format(
- title=media.radio.get_radio_title(music["url"]),
+ display = constants.strings("now_playing_radio",
url=music["url"],
+ title=media.radio.get_radio_title(music["url"]),
+ name=music["name"],
user=music["user"]
)
elif source == "url" and 'from_playlist' in music:
- display = "[url] {title} (from playlist <a href=\"{url}\">{playlist}</a>) by {user}".format(
- title=title,
- url=music["playlist_url"],
- playlist=music["playlist_title"],
- user=music["user"]
+ display = constants.strings("now_playing_from_playlist",
+ title=title,
+ url=music["playlist_url"],
+ playlist=music["playlist_title"],
+ user=music["user"]
)
elif source == "url":
- display = "[url] <a href=\"{url}\">{title}</a> by {user}".format(
- title=title,
- url=music["url"],
- user=music["user"]
+ display = constants.strings("now_playing_url",
+ title=title,
+ url=music["url"],
+ user=music["user"]
)
elif source == "file":
- display = "[file] {artist} - {title} by {user}".format(
- title=title,
- artist=artist,
- user=music["user"]
+ display = constants.strings("now_playing_file",
+ title=title,
+ artist=artist,
+ user=music["user"]
)
return display
artist = music["artist"] if "artist" in music else "??"
if source == "radio":
- display = "[radio] {url} by {user}".format(
+ display = "[radio] {name} ({url}) by {user}".format(
+ name=music["name"],
url=music["url"],
user=music["user"]
)
music = var.playlist.current_item()
display = format_song_string(music)
- thumbnail_html = ''
if 'thumbnail' in music:
thumbnail_html = '<img width="80" src="data:image/jpge;base64,' + \
music['thumbnail'] + '"/>'
-
- display = (constants.strings('now_playing', item=display, thumb=thumbnail_html))
+ return display + "<br />" + thumbnail_html
return display
def youtube_search(query):
global log
- query_url = "https://www.youtube.com/results?search_query=" + urllib.parse.quote(query, safe="")
-
try:
- request = urllib.request.Request(query_url)
- response = urllib.request.urlopen(request).read().decode("utf-8")
+ r = requests.get("https://www.youtube.com/results", params={'search_query': query}, timeout=5)
results = re.findall("watch\?v=(.*?)\".*?title=\"(.*?)\".*?"
- "(?:user|channel).*?>(.*?)<", response) # (id, title, uploader)
+ "(?:user|channel).*?>(.*?)<", r.text) # (id, title, uploader)
if len(results) > 0:
return results
- except:
+
+ except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError, requests.exceptions.Timeout) as e:
error_traceback = traceback.format_exc().split("During")[0]
log.error("util: youtube query failed with error:\n %s" % error_traceback)
return False