mirror of
https://github.com/azlux/botamusique
synced 2024-11-27 15:44:05 +00:00
Compare commits
No commits in common. "37666c7daf43f12d47e5bd37af1ab86f36f84dcd" and "a034d2a85d9cc9959522bb8802744f3e4299e3f7" have entirely different histories.
37666c7daf
...
a034d2a85d
@ -1148,11 +1148,6 @@ def cmd_shortlist(bot, user, text, command, parameter):
|
|||||||
|
|
||||||
def cmd_delete_from_library(bot, user, text, command, parameter):
|
def cmd_delete_from_library(bot, user, text, command, parameter):
|
||||||
global song_shortlist, log
|
global song_shortlist, log
|
||||||
|
|
||||||
if not var.config.getboolean("bot", "delete_allowed", fallback=True):
|
|
||||||
bot.mumble.users[text.actor].send_text_message(tr('not_admin'))
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
indexes = [int(i) for i in parameter.split(" ")]
|
indexes = [int(i) for i in parameter.split(" ")]
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -18,75 +18,108 @@
|
|||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
||||||
[server]
|
[server]
|
||||||
certificate =
|
|
||||||
channel =
|
|
||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
password =
|
|
||||||
port = 64738
|
port = 64738
|
||||||
|
password =
|
||||||
|
channel =
|
||||||
|
# example: token1,token2
|
||||||
tokens =
|
tokens =
|
||||||
|
certificate =
|
||||||
|
|
||||||
[bot]
|
[bot]
|
||||||
admin =
|
username = botamusique
|
||||||
|
comment = "Hi, I'm here to play radio, local music or youtube/soundcloud music. Have fun!"
|
||||||
|
avatar =
|
||||||
|
# default volume from 0 to 1.
|
||||||
|
volume = 0.1
|
||||||
|
stereo = True
|
||||||
|
# bandwidth used by the bot
|
||||||
|
bandwidth = 96000
|
||||||
|
# playback mode should be one of "one-shot", "repeat", "random", "autoplay"
|
||||||
|
playback_mode = one-shot
|
||||||
|
autoplay_length = 5
|
||||||
|
clear_when_stop_in_oneshot = False
|
||||||
|
|
||||||
|
# target version, stable/testing/git (testing needs to be installed with git)
|
||||||
|
target_version = git
|
||||||
|
|
||||||
|
# Users allowed to kill the bot, or ban URLs.
|
||||||
|
admin = User1;User2;
|
||||||
|
# Folder that stores your local songs.
|
||||||
|
music_folder = music_folder/
|
||||||
|
# Folder that stores the downloaded music.
|
||||||
|
tmp_folder = /tmp/
|
||||||
|
pip3_path = venv/bin/pip
|
||||||
|
auto_check_update = True
|
||||||
|
logfile =
|
||||||
|
|
||||||
|
# in MB, 0 for no cache, -1 for unlimited size
|
||||||
|
tmp_folder_max_size = 10
|
||||||
|
|
||||||
|
# how many times the bot will try to download an item
|
||||||
|
download_attempts = 2
|
||||||
|
|
||||||
|
ignored_folders = tmp
|
||||||
|
ignored_files = Thumbs.db
|
||||||
|
|
||||||
|
announce_current_music = True
|
||||||
allow_other_channel_message = False
|
allow_other_channel_message = False
|
||||||
allow_private_message = True
|
allow_private_message = True
|
||||||
announce_current_music = True
|
|
||||||
auto_check_update = True
|
# 'save_music_library': If this is set True, the bot will save the metadata of music into the database.
|
||||||
autoplay_length = 5
|
|
||||||
avatar =
|
|
||||||
bandwidth = 96000
|
|
||||||
clear_when_stop_in_oneshot = False
|
|
||||||
comment = "Hi, I'm here to play radio, local music or youtube/soundcloud music. Have fun!"
|
|
||||||
database_path =
|
|
||||||
delete_allowed = True
|
|
||||||
download_attempts = 2
|
|
||||||
ducking = False
|
|
||||||
ducking_threshold = 3000
|
|
||||||
ducking_volume = 0.05
|
|
||||||
ignored_files = Thumbs.db
|
|
||||||
ignored_folders = tmp
|
|
||||||
language = en_US
|
|
||||||
logfile =
|
|
||||||
max_track_duration = 60
|
|
||||||
max_track_playlist = 20
|
|
||||||
music_database_path =
|
|
||||||
music_folder = music_folder/
|
|
||||||
pip3_path = venv/bin/pip
|
|
||||||
playback_mode = one-shot
|
|
||||||
redirect_stderr = True
|
|
||||||
refresh_cache_on_startup = True
|
|
||||||
save_music_library = True
|
save_music_library = True
|
||||||
|
|
||||||
|
# 'refresh_cache_on_startup': If this is set true, the bot will refresh its music directory cache when starting up.
|
||||||
|
# But it won't reload metadata from each files. If set to False, it will used the cache last time.
|
||||||
|
refresh_cache_on_startup = True
|
||||||
|
|
||||||
|
# If save_playlist is set True, the bot will save current
|
||||||
|
# playlist before quitting and reload it the next time it start.
|
||||||
save_playlist = True
|
save_playlist = True
|
||||||
stereo = True
|
|
||||||
target_version = git
|
# Maximum track played when a playlist is added.
|
||||||
tmp_folder = /tmp/
|
max_track_playlist = 20
|
||||||
tmp_folder_max_size = 10
|
|
||||||
username = botamusique
|
# Maximum music duration (minutes)
|
||||||
volume = 0.1
|
max_track_duration = 60
|
||||||
|
|
||||||
|
# If ducking is enabled, the bot will automatically attenuate its volume when someone is talking.
|
||||||
|
ducking = False
|
||||||
|
ducking_volume = 0.05
|
||||||
|
ducking_threshold = 3000
|
||||||
|
|
||||||
|
# if when_nobody_in_channel is enabled and the bot is left alone, action are make :
|
||||||
|
# "pause" (pause current song), "pause_resume" (pause current song and resume once somebody reenters the channel), "stop" (also clears playlist) or "nothing" (keep playing music)
|
||||||
when_nobody_in_channel = nothing
|
when_nobody_in_channel = nothing
|
||||||
youtube_query_cookie =
|
|
||||||
|
|
||||||
[webinterface]
|
[webinterface]
|
||||||
access_address = http://127.0.0.1:8181
|
# Set enabled to True if you'd like to use the web interface to manage your playlist, upload files, etc.
|
||||||
auth_method = none
|
|
||||||
enabled = False
|
enabled = False
|
||||||
flask_secret = ChangeThisPassword
|
|
||||||
is_web_proxified = True
|
is_web_proxified = True
|
||||||
listening_addr = 127.0.0.1
|
listening_addr = 127.0.0.1
|
||||||
listening_port = 8181
|
listening_port = 8181
|
||||||
max_attempts = 10
|
|
||||||
max_upload_file_size = 30M
|
|
||||||
password =
|
|
||||||
upload_enabled = True
|
|
||||||
user =
|
|
||||||
web_logfile =
|
web_logfile =
|
||||||
|
|
||||||
|
auth_method = none
|
||||||
|
user =
|
||||||
|
password =
|
||||||
|
max_attempts = 10
|
||||||
|
|
||||||
|
access_address = http://127.0.0.1:8181
|
||||||
|
|
||||||
|
flask_secret = ChangeThisPassword
|
||||||
|
|
||||||
|
upload_enabled = True
|
||||||
|
max_upload_file_size = 30M
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
# Set ffmpeg to True if you want to display DEBUG level log of ffmpeg.
|
||||||
ffmpeg = False
|
ffmpeg = False
|
||||||
mumble_connection = False
|
|
||||||
redirect_ffmpeg_log = True
|
redirect_ffmpeg_log = True
|
||||||
|
mumbleConnection = False
|
||||||
youtube_dl = False
|
youtube_dl = False
|
||||||
|
|
||||||
|
# This is a list of default radio stations.
|
||||||
[radio]
|
[radio]
|
||||||
ponyville = http://192.99.131.205:8000/stream.mp3 "Here a command of !radio comment"
|
ponyville = http://192.99.131.205:8000/stream.mp3 "Here a command of !radio comment"
|
||||||
luna = http://radio.ponyvillelive.com:8002/stream "calm and orchestra music"
|
luna = http://radio.ponyvillelive.com:8002/stream "calm and orchestra music"
|
||||||
@ -94,65 +127,82 @@ radiobrony = http://62.210.138.34:8000/live "Brony music of a friend"
|
|||||||
jazz = http://jazz-wr04.ice.infomaniak.ch/jazz-wr04-128.mp3 "Jazz Yeah !"
|
jazz = http://jazz-wr04.ice.infomaniak.ch/jazz-wr04-128.mp3 "Jazz Yeah !"
|
||||||
|
|
||||||
[youtube_dl]
|
[youtube_dl]
|
||||||
cookie_file =
|
|
||||||
source_address =
|
source_address =
|
||||||
|
cookiefile =
|
||||||
user_agent =
|
user_agent =
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# =========================================================
|
||||||
|
# WARNING: WE DO NOT SUGGEST YOU MODIFY THE FOLLOWING
|
||||||
|
# PARTS, EXCEPT IF YOU KNOW WHAT YOU ARE DOING.
|
||||||
|
# =========================================================
|
||||||
[commands]
|
[commands]
|
||||||
add_from_shortlist = shortlist, sl
|
# This is a list of characters the bot recognizes as command prefix.
|
||||||
add_tag = addtag
|
|
||||||
add_webinterface_user = webuseradd
|
|
||||||
change_user_password = password
|
|
||||||
clear = clear
|
|
||||||
command_symbol = !:!
|
command_symbol = !:!
|
||||||
current_music = np, now
|
# This option split username, in case you use such kind of mumo plugins https://wiki.mumble.info/wiki/Mumo#Set_Status
|
||||||
delete_from_library = delete
|
split_username_at_space = False
|
||||||
drop_database = dropdatabase
|
|
||||||
ducking = duck
|
|
||||||
ducking_threshold = duckthres
|
|
||||||
ducking_volume = duckv
|
|
||||||
find_tagged = findtagged, ft
|
|
||||||
help = help
|
|
||||||
joinme = joinme
|
|
||||||
kill = kill
|
|
||||||
last = last
|
|
||||||
list_file = listfile
|
|
||||||
list_webinterface_user = webuserlist
|
|
||||||
mode = mode
|
|
||||||
pause = pause
|
|
||||||
play = p, play
|
|
||||||
play_file = file, f
|
play_file = file, f
|
||||||
play_file_match = filematch, fm
|
play_file_match = filematch, fm
|
||||||
play_playlist = playlist
|
|
||||||
play_radio = radio
|
|
||||||
play_tag = tag
|
|
||||||
play_url = url
|
play_url = url
|
||||||
queue = queue
|
play_radio = radio
|
||||||
random = random
|
play_playlist = playlist
|
||||||
rb_play = rbplay
|
|
||||||
rb_query = rbquery
|
rb_query = rbquery
|
||||||
remove = rm
|
rb_play = rbplay
|
||||||
remove_tag = untag
|
|
||||||
remove_webinterface_user = webuserdel
|
yt_search = ysearch
|
||||||
repeat = repeat
|
yt_play = yplay
|
||||||
requests_webinterface_access = web
|
|
||||||
rescan = rescan
|
help = help
|
||||||
search = search
|
pause = pause
|
||||||
skip = skip
|
play = p, play
|
||||||
split_username_at_space = False
|
|
||||||
stop = stop
|
stop = stop
|
||||||
|
remove = rm
|
||||||
|
clear = clear
|
||||||
|
skip = skip
|
||||||
|
last = last
|
||||||
|
current_music = np, now
|
||||||
|
volume = volume
|
||||||
|
kill = kill
|
||||||
stop_and_getout = oust
|
stop_and_getout = oust
|
||||||
|
joinme = joinme
|
||||||
|
queue = queue
|
||||||
|
repeat = repeat
|
||||||
|
random = random
|
||||||
|
version = version
|
||||||
|
mode = mode
|
||||||
update = update
|
update = update
|
||||||
|
list_file = listfile
|
||||||
|
|
||||||
|
play_tag = tag
|
||||||
|
add_tag = addtag
|
||||||
|
remove_tag = untag
|
||||||
|
find_tagged = findtagged, ft
|
||||||
|
search = search
|
||||||
|
delete_from_library = delete
|
||||||
|
add_from_shortlist = shortlist, sl
|
||||||
|
|
||||||
|
user_ban = userban
|
||||||
|
user_unban = userunban
|
||||||
url_ban = urlban
|
url_ban = urlban
|
||||||
url_ban_list = urlbanlist
|
url_ban_list = urlbanlist
|
||||||
url_unban = urlunban
|
url_unban = urlunban
|
||||||
url_unwhitelist = urlunwhitelist, urlunw
|
|
||||||
url_whitelist = urlwhitelist, urlw
|
url_whitelist = urlwhitelist, urlw
|
||||||
|
url_unwhitelist = urlunwhitelist, urlunw
|
||||||
url_whitelist_list = urlwhitelistlist, urlwls
|
url_whitelist_list = urlwhitelistlist, urlwls
|
||||||
user_ban = userban
|
|
||||||
user_unban = userunban
|
|
||||||
version = version
|
|
||||||
volume = volume
|
|
||||||
yt_play = yplay
|
|
||||||
yt_search = ysearch
|
|
||||||
|
|
||||||
|
ducking = duck
|
||||||
|
ducking_threshold = duckthres
|
||||||
|
ducking_volume = duckv
|
||||||
|
|
||||||
|
drop_database = dropdatabase
|
||||||
|
rescan = rescan
|
||||||
|
|
||||||
|
requests_webinterface_access = web
|
||||||
|
list_webinterface_user = webuserlist
|
||||||
|
add_webinterface_user = webuseradd
|
||||||
|
remove_webinterface_user = webuserdel
|
||||||
|
change_user_password = password
|
||||||
|
@ -95,11 +95,6 @@ port = 64738
|
|||||||
#allow_other_channel_message = False
|
#allow_other_channel_message = False
|
||||||
#allow_private_message = True
|
#allow_private_message = True
|
||||||
|
|
||||||
# 'delete_allowed': Allow users to delete a file from the library (hard disk).
|
|
||||||
# Works both for command and web interface. After enabling this option, only
|
|
||||||
# admins are allowed to delete files.
|
|
||||||
#delete_allowded = True
|
|
||||||
|
|
||||||
# 'save_music_library': If this is set True, the bot will save the metadata of music into the database.
|
# 'save_music_library': If this is set True, the bot will save the metadata of music into the database.
|
||||||
#save_music_library = True
|
#save_music_library = True
|
||||||
|
|
||||||
@ -171,16 +166,17 @@ port = 64738
|
|||||||
# !! YOU NEED TO CHANGE IT IF auth_method IS 'token'!!
|
# !! YOU NEED TO CHANGE IT IF auth_method IS 'token'!!
|
||||||
# flask_secret = ChangeThisPassword
|
# flask_secret = ChangeThisPassword
|
||||||
|
|
||||||
# 'upload_enabled': Enable the upload function of the web interface. If disabled,
|
# 'upload_enabled': Enable the upload function of the web interface.
|
||||||
# only admins can upload files.
|
|
||||||
# 'maximum_upload_file_size': Unit can be 'B', 'KB', 'MB', 'GB', 'TB'.
|
# 'maximum_upload_file_size': Unit can be 'B', 'KB', 'MB', 'GB', 'TB'.
|
||||||
|
# 'delete_allowed': Allow users to delete a file from the library(hard disk).
|
||||||
#upload_enabled = True
|
#upload_enabled = True
|
||||||
#max_upload_file_size = 30MB
|
#max_upload_file_size = 30MB
|
||||||
|
#delete_allowded = True
|
||||||
|
|
||||||
# [debug] stores some debug settings.
|
# [debug] stores some debug settings.
|
||||||
[debug]
|
[debug]
|
||||||
#ffmpeg = False # Set ffmpeg to True if you want to display DEBUG level log of ffmpeg.
|
#ffmpeg = False # Set ffmpeg to True if you want to display DEBUG level log of ffmpeg.
|
||||||
#mumble_connection = False # Set to True if you need to debug mumble connection (pymumble lib)
|
#mumbleConnection = False # Set to True if you need to debug mumble connection (pymumble lib)
|
||||||
#youtube_dl = False # Set to True if you need debug log from youtube-dl
|
#youtube_dl = False # Set to True if you need debug log from youtube-dl
|
||||||
|
|
||||||
# [radio] is a list of default radio stations.
|
# [radio] is a list of default radio stations.
|
||||||
@ -193,8 +189,8 @@ port = 64738
|
|||||||
[youtube_dl]
|
[youtube_dl]
|
||||||
# source_address , use '::' to force ipv6, "0.0.0.0" to force ipv4, or put the ip addresse you want to use.
|
# source_address , use '::' to force ipv6, "0.0.0.0" to force ipv4, or put the ip addresse you want to use.
|
||||||
# source_address = '::'
|
# source_address = '::'
|
||||||
# cookie_file , path of the cookie file (usefull if you reach youtube limits https://github.com/ytdl-org/youtube-dl#http-error-429-too-many-requests-or-402-payment-required)
|
# cookiefile , path of the cookie file (usefull if you reach youtube limits https://github.com/ytdl-org/youtube-dl#http-error-429-too-many-requests-or-402-payment-required)
|
||||||
# cookie_file = '/tmp/cooke_ydl'
|
# cookiefile = '/tmp/cooke_ydl'
|
||||||
# user-agent allow the user to force the user-agent of youtube-dl
|
# user-agent allow the user to force the user-agent of youtube-dl
|
||||||
# user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
|
# user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0"
|
||||||
|
|
||||||
|
@ -563,8 +563,8 @@ def library_info():
|
|||||||
|
|
||||||
return jsonify(dict(
|
return jsonify(dict(
|
||||||
dirs=get_all_dirs(),
|
dirs=get_all_dirs(),
|
||||||
upload_enabled=var.config.getboolean("webinterface", "upload_enabled", fallback=True) or var.bot.is_admin(user),
|
upload_enabled=var.config.getboolean("webinterface", "upload_enabled", fallback=True),
|
||||||
delete_allowed=var.config.getboolean("bot", "delete_allowed", fallback=True) or var.bot.is_admin(user),
|
delete_allowed=var.config.getboolean("webinterface", "delete_allowed", fallback=True),
|
||||||
tags=tags,
|
tags=tags,
|
||||||
max_upload_file_size=max_upload_file_size
|
max_upload_file_size=max_upload_file_size
|
||||||
))
|
))
|
||||||
@ -609,7 +609,7 @@ def library():
|
|||||||
|
|
||||||
return redirect("./", code=302)
|
return redirect("./", code=302)
|
||||||
elif payload['action'] == 'delete':
|
elif payload['action'] == 'delete':
|
||||||
if var.config.getboolean("bot", "delete_allowed", fallback=True):
|
if var.config.getboolean("webinterface", "delete_allowed", fallback=True):
|
||||||
items = dicts_to_items(var.music_db.query_music(condition))
|
items = dicts_to_items(var.music_db.query_music(condition))
|
||||||
for item in items:
|
for item in items:
|
||||||
var.playlist.remove_by_id(item.id)
|
var.playlist.remove_by_id(item.id)
|
||||||
|
@ -170,9 +170,9 @@ class URLItem(BaseItem):
|
|||||||
'verbose': var.config.getboolean('debug', 'youtube_dl')
|
'verbose': var.config.getboolean('debug', 'youtube_dl')
|
||||||
}
|
}
|
||||||
|
|
||||||
cookie = var.config.get('youtube_dl', 'cookie_file', fallback=None)
|
cookie = var.config.get('youtube_dl', 'cookiefile', fallback=None)
|
||||||
if cookie:
|
if cookie:
|
||||||
ydl_opts['cookiefile'] = var.config.get('youtube_dl', 'cookie_file', fallback=None)
|
ydl_opts['cookiefile'] = var.config.get('youtube_dl', 'cookiefile', fallback=None)
|
||||||
|
|
||||||
user_agent = var.config.get('youtube_dl', 'user_agent', fallback=None)
|
user_agent = var.config.get('youtube_dl', 'user_agent', fallback=None)
|
||||||
if user_agent:
|
if user_agent:
|
||||||
|
@ -15,9 +15,9 @@ def get_playlist_info(url, start_index=0, user=""):
|
|||||||
'verbose': var.config.getboolean('debug', 'youtube_dl')
|
'verbose': var.config.getboolean('debug', 'youtube_dl')
|
||||||
}
|
}
|
||||||
|
|
||||||
cookie = var.config.get('youtube_dl', 'cookie_file', fallback=None)
|
cookie = var.config.get('youtube_dl', 'cookiefile', fallback=None)
|
||||||
if cookie:
|
if cookie:
|
||||||
ydl_opts['cookiefile'] = var.config.get('youtube_dl', 'cookie_file', fallback=None)
|
ydl_opts['cookiefile'] = var.config.get('youtube_dl', 'cookiefile', fallback=None)
|
||||||
|
|
||||||
user_agent = var.config.get('youtube_dl', 'user_agent', fallback=None)
|
user_agent = var.config.get('youtube_dl', 'user_agent', fallback=None)
|
||||||
if user_agent:
|
if user_agent:
|
||||||
|
31
mumbleBot.py
31
mumbleBot.py
@ -115,7 +115,7 @@ class MumbleBot:
|
|||||||
|
|
||||||
self.mumble = pymumble.Mumble(host, user=self.username, port=port, password=password, tokens=tokens,
|
self.mumble = pymumble.Mumble(host, user=self.username, port=port, password=password, tokens=tokens,
|
||||||
stereo=self.stereo,
|
stereo=self.stereo,
|
||||||
debug=var.config.getboolean('debug', 'mumble_connection'),
|
debug=var.config.getboolean('debug', 'mumbleConnection'),
|
||||||
certfile=certificate)
|
certfile=certificate)
|
||||||
self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_TEXTMESSAGERECEIVED, self.message_received)
|
self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_TEXTMESSAGERECEIVED, self.message_received)
|
||||||
|
|
||||||
@ -798,28 +798,11 @@ if __name__ == '__main__':
|
|||||||
# ======================
|
# ======================
|
||||||
|
|
||||||
config = configparser.ConfigParser(interpolation=None, allow_no_value=True)
|
config = configparser.ConfigParser(interpolation=None, allow_no_value=True)
|
||||||
default_config = configparser.ConfigParser(interpolation=None, allow_no_value=True)
|
|
||||||
var.config = config
|
var.config = config
|
||||||
|
parsed_configs = config.read([util.solve_filepath('configuration.default.ini'), util.solve_filepath(args.config)],
|
||||||
if len(default_config.read(
|
encoding='utf-8')
|
||||||
util.solve_filepath('configuration.default.ini'),
|
if len(parsed_configs) == 0:
|
||||||
encoding='utf-8')) == 0:
|
logging.error('Could not read configuration from file \"{}\"'.format(args.config))
|
||||||
logging.error("Could not read default configuration file 'configuration.default.ini', please check"
|
|
||||||
"your installation.")
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
if len(config.read(
|
|
||||||
[util.solve_filepath('configuration.default.ini'), util.solve_filepath(args.config)],
|
|
||||||
encoding='utf-8')) == 0:
|
|
||||||
logging.error(f'Could not read configuration from file "{args.config}"')
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
extra_configs = util.check_extra_config(config, default_config)
|
|
||||||
if extra_configs:
|
|
||||||
extra_str = ", ".join([f"'[{k}] {v}'" for (k, v) in extra_configs])
|
|
||||||
logging.error(f'Unexpected config items {extra_str} defined in your config file. '
|
|
||||||
f'This is likely caused by a recent change in the names of config items, '
|
|
||||||
f'or the removal of obsolete config items. Please refer to the changelog.')
|
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
# ======================
|
# ======================
|
||||||
@ -862,9 +845,9 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
sanitized_username = "".join([x if x.isalnum() else "_" for x in username])
|
sanitized_username = "".join([x if x.isalnum() else "_" for x in username])
|
||||||
var.settings_db_path = args.db if args.db is not None else util.solve_filepath(
|
var.settings_db_path = args.db if args.db is not None else util.solve_filepath(
|
||||||
config.get("bot", "database_path", fallback="") or f"settings-{sanitized_username}.db")
|
config.get("bot", "database_path", fallback=f"settings-{sanitized_username}.db"))
|
||||||
var.music_db_path = args.music_db if args.music_db is not None else util.solve_filepath(
|
var.music_db_path = args.music_db if args.music_db is not None else util.solve_filepath(
|
||||||
config.get("bot", "music_database_path", fallback="") or "music.db")
|
config.get("bot", "music_database_path", fallback="music.db"))
|
||||||
|
|
||||||
var.db = SettingsDatabase(var.settings_db_path)
|
var.db = SettingsDatabase(var.settings_db_path)
|
||||||
|
|
||||||
|
13
util.py
13
util.py
@ -561,16 +561,3 @@ def clear_tmp_folder(path, size):
|
|||||||
except (FileNotFoundError, OSError):
|
except (FileNotFoundError, OSError):
|
||||||
continue
|
continue
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def check_extra_config(config, template):
|
|
||||||
extra = []
|
|
||||||
|
|
||||||
for key in config.sections():
|
|
||||||
if key in ['radio']:
|
|
||||||
continue
|
|
||||||
for opt in config.options(key):
|
|
||||||
if not template.has_option(key, opt):
|
|
||||||
extra.append((key, opt))
|
|
||||||
|
|
||||||
return extra
|
|
@ -530,9 +530,10 @@ function displayLibraryControls(data) {
|
|||||||
|
|
||||||
if (data.delete_allowed) {
|
if (data.delete_allowed) {
|
||||||
$('#deleteAllowed').val('true');
|
$('#deleteAllowed').val('true');
|
||||||
|
$('.library-delete').show();
|
||||||
} else {
|
} else {
|
||||||
$('#deleteAllowed').val('false');
|
$('#uploadDisabled').val('false');
|
||||||
$('.library-delete').remove();
|
$('.library-delete').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
const dataList = $('#upload-target-dirs');
|
const dataList = $('#upload-target-dirs');
|
||||||
|
@ -269,7 +269,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<button class="library-item-trash btn btn-danger btn-sm btn-space library-delete" type="button"
|
<button class="library-item-trash btn btn-danger btn-sm btn-space library-delete" type="button"
|
||||||
aria-label="{{ tr('remove_song_from_library') }}">
|
aria-label="{{ tr('remove_song_from_library') }}">
|
||||||
<i class="fas fa-trash-alt" aria-hidden="true"></i>
|
<i class="fas fa-trash-alt"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user