feat: Lartza's urlban idea #91, fixed private message
This commit is contained in:
parent
30c481bc24
commit
0ac9603072
98
command.py
98
command.py
@ -11,7 +11,7 @@ import variables as var
|
|||||||
from librb import radiobrowser
|
from librb import radiobrowser
|
||||||
from database import SettingsDatabase, MusicDatabase
|
from database import SettingsDatabase, MusicDatabase
|
||||||
from media.item import item_builders, item_loaders, item_id_generators, dict_to_item, dicts_to_items
|
from media.item import item_builders, item_loaders, item_id_generators, dict_to_item, dicts_to_items
|
||||||
from media.playlist import get_item_wrapper_from_scrap, get_item_wrapper_by_id, get_item_wrappers_by_tags
|
from media.cache import get_cached_wrapper_from_scrap, get_cached_wrapper_by_id, get_cached_wrappers_by_tags
|
||||||
from media.file import FileItem
|
from media.file import FileItem
|
||||||
from media.url_from_playlist import PlaylistURLItem, get_playlist_info
|
from media.url_from_playlist import PlaylistURLItem, get_playlist_info
|
||||||
from media.url import URLItem
|
from media.url import URLItem
|
||||||
@ -21,10 +21,11 @@ log = logging.getLogger("bot")
|
|||||||
|
|
||||||
def register_all_commands(bot):
|
def register_all_commands(bot):
|
||||||
bot.register_command(constants.commands('joinme'), cmd_joinme, no_partial_match=False, access_outside_channel=True)
|
bot.register_command(constants.commands('joinme'), cmd_joinme, no_partial_match=False, access_outside_channel=True)
|
||||||
bot.register_command(constants.commands('user_ban'), cmd_user_ban)
|
bot.register_command(constants.commands('user_ban'), cmd_user_ban, no_partial_match=True)
|
||||||
bot.register_command(constants.commands('user_unban'), cmd_user_unban)
|
bot.register_command(constants.commands('user_unban'), cmd_user_unban, no_partial_match=True)
|
||||||
bot.register_command(constants.commands('url_ban'), cmd_url_ban)
|
bot.register_command(constants.commands('url_ban_list'), cmd_url_ban_list, no_partial_match=True)
|
||||||
bot.register_command(constants.commands('url_unban'), cmd_url_unban)
|
bot.register_command(constants.commands('url_ban'), cmd_url_ban, no_partial_match=True)
|
||||||
|
bot.register_command(constants.commands('url_unban'), cmd_url_unban, no_partial_match=True)
|
||||||
bot.register_command(constants.commands('play'), cmd_play)
|
bot.register_command(constants.commands('play'), cmd_play)
|
||||||
bot.register_command(constants.commands('pause'), cmd_pause)
|
bot.register_command(constants.commands('pause'), cmd_pause)
|
||||||
bot.register_command(constants.commands('play_file'), cmd_play_file)
|
bot.register_command(constants.commands('play_file'), cmd_play_file)
|
||||||
@ -41,7 +42,7 @@ def register_all_commands(bot):
|
|||||||
bot.register_command(constants.commands('stop'), cmd_stop)
|
bot.register_command(constants.commands('stop'), cmd_stop)
|
||||||
bot.register_command(constants.commands('clear'), cmd_clear)
|
bot.register_command(constants.commands('clear'), cmd_clear)
|
||||||
bot.register_command(constants.commands('kill'), cmd_kill)
|
bot.register_command(constants.commands('kill'), cmd_kill)
|
||||||
bot.register_command(constants.commands('update'), cmd_update)
|
bot.register_command(constants.commands('update'), cmd_update, no_partial_match=True)
|
||||||
bot.register_command(constants.commands('stop_and_getout'), cmd_stop_and_getout)
|
bot.register_command(constants.commands('stop_and_getout'), cmd_stop_and_getout)
|
||||||
bot.register_command(constants.commands('volume'), cmd_volume)
|
bot.register_command(constants.commands('volume'), cmd_volume)
|
||||||
bot.register_command(constants.commands('ducking'), cmd_ducking)
|
bot.register_command(constants.commands('ducking'), cmd_ducking)
|
||||||
@ -129,12 +130,28 @@ def cmd_url_ban(bot, user, text, command, parameter):
|
|||||||
if bot.is_admin(user):
|
if bot.is_admin(user):
|
||||||
if parameter:
|
if parameter:
|
||||||
bot.mumble.users[text.actor].send_text_message(util.url_ban(util.get_url_from_input(parameter)))
|
bot.mumble.users[text.actor].send_text_message(util.url_ban(util.get_url_from_input(parameter)))
|
||||||
|
|
||||||
|
id = item_id_generators['url'](url=parameter)
|
||||||
|
var.cache.free_and_delete(id)
|
||||||
|
var.playlist.remove_by_id(id)
|
||||||
else:
|
else:
|
||||||
bot.mumble.users[text.actor].send_text_message(util.get_url_ban())
|
if var.playlist.current_item().type == 'url':
|
||||||
|
item = var.playlist.current_item().item()
|
||||||
|
bot.mumble.users[text.actor].send_text_message(util.url_ban(util.get_url_from_input(item.url)))
|
||||||
|
var.cache.free_and_delete(item.id)
|
||||||
|
var.playlist.remove_by_id(item.id)
|
||||||
|
else:
|
||||||
|
bot.send_msg(constants.strings('bad_parameter', command=command))
|
||||||
else:
|
else:
|
||||||
bot.mumble.users[text.actor].send_text_message(constants.strings('not_admin'))
|
bot.mumble.users[text.actor].send_text_message(constants.strings('not_admin'))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def cmd_url_ban_list(bot, user, text, command, parameter):
|
||||||
|
if bot.is_admin(user):
|
||||||
|
bot.mumble.users[text.actor].send_text_message(util.get_url_ban())
|
||||||
|
else:
|
||||||
|
bot.mumble.users[text.actor].send_text_message(constants.strings('not_admin'))
|
||||||
|
return
|
||||||
|
|
||||||
def cmd_url_unban(bot, user, text, command, parameter):
|
def cmd_url_unban(bot, user, text, command, parameter):
|
||||||
global log
|
global log
|
||||||
@ -183,10 +200,10 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals
|
|||||||
if parameter.isdigit():
|
if parameter.isdigit():
|
||||||
files = var.cache.files
|
files = var.cache.files
|
||||||
if int(parameter) < len(files):
|
if int(parameter) < len(files):
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, var.cache.file_id_lookup[files[int(parameter)]], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, var.cache.file_id_lookup[files[int(parameter)]], user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
return
|
return
|
||||||
|
|
||||||
# if parameter is {path}
|
# if parameter is {path}
|
||||||
@ -198,10 +215,10 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals
|
|||||||
# return
|
# return
|
||||||
|
|
||||||
if parameter in var.cache.files:
|
if parameter in var.cache.files:
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, type='file', path=parameter, user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, type='file', path=parameter, user=user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
return
|
return
|
||||||
|
|
||||||
# if parameter is {folder}
|
# if parameter is {folder}
|
||||||
@ -212,13 +229,13 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals
|
|||||||
|
|
||||||
for file in files:
|
for file in files:
|
||||||
count += 1
|
count += 1
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
msgs.append("{} ({})".format(music_wrapper.item().title, music_wrapper.item().path))
|
msgs.append("{} ({})".format(music_wrapper.item().title, music_wrapper.item().path))
|
||||||
|
|
||||||
if count != 0:
|
if count != 0:
|
||||||
send_multi_lines(bot, msgs, text)
|
send_multi_lines(bot, msgs, None)
|
||||||
return
|
return
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -227,10 +244,10 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals
|
|||||||
matches = [ file for file in files if parameter.lower() in file.lower()]
|
matches = [ file for file in files if parameter.lower() in file.lower()]
|
||||||
if len(matches) == 1:
|
if len(matches) == 1:
|
||||||
file = matches[0]
|
file = matches[0]
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
return
|
return
|
||||||
elif len(matches) > 1:
|
elif len(matches) > 1:
|
||||||
msgs = [ constants.strings('multiple_matches') ]
|
msgs = [ constants.strings('multiple_matches') ]
|
||||||
@ -268,7 +285,7 @@ def cmd_play_file_match(bot, user, text, command, parameter, do_not_refresh_cach
|
|||||||
match = re.search(parameter, file)
|
match = re.search(parameter, file)
|
||||||
if match and match[0]:
|
if match and match[0]:
|
||||||
count += 1
|
count += 1
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, var.cache.file_id_lookup[file], user)
|
||||||
music_wrappers.append(music_wrapper)
|
music_wrappers.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
msgs.append("<li><b>{}</b> ({})</li>".format(music_wrapper.item().title,
|
msgs.append("<li><b>{}</b> ({})</li>".format(music_wrapper.item().title,
|
||||||
@ -282,7 +299,7 @@ def cmd_play_file_match(bot, user, text, command, parameter, do_not_refresh_cach
|
|||||||
if count != 0:
|
if count != 0:
|
||||||
msgs.append("</ul>")
|
msgs.append("</ul>")
|
||||||
var.playlist.extend(music_wrappers)
|
var.playlist.extend(music_wrappers)
|
||||||
send_multi_lines(bot, msgs, text, "")
|
send_multi_lines(bot, msgs, None, "")
|
||||||
else:
|
else:
|
||||||
if do_not_refresh_cache:
|
if do_not_refresh_cache:
|
||||||
bot.send_msg(constants.strings("no_file"), text)
|
bot.send_msg(constants.strings("no_file"), text)
|
||||||
@ -302,11 +319,11 @@ def cmd_play_url(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
url = util.get_url_from_input(parameter)
|
url = util.get_url_from_input(parameter)
|
||||||
if url:
|
if url:
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, type='url', url=url, user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, type='url', url=url, user=user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
|
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
if len(var.playlist) == 2:
|
if len(var.playlist) == 2:
|
||||||
# If I am the second item on the playlist. (I am the next one!)
|
# If I am the second item on the playlist. (I am the next one!)
|
||||||
bot.async_download_next()
|
bot.async_download_next()
|
||||||
@ -329,7 +346,7 @@ def cmd_play_playlist(bot, user, text, command, parameter):
|
|||||||
items = get_playlist_info(url=url, start_index=offset, user=user)
|
items = get_playlist_info(url=url, start_index=offset, user=user)
|
||||||
if len(items) > 0:
|
if len(items) > 0:
|
||||||
items = var.playlist.extend(list(map(
|
items = var.playlist.extend(list(map(
|
||||||
lambda item: get_item_wrapper_from_scrap(bot, **item), items)))
|
lambda item: get_cached_wrapper_from_scrap(bot, **item), items)))
|
||||||
for music in items:
|
for music in items:
|
||||||
log.info("cmd: add to playlist: " + music.format_debug_string())
|
log.info("cmd: add to playlist: " + music.format_debug_string())
|
||||||
else:
|
else:
|
||||||
@ -354,11 +371,11 @@ def cmd_play_radio(bot, user, text, command, parameter):
|
|||||||
parameter = parameter.split()[0]
|
parameter = parameter.split()[0]
|
||||||
url = util.get_url_from_input(parameter)
|
url = util.get_url_from_input(parameter)
|
||||||
if url:
|
if url:
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, type='radio', url=url, user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, type='radio', url=url, user=user)
|
||||||
|
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
else:
|
else:
|
||||||
bot.send_msg(constants.strings('bad_url'))
|
bot.send_msg(constants.strings('bad_url'))
|
||||||
|
|
||||||
@ -454,7 +471,7 @@ def cmd_rb_play(bot, user, text, command, parameter):
|
|||||||
url = radiobrowser.geturl_byid(parameter)
|
url = radiobrowser.geturl_byid(parameter)
|
||||||
if url != "-1":
|
if url != "-1":
|
||||||
log.info('cmd: Found url: ' + url)
|
log.info('cmd: Found url: ' + url)
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, type='radio', url=url, name=stationname, user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, type='radio', url=url, name=stationname, user=user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.async_download_next()
|
bot.async_download_next()
|
||||||
@ -527,7 +544,6 @@ def cmd_yt_play(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
def cmd_help(bot, user, text, command, parameter):
|
def cmd_help(bot, user, text, command, parameter):
|
||||||
global log
|
global log
|
||||||
|
|
||||||
bot.send_msg(constants.strings('help'), text)
|
bot.send_msg(constants.strings('help'), text)
|
||||||
if bot.is_admin(user):
|
if bot.is_admin(user):
|
||||||
bot.send_msg(constants.strings('admin_help'), text)
|
bot.send_msg(constants.strings('admin_help'), text)
|
||||||
@ -586,7 +602,7 @@ def cmd_volume(bot, user, text, command, parameter):
|
|||||||
if parameter and parameter.isdigit() and 0 <= int(parameter) <= 100:
|
if parameter and parameter.isdigit() and 0 <= int(parameter) <= 100:
|
||||||
bot.volume_set = float(float(parameter) / 100)
|
bot.volume_set = float(float(parameter) / 100)
|
||||||
bot.send_msg(constants.strings('change_volume',
|
bot.send_msg(constants.strings('change_volume',
|
||||||
volume=int(bot.volume_set * 100), user=bot.mumble.users[text.actor]['name']), text)
|
volume=int(bot.volume_set * 100), user=bot.mumble.users[text.actor]['name']))
|
||||||
var.db.set('bot', 'volume', str(bot.volume_set))
|
var.db.set('bot', 'volume', str(bot.volume_set))
|
||||||
log.info('cmd: volume set to %d' % (bot.volume_set * 100))
|
log.info('cmd: volume set to %d' % (bot.volume_set * 100))
|
||||||
else:
|
else:
|
||||||
@ -647,12 +663,10 @@ def cmd_ducking_volume(bot, user, text, command, parameter):
|
|||||||
def cmd_current_music(bot, user, text, command, parameter):
|
def cmd_current_music(bot, user, text, command, parameter):
|
||||||
global log
|
global log
|
||||||
|
|
||||||
reply = ""
|
|
||||||
if len(var.playlist) > 0:
|
if len(var.playlist) > 0:
|
||||||
bot.send_msg(var.playlist.current_item().format_current_playing())
|
bot.send_msg(var.playlist.current_item().format_current_playing(), text)
|
||||||
else:
|
else:
|
||||||
reply = constants.strings('not_playing')
|
bot.send_msg(constants.strings('not_playing'), text)
|
||||||
bot.send_msg(reply, text)
|
|
||||||
|
|
||||||
|
|
||||||
def cmd_skip(bot, user, text, command, parameter):
|
def cmd_skip(bot, user, text, command, parameter):
|
||||||
@ -705,7 +719,7 @@ def cmd_remove(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
log.info("cmd: delete from playlist: " + removed.format_debug_string())
|
log.info("cmd: delete from playlist: " + removed.format_debug_string())
|
||||||
else:
|
else:
|
||||||
bot.send_msg(constants.strings('bad_parameter', command=command))
|
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
||||||
|
|
||||||
|
|
||||||
def cmd_list_file(bot, user, text, command, parameter):
|
def cmd_list_file(bot, user, text, command, parameter):
|
||||||
@ -801,7 +815,7 @@ def cmd_mode(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
def cmd_play_tags(bot, user, text, command, parameter):
|
def cmd_play_tags(bot, user, text, command, parameter):
|
||||||
if not parameter:
|
if not parameter:
|
||||||
bot.send_msg(constants.strings('bad_parameter', command=command))
|
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
||||||
return
|
return
|
||||||
|
|
||||||
msgs = [constants.strings('multiple_file_added') + "<ul>"]
|
msgs = [constants.strings('multiple_file_added') + "<ul>"]
|
||||||
@ -809,7 +823,7 @@ def cmd_play_tags(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
tags = parameter.split(",")
|
tags = parameter.split(",")
|
||||||
tags = list(map(lambda t: t.strip(), tags))
|
tags = list(map(lambda t: t.strip(), tags))
|
||||||
music_wrappers = get_item_wrappers_by_tags(bot, tags, user)
|
music_wrappers = get_cached_wrappers_by_tags(bot, tags, user)
|
||||||
for music_wrapper in music_wrappers:
|
for music_wrapper in music_wrappers:
|
||||||
count += 1
|
count += 1
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
@ -819,7 +833,7 @@ def cmd_play_tags(bot, user, text, command, parameter):
|
|||||||
if count != 0:
|
if count != 0:
|
||||||
msgs.append("</ul>")
|
msgs.append("</ul>")
|
||||||
var.playlist.extend(music_wrappers)
|
var.playlist.extend(music_wrappers)
|
||||||
send_multi_lines(bot, msgs, text, "")
|
send_multi_lines(bot, msgs, None, "")
|
||||||
else:
|
else:
|
||||||
bot.send_msg(constants.strings("no_file"), text)
|
bot.send_msg(constants.strings("no_file"), text)
|
||||||
|
|
||||||
@ -916,7 +930,7 @@ def cmd_find_tagged(bot, user, text, command, parameter):
|
|||||||
global song_shortlist
|
global song_shortlist
|
||||||
|
|
||||||
if not parameter:
|
if not parameter:
|
||||||
bot.send_msg(constants.strings('bad_parameter', command=command))
|
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
||||||
return
|
return
|
||||||
|
|
||||||
msgs = [constants.strings('multiple_file_found') + "<ul>"]
|
msgs = [constants.strings('multiple_file_found') + "<ul>"]
|
||||||
@ -943,7 +957,7 @@ def cmd_find_tagged(bot, user, text, command, parameter):
|
|||||||
def cmd_search_library(bot, user, text, command, parameter):
|
def cmd_search_library(bot, user, text, command, parameter):
|
||||||
global song_shortlist
|
global song_shortlist
|
||||||
if not parameter:
|
if not parameter:
|
||||||
bot.send_msg(constants.strings('bad_parameter', command=command))
|
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
||||||
return
|
return
|
||||||
|
|
||||||
msgs = [constants.strings('multiple_file_found') + "<ul>"]
|
msgs = [constants.strings('multiple_file_found') + "<ul>"]
|
||||||
@ -992,7 +1006,7 @@ def cmd_shortlist(bot, user, text, command, parameter):
|
|||||||
if 1 <= index <= len(song_shortlist):
|
if 1 <= index <= len(song_shortlist):
|
||||||
kwargs = song_shortlist[index - 1]
|
kwargs = song_shortlist[index - 1]
|
||||||
kwargs['user'] = user
|
kwargs['user'] = user
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, **kwargs)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, **kwargs)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
msgs.append("<li>[{}] <b>{}</b></li>".format(music_wrapper.item().type, music_wrapper.item().title))
|
msgs.append("<li>[{}] <b>{}</b></li>".format(music_wrapper.item().type, music_wrapper.item().title))
|
||||||
@ -1001,17 +1015,17 @@ def cmd_shortlist(bot, user, text, command, parameter):
|
|||||||
return
|
return
|
||||||
|
|
||||||
msgs.append("</ul>")
|
msgs.append("</ul>")
|
||||||
send_multi_lines(bot, msgs, text, "")
|
send_multi_lines(bot, msgs, None, "")
|
||||||
return
|
return
|
||||||
elif len(indexes) == 1:
|
elif len(indexes) == 1:
|
||||||
index = indexes[0]
|
index = indexes[0]
|
||||||
if 1 <= index <= len(song_shortlist):
|
if 1 <= index <= len(song_shortlist):
|
||||||
kwargs = song_shortlist[index - 1]
|
kwargs = song_shortlist[index - 1]
|
||||||
kwargs['user'] = user
|
kwargs['user'] = user
|
||||||
music_wrapper = get_item_wrapper_from_scrap(bot, **kwargs)
|
music_wrapper = get_cached_wrapper_from_scrap(bot, **kwargs)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_added', item=music_wrapper.format_song_string()))
|
||||||
return
|
return
|
||||||
|
|
||||||
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
bot.send_msg(constants.strings('bad_parameter', command=command), text)
|
||||||
@ -1033,7 +1047,7 @@ def cmd_delete_from_library(bot, user, text, command, parameter):
|
|||||||
if 1 <= index <= len(song_shortlist):
|
if 1 <= index <= len(song_shortlist):
|
||||||
music_dict = song_shortlist[index - 1]
|
music_dict = song_shortlist[index - 1]
|
||||||
if 'id' in music_dict:
|
if 'id' in music_dict:
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, music_dict['id'], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, music_dict['id'], user)
|
||||||
log.info("cmd: remove from library: " + music_wrapper.format_debug_string())
|
log.info("cmd: remove from library: " + music_wrapper.format_debug_string())
|
||||||
msgs.append("<li>[{}] <b>{}</b></li>".format(music_wrapper.item().type ,music_wrapper.item().title))
|
msgs.append("<li>[{}] <b>{}</b></li>".format(music_wrapper.item().type ,music_wrapper.item().title))
|
||||||
var.playlist.remove_by_id(music_dict['id'])
|
var.playlist.remove_by_id(music_dict['id'])
|
||||||
@ -1048,14 +1062,14 @@ def cmd_delete_from_library(bot, user, text, command, parameter):
|
|||||||
return
|
return
|
||||||
|
|
||||||
msgs.append("</ul>")
|
msgs.append("</ul>")
|
||||||
send_multi_lines(bot, msgs, text, "")
|
send_multi_lines(bot, msgs, None, "")
|
||||||
return
|
return
|
||||||
elif len(indexes) == 1:
|
elif len(indexes) == 1:
|
||||||
index = indexes[0]
|
index = indexes[0]
|
||||||
if 1 <= index <= len(song_shortlist):
|
if 1 <= index <= len(song_shortlist):
|
||||||
music_dict = song_shortlist[index - 1]
|
music_dict = song_shortlist[index - 1]
|
||||||
if 'id' in music_dict:
|
if 'id' in music_dict:
|
||||||
music_wrapper = get_item_wrapper_by_id(bot, music_dict['id'], user)
|
music_wrapper = get_cached_wrapper_by_id(bot, music_dict['id'], user)
|
||||||
bot.send_msg(constants.strings('file_deleted', item=music_wrapper.format_song_string()), text)
|
bot.send_msg(constants.strings('file_deleted', item=music_wrapper.format_song_string()), text)
|
||||||
log.info("cmd: remove from library: " + music_wrapper.format_debug_string())
|
log.info("cmd: remove from library: " + music_wrapper.format_debug_string())
|
||||||
var.playlist.remove_by_id(music_dict['id'])
|
var.playlist.remove_by_id(music_dict['id'])
|
||||||
|
@ -168,6 +168,7 @@ add_from_shortlist = shortlist, sl
|
|||||||
user_ban = userban
|
user_ban = userban
|
||||||
user_unban = userunban
|
user_unban = userunban
|
||||||
url_ban = urlban
|
url_ban = urlban
|
||||||
|
url_ban_list = urlbanlist
|
||||||
url_unban = urlunban
|
url_unban = urlunban
|
||||||
|
|
||||||
ducking = duck
|
ducking = duck
|
||||||
@ -299,12 +300,12 @@ help = <h3>Commands</h3>
|
|||||||
admin_help = <h3>Admin command</h3>
|
admin_help = <h3>Admin command</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><b>!<u>k</u>ill </b> - kill the bot</li>
|
<li><b>!<u>k</u>ill </b> - kill the bot</li>
|
||||||
<li><b>!<u>up</u>date </b> - update the bot</li>
|
<li><b>!update </b> - update the bot</li>
|
||||||
<li><b>!<u>userb</u>an </b> {user} - ban a user</li>
|
<li><b>!userban </b> {user} - ban a user</li>
|
||||||
<li><b>!<u>useru</u>nban </b> {user} - unban a user</li>
|
<li><b>!userunban </b> {user} - unban a user</li>
|
||||||
<li><b>!<u>urlb</u>an </b> {url} - ban an url</li>
|
<li><b>!urlbanlist </b> {url} - list banned url</li>
|
||||||
<li><b>!<u>urlu</u>nban </b> {url} - unban an url</li>
|
<li><b>!urlban </b> [{url}] - ban {url} (or current item's url by default) and remove this url from the library.</li>
|
||||||
<li><b>!<u>urlu</u>nban </b> {url} - unban an url</li>
|
<li><b>!urlunban </b> {url} - unban {url}</li>
|
||||||
<li><b>!rescan </b> {url} - rebuild local music file cache</li>
|
<li><b>!rescan </b> {url} - rebuild local music file cache</li>
|
||||||
<li><b>!dropdatabase</b> - clear the entire database, you will lose all settings and music library.</li>
|
<li><b>!dropdatabase</b> - clear the entire database, you will lose all settings and music library.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
14
interface.py
14
interface.py
@ -10,7 +10,7 @@ import shutil
|
|||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
import errno
|
import errno
|
||||||
import media
|
import media
|
||||||
from media.playlist import get_item_wrapper_from_scrap, get_item_wrapper_by_id, get_item_wrappers_by_tags
|
from media.cache import get_cached_wrapper_from_scrap, get_cached_wrapper_by_id, get_cached_wrappers_by_tags
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ def post():
|
|||||||
if 'add_file_bottom' in request.form and ".." not in request.form['add_file_bottom']:
|
if 'add_file_bottom' in request.form and ".." not in request.form['add_file_bottom']:
|
||||||
path = var.music_folder + request.form['add_file_bottom']
|
path = var.music_folder + request.form['add_file_bottom']
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
music_wrapper = get_item_wrapper_by_id(var.bot, var.cache.file_id_lookup[request.form['add_file_bottom']], user)
|
music_wrapper = get_cached_wrapper_by_id(var.bot, var.cache.file_id_lookup[request.form['add_file_bottom']], user)
|
||||||
|
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
log.info('web: add to playlist(bottom): ' + music_wrapper.format_debug_string())
|
log.info('web: add to playlist(bottom): ' + music_wrapper.format_debug_string())
|
||||||
@ -207,7 +207,7 @@ def post():
|
|||||||
elif 'add_file_next' in request.form and ".." not in request.form['add_file_next']:
|
elif 'add_file_next' in request.form and ".." not in request.form['add_file_next']:
|
||||||
path = var.music_folder + request.form['add_file_next']
|
path = var.music_folder + request.form['add_file_next']
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
music_wrapper = get_item_wrapper_by_id(var.bot, var.cache.file_id_lookup[request.form['add_file_next']], user)
|
music_wrapper = get_cached_wrapper_by_id(var.bot, var.cache.file_id_lookup[request.form['add_file_next']], user)
|
||||||
var.playlist.insert(var.playlist.current_index + 1, music_wrapper)
|
var.playlist.insert(var.playlist.current_index + 1, music_wrapper)
|
||||||
log.info('web: add to playlist(next): ' + music_wrapper.format_debug_string())
|
log.info('web: add to playlist(next): ' + music_wrapper.format_debug_string())
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ def post():
|
|||||||
|
|
||||||
music_wrappers = list(map(
|
music_wrappers = list(map(
|
||||||
lambda file:
|
lambda file:
|
||||||
get_item_wrapper_by_id(var.bot, var.cache.file_id_lookup[folder + file], user),
|
get_cached_wrapper_by_id(var.bot, var.cache.file_id_lookup[folder + file], user),
|
||||||
files))
|
files))
|
||||||
|
|
||||||
var.playlist.extend(music_wrappers)
|
var.playlist.extend(music_wrappers)
|
||||||
@ -239,7 +239,7 @@ def post():
|
|||||||
|
|
||||||
|
|
||||||
elif 'add_url' in request.form:
|
elif 'add_url' in request.form:
|
||||||
music_wrapper = get_item_wrapper_from_scrap(var.bot, type='url', url=request.form['add_url'], user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(var.bot, type='url', url=request.form['add_url'], user=user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
|
|
||||||
log.info("web: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("web: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
@ -249,7 +249,7 @@ def post():
|
|||||||
|
|
||||||
elif 'add_radio' in request.form:
|
elif 'add_radio' in request.form:
|
||||||
url = request.form['add_radio']
|
url = request.form['add_radio']
|
||||||
music_wrapper = get_item_wrapper_from_scrap(var.bot, type='radio', url=url, user=user)
|
music_wrapper = get_cached_wrapper_from_scrap(var.bot, type='radio', url=url, user=user)
|
||||||
var.playlist.append(music_wrapper)
|
var.playlist.append(music_wrapper)
|
||||||
|
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
@ -301,7 +301,7 @@ def post():
|
|||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
elif 'add_tag' in request.form:
|
elif 'add_tag' in request.form:
|
||||||
music_wrappers = get_item_wrappers_by_tags(var.bot, [request.form['add_tag']], user)
|
music_wrappers = get_cached_wrappers_by_tags(var.bot, [request.form['add_tag']], user)
|
||||||
for music_wrapper in music_wrappers:
|
for music_wrapper in music_wrappers:
|
||||||
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
log.info("cmd: add to playlist: " + music_wrapper.format_debug_string())
|
||||||
var.playlist.extend(music_wrappers)
|
var.playlist.extend(music_wrappers)
|
||||||
|
116
media/cache.py
116
media/cache.py
@ -1,4 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
from database import MusicDatabase
|
from database import MusicDatabase
|
||||||
import json
|
import json
|
||||||
import threading
|
import threading
|
||||||
@ -90,6 +92,8 @@ class MusicCache(dict):
|
|||||||
del self.file_id_lookup[item.path]
|
del self.file_id_lookup[item.path]
|
||||||
self.files.remove(item.path)
|
self.files.remove(item.path)
|
||||||
self.save_dir_cache()
|
self.save_dir_cache()
|
||||||
|
elif item.type == 'url':
|
||||||
|
os.remove(item.path)
|
||||||
|
|
||||||
if item.id in self:
|
if item.id in self:
|
||||||
del self[item.id]
|
del self[item.id]
|
||||||
@ -139,3 +143,115 @@ class MusicCache(dict):
|
|||||||
self.dir.add_file(file)
|
self.dir.add_file(file)
|
||||||
self.dir_lock.release()
|
self.dir_lock.release()
|
||||||
|
|
||||||
|
|
||||||
|
class CachedItemWrapper:
|
||||||
|
def __init__(self, lib, id, type, user):
|
||||||
|
self.lib = lib
|
||||||
|
self.id = id
|
||||||
|
self.user = user
|
||||||
|
self.type = type
|
||||||
|
self.log = logging.getLogger("bot")
|
||||||
|
self.version = 0
|
||||||
|
|
||||||
|
def item(self):
|
||||||
|
return self.lib[self.id]
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
dict = self.item().to_dict()
|
||||||
|
dict['user'] = self.user
|
||||||
|
return dict
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
ret = self.item().validate()
|
||||||
|
if ret and self.item().version > self.version:
|
||||||
|
self.version = self.item().version
|
||||||
|
self.lib.save(self.id)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def prepare(self):
|
||||||
|
ret = self.item().prepare()
|
||||||
|
if ret and self.item().version > self.version:
|
||||||
|
self.version = self.item().version
|
||||||
|
self.lib.save(self.id)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def async_prepare(self):
|
||||||
|
th = threading.Thread(
|
||||||
|
target=self.prepare, name="Prepare-" + self.id[:7])
|
||||||
|
self.log.info(
|
||||||
|
"%s: start preparing item in thread: " % self.item().type + self.format_debug_string())
|
||||||
|
th.daemon = True
|
||||||
|
th.start()
|
||||||
|
return th
|
||||||
|
|
||||||
|
def uri(self):
|
||||||
|
return self.item().uri()
|
||||||
|
|
||||||
|
def add_tags(self, tags):
|
||||||
|
self.item().add_tags(tags)
|
||||||
|
if self.item().version > self.version:
|
||||||
|
self.version = self.item().version
|
||||||
|
self.lib.save(self.id)
|
||||||
|
|
||||||
|
def remove_tags(self, tags):
|
||||||
|
self.item().remove_tags(tags)
|
||||||
|
if self.item().version > self.version:
|
||||||
|
self.version = self.item().version
|
||||||
|
self.lib.save(self.id)
|
||||||
|
|
||||||
|
def clear_tags(self):
|
||||||
|
self.item().clear_tags()
|
||||||
|
if self.item().version > self.version:
|
||||||
|
self.version = self.item().version
|
||||||
|
self.lib.save(self.id)
|
||||||
|
|
||||||
|
def is_ready(self):
|
||||||
|
return self.item().is_ready()
|
||||||
|
|
||||||
|
def is_failed(self):
|
||||||
|
return self.item().is_failed()
|
||||||
|
|
||||||
|
def format_current_playing(self):
|
||||||
|
return self.item().format_current_playing(self.user)
|
||||||
|
|
||||||
|
def format_song_string(self):
|
||||||
|
return self.item().format_song_string(self.user)
|
||||||
|
|
||||||
|
def format_short_string(self):
|
||||||
|
return self.item().format_short_string()
|
||||||
|
|
||||||
|
def format_debug_string(self):
|
||||||
|
return self.item().format_debug_string()
|
||||||
|
|
||||||
|
def display_type(self):
|
||||||
|
return self.item().display_type()
|
||||||
|
|
||||||
|
|
||||||
|
# Remember!!! Get wrapper functions will automatically add items into the cache!
|
||||||
|
def get_cached_wrapper_from_scrap(bot, **kwargs):
|
||||||
|
item = var.cache.get_item(bot, **kwargs)
|
||||||
|
if 'user' not in kwargs:
|
||||||
|
raise KeyError("Which user added this song?")
|
||||||
|
return CachedItemWrapper(var.cache, item.id, kwargs['type'], kwargs['user'])
|
||||||
|
|
||||||
|
|
||||||
|
def get_cached_wrapper_from_dict(bot, dict_from_db, user):
|
||||||
|
item = dict_to_item(bot, dict_from_db)
|
||||||
|
var.cache[dict_from_db['id']] = item
|
||||||
|
return CachedItemWrapper(var.cache, item.id, item.type, user)
|
||||||
|
|
||||||
|
|
||||||
|
def get_cached_wrapper_by_id(bot, id, user):
|
||||||
|
item = var.cache.get_item_by_id(bot, id)
|
||||||
|
if item:
|
||||||
|
return CachedItemWrapper(var.cache, item.id, item.type, user)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_cached_wrappers_by_tags(bot, tags, user):
|
||||||
|
items = var.cache.get_items_by_tags(bot, tags)
|
||||||
|
ret = []
|
||||||
|
for item in items:
|
||||||
|
ret.append(CachedItemWrapper(var.cache, item.id, item.type, user))
|
||||||
|
return ret
|
@ -1,127 +1,12 @@
|
|||||||
import json
|
import json
|
||||||
import random
|
|
||||||
import threading
|
import threading
|
||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import variables as var
|
import variables as var
|
||||||
from media.file import FileItem
|
from media.cache import CachedItemWrapper, get_cached_wrapper_from_dict, get_cached_wrapper_by_id
|
||||||
from media.item import dict_to_item
|
|
||||||
from media.url import URLItem
|
|
||||||
from media.url_from_playlist import PlaylistURLItem
|
|
||||||
from media.radio import RadioItem
|
|
||||||
from database import MusicDatabase
|
|
||||||
from media.cache import MusicCache
|
|
||||||
|
|
||||||
class PlaylistItemWrapper:
|
|
||||||
def __init__(self, lib, id, type, user):
|
|
||||||
self.lib = lib
|
|
||||||
self.id = id
|
|
||||||
self.user = user
|
|
||||||
self.type = type
|
|
||||||
self.log = logging.getLogger("bot")
|
|
||||||
self.version = 0
|
|
||||||
|
|
||||||
def item(self):
|
|
||||||
return self.lib[self.id]
|
|
||||||
|
|
||||||
def to_dict(self):
|
|
||||||
dict = self.item().to_dict()
|
|
||||||
dict['user'] = self.user
|
|
||||||
return dict
|
|
||||||
|
|
||||||
def validate(self):
|
|
||||||
ret = self.item().validate()
|
|
||||||
if ret and self.item().version > self.version:
|
|
||||||
self.version = self.item().version
|
|
||||||
self.lib.save(self.id)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def prepare(self):
|
|
||||||
ret = self.item().prepare()
|
|
||||||
if ret and self.item().version > self.version:
|
|
||||||
self.version = self.item().version
|
|
||||||
self.lib.save(self.id)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def async_prepare(self):
|
|
||||||
th = threading.Thread(
|
|
||||||
target=self.prepare, name="Prepare-" + self.id[:7])
|
|
||||||
self.log.info(
|
|
||||||
"%s: start preparing item in thread: " % self.item().type + self.format_debug_string())
|
|
||||||
th.daemon = True
|
|
||||||
th.start()
|
|
||||||
return th
|
|
||||||
|
|
||||||
def uri(self):
|
|
||||||
return self.item().uri()
|
|
||||||
|
|
||||||
def add_tags(self, tags):
|
|
||||||
self.item().add_tags(tags)
|
|
||||||
if self.item().version > self.version:
|
|
||||||
self.version = self.item().version
|
|
||||||
self.lib.save(self.id)
|
|
||||||
|
|
||||||
def remove_tags(self, tags):
|
|
||||||
self.item().remove_tags(tags)
|
|
||||||
if self.item().version > self.version:
|
|
||||||
self.version = self.item().version
|
|
||||||
self.lib.save(self.id)
|
|
||||||
|
|
||||||
def clear_tags(self):
|
|
||||||
self.item().clear_tags()
|
|
||||||
if self.item().version > self.version:
|
|
||||||
self.version = self.item().version
|
|
||||||
self.lib.save(self.id)
|
|
||||||
|
|
||||||
def is_ready(self):
|
|
||||||
return self.item().is_ready()
|
|
||||||
|
|
||||||
def is_failed(self):
|
|
||||||
return self.item().is_failed()
|
|
||||||
|
|
||||||
def format_current_playing(self):
|
|
||||||
return self.item().format_current_playing(self.user)
|
|
||||||
|
|
||||||
def format_song_string(self):
|
|
||||||
return self.item().format_song_string(self.user)
|
|
||||||
|
|
||||||
def format_short_string(self):
|
|
||||||
return self.item().format_short_string()
|
|
||||||
|
|
||||||
def format_debug_string(self):
|
|
||||||
return self.item().format_debug_string()
|
|
||||||
|
|
||||||
def display_type(self):
|
|
||||||
return self.item().display_type()
|
|
||||||
|
|
||||||
|
|
||||||
# Remember!!! Using these three get wrapper functions will automatically add items into the cache!
|
|
||||||
def get_item_wrapper_from_scrap(bot, **kwargs):
|
|
||||||
item = var.cache.get_item(bot, **kwargs)
|
|
||||||
if 'user' not in kwargs:
|
|
||||||
raise KeyError("Which user added this song?")
|
|
||||||
return PlaylistItemWrapper(var.cache, item.id, kwargs['type'], kwargs['user'])
|
|
||||||
|
|
||||||
def get_item_wrapper_from_dict(bot, dict_from_db, user):
|
|
||||||
item = dict_to_item(bot, dict_from_db)
|
|
||||||
var.cache[dict_from_db['id']] = item
|
|
||||||
return PlaylistItemWrapper(var.cache, item.id, item.type, user)
|
|
||||||
|
|
||||||
def get_item_wrapper_by_id(bot, id, user):
|
|
||||||
item = var.cache.get_item_by_id(bot, id)
|
|
||||||
if item:
|
|
||||||
return PlaylistItemWrapper(var.cache, item.id, item.type, user)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_item_wrappers_by_tags(bot, tags, user):
|
|
||||||
items = var.cache.get_items_by_tags(bot, tags)
|
|
||||||
ret = []
|
|
||||||
for item in items:
|
|
||||||
ret.append(PlaylistItemWrapper(var.cache, item.id, item.type, user))
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def get_playlist(mode, _list=None, index=None):
|
def get_playlist(mode, _list=None, index=None):
|
||||||
if _list and index is None:
|
if _list and index is None:
|
||||||
@ -147,6 +32,7 @@ def get_playlist(mode, _list=None, index=None):
|
|||||||
return AutoPlaylist().from_list(_list, index)
|
return AutoPlaylist().from_list(_list, index)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
class BasePlaylist(list):
|
class BasePlaylist(list):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@ -168,7 +54,7 @@ class BasePlaylist(list):
|
|||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def append(self, item: PlaylistItemWrapper):
|
def append(self, item: CachedItemWrapper):
|
||||||
self.version += 1
|
self.version += 1
|
||||||
super().append(item)
|
super().append(item)
|
||||||
self.pending_items.append(item)
|
self.pending_items.append(item)
|
||||||
@ -310,7 +196,7 @@ class BasePlaylist(list):
|
|||||||
items.sort(key=lambda v: int(v[0]))
|
items.sort(key=lambda v: int(v[0]))
|
||||||
for item in items:
|
for item in items:
|
||||||
item = json.loads(item[1])
|
item = json.loads(item[1])
|
||||||
music_wrapper = get_item_wrapper_by_id(var.bot, item['id'], item['user'])
|
music_wrapper = get_cached_wrapper_by_id(var.bot, item['id'], item['user'])
|
||||||
if music_wrapper:
|
if music_wrapper:
|
||||||
music_wrappers.append(music_wrapper)
|
music_wrappers.append(music_wrapper)
|
||||||
self.from_list(music_wrappers, current_index)
|
self.from_list(music_wrappers, current_index)
|
||||||
@ -457,7 +343,7 @@ class AutoPlaylist(OneshotPlaylist):
|
|||||||
def refresh(self):
|
def refresh(self):
|
||||||
dicts = var.music_db.query_random_music(var.config.getint("bot", "autoplay_length", fallback=5))
|
dicts = var.music_db.query_random_music(var.config.getint("bot", "autoplay_length", fallback=5))
|
||||||
if dicts:
|
if dicts:
|
||||||
_list = [get_item_wrapper_from_dict(var.bot, _dict, "AutoPlay") for _dict in dicts]
|
_list = [get_cached_wrapper_from_dict(var.bot, _dict, "AutoPlay") for _dict in dicts]
|
||||||
self.from_list(_list, -1)
|
self.from_list(_list, -1)
|
||||||
|
|
||||||
# def from_list(self, _list, current_index):
|
# def from_list(self, _list, current_index):
|
||||||
|
@ -272,7 +272,7 @@ class MumbleBot:
|
|||||||
self.log.info("bot: {:s} matches {:s}".format(command, matches[0]))
|
self.log.info("bot: {:s} matches {:s}".format(command, matches[0]))
|
||||||
command_exc = matches[0]
|
command_exc = matches[0]
|
||||||
|
|
||||||
if not self.cmd_handle[command]['access_outside_channel'] \
|
if not self.cmd_handle[command_exc]['access_outside_channel'] \
|
||||||
and not self.is_admin(user) \
|
and not self.is_admin(user) \
|
||||||
and not var.config.getboolean('bot', 'allow_other_channel_message') \
|
and not var.config.getboolean('bot', 'allow_other_channel_message') \
|
||||||
and self.mumble.users[text.actor]['channel_id'] != self.mumble.users.myself[
|
and self.mumble.users[text.actor]['channel_id'] != self.mumble.users.myself[
|
||||||
@ -297,7 +297,7 @@ class MumbleBot:
|
|||||||
def send_msg(self, msg, text=None):
|
def send_msg(self, msg, text=None):
|
||||||
msg = msg.encode('utf-8', 'ignore').decode('utf-8')
|
msg = msg.encode('utf-8', 'ignore').decode('utf-8')
|
||||||
# text if the object message, contain information if direct message or channel message
|
# text if the object message, contain information if direct message or channel message
|
||||||
if not text or not text.session:
|
if not text:
|
||||||
own_channel = self.mumble.channels[self.mumble.users.myself['channel_id']]
|
own_channel = self.mumble.channels[self.mumble.users.myself['channel_id']]
|
||||||
own_channel.send_text_message(msg)
|
own_channel.send_text_message(msg)
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user