diff --git a/.drone.yml b/.drone.yml index da54c2b..4bf22b1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,18 +3,22 @@ type: docker name: default steps: - - name: build + - name: build-web image: node commands: - - cd web - - npm install - - npm run build - - cd .. + - (cd web && npm install && npm run build) + + - name: translate-web + image: python:3 + commands: + - pip3 install jinja2 + - (cd templates/ && ./translate.py) - name: deploy-testing image: debian commands: - - apt-get -qq update && apt-get -qq install git > /dev/null + - apt-get -qq update && apt-get -qq install git python3-requests > /dev/null + - (cd lang && ./sync_translation.py --client $TRADUORA_W_CLIENT --secret $TRADUORA_W_SECRET --push) - sed -i 's/target_version = git/target_version = testing/' configuration.default.ini - version=$(git rev-parse HEAD) - echo "current git commit is $version" @@ -53,7 +57,8 @@ steps: - name: deploy-stable image: debian commands: - - apt-get -qq update && apt-get -qq install jq curl git pandoc > /dev/null + - apt-get -qq update && apt-get -qq install jq curl git pandoc python3-requests > /dev/null + - (cd lang && ./sync_translation.py --client $TRADUORA_W_CLIENT --secret $TRADUORA_W_SECRET --push) - sed -i 's/target_version = git/target_version = stable/' configuration.default.ini - git fetch --tags - version=$(git describe --abbrev=0 --tags) @@ -85,6 +90,25 @@ steps: when: event: - tag + + - name: fetch-translate + image: debian + commands: + - apt update && apt install -y git python3-requests hub + - git branch bot-traduora && git checkout bot-traduora + - (cd lang/ && ./sync_translation.py --client $TRADUORA_R_CLIENT --secret $TRADUORA_R_SECRET --fetch) + - git add lang/* && git status + - git config --global user.email "github@azlux.fr" && git config --global user.name "azlux" + - "git commit -a -m 'Bot: update strings'" + - git remote set-url origin https://azlux:$GITHUB_API@github.com/azlux/botamusique/ + - git push --set-upstream origin new-translations && git push + - "GITHUB_USER=\"azlux\" GITHUB_TOKEN=\"$GITHUB_API\" hub pull-request -m \"Bot: TRADUORA Update\"" + when: + event: + - cron + cron: + - auto-fetch-lang + volumes: - name: repo diff --git a/.gitignore b/.gitignore index e649d17..54ac0c2 100644 --- a/.gitignore +++ b/.gitignore @@ -116,7 +116,7 @@ tmp/ *.db -templates/* +templates/*.html # Pycharm .idea/ diff --git a/README.md b/README.md index dfed6a5..a26fd8e 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,8 @@ cd botamusique python3 -m venv venv venv/bin/pip install wheel venv/bin/pip install -r requirements.txt -cd web -npm install -npm run build +(cd web && npm install && npm run build) +(cd templates/ && ./translate.py) ``` diff --git a/command.py b/command.py index e86866a..29d4f48 100644 --- a/command.py +++ b/command.py @@ -6,7 +6,8 @@ import json import re import pymumble_py3 as pymumble -import constants +from constants import tr_cli as tr +from constants import commands import interface import media.system import util @@ -22,56 +23,56 @@ log = logging.getLogger("bot") def register_all_commands(bot): - bot.register_command(constants.commands('joinme'), cmd_joinme, access_outside_channel=True) - bot.register_command(constants.commands('user_ban'), cmd_user_ban, no_partial_match=True, admin=True) - bot.register_command(constants.commands('user_unban'), cmd_user_unban, no_partial_match=True, admin=True) - bot.register_command(constants.commands('url_ban_list'), cmd_url_ban_list, no_partial_match=True, admin=True) - bot.register_command(constants.commands('url_ban'), cmd_url_ban, no_partial_match=True, admin=True) - bot.register_command(constants.commands('url_unban'), cmd_url_unban, no_partial_match=True, admin=True) - bot.register_command(constants.commands('play'), cmd_play) - 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_match'), cmd_play_file_match) - bot.register_command(constants.commands('play_url'), cmd_play_url) - bot.register_command(constants.commands('play_playlist'), cmd_play_playlist) - bot.register_command(constants.commands('play_radio'), cmd_play_radio) - bot.register_command(constants.commands('play_tag'), cmd_play_tags) - bot.register_command(constants.commands('rb_query'), cmd_rb_query) - bot.register_command(constants.commands('rb_play'), cmd_rb_play) - bot.register_command(constants.commands('yt_search'), cmd_yt_search) - bot.register_command(constants.commands('yt_play'), cmd_yt_play) - bot.register_command(constants.commands('help'), cmd_help, no_partial_match=False, access_outside_channel=True) - bot.register_command(constants.commands('stop'), cmd_stop) - bot.register_command(constants.commands('clear'), cmd_clear) - bot.register_command(constants.commands('kill'), cmd_kill, admin=True) - bot.register_command(constants.commands('update'), cmd_update, no_partial_match=True, admin=True) - 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('ducking'), cmd_ducking) - bot.register_command(constants.commands('ducking_threshold'), cmd_ducking_threshold) - bot.register_command(constants.commands('ducking_volume'), cmd_ducking_volume) - bot.register_command(constants.commands('current_music'), cmd_current_music) - bot.register_command(constants.commands('skip'), cmd_skip) - bot.register_command(constants.commands('last'), cmd_last) - bot.register_command(constants.commands('remove'), cmd_remove) - bot.register_command(constants.commands('list_file'), cmd_list_file) - bot.register_command(constants.commands('queue'), cmd_queue) - bot.register_command(constants.commands('random'), cmd_random) - bot.register_command(constants.commands('repeat'), cmd_repeat) - bot.register_command(constants.commands('mode'), cmd_mode) - bot.register_command(constants.commands('add_tag'), cmd_add_tag) - bot.register_command(constants.commands('remove_tag'), cmd_remove_tag) - bot.register_command(constants.commands('find_tagged'), cmd_find_tagged) - bot.register_command(constants.commands('search'), cmd_search_library) - bot.register_command(constants.commands('add_from_shortlist'), cmd_shortlist) - bot.register_command(constants.commands('delete_from_library'), cmd_delete_from_library) - bot.register_command(constants.commands('drop_database'), cmd_drop_database, no_partial_match=True, admin=True) - bot.register_command(constants.commands('rescan'), cmd_refresh_cache, no_partial_match=True) - bot.register_command(constants.commands('requests_webinterface_access'), cmd_web_access) - bot.register_command(constants.commands('add_webinterface_user'), cmd_web_user_add, admin=True) - bot.register_command(constants.commands('remove_webinterface_user'), cmd_web_user_remove, admin=True) - bot.register_command(constants.commands('list_webinterface_user'), cmd_web_user_list, admin=True) - bot.register_command(constants.commands('change_user_password'), cmd_user_password, no_partial_match=True) + bot.register_command(commands('joinme'), cmd_joinme, access_outside_channel=True) + bot.register_command(commands('user_ban'), cmd_user_ban, no_partial_match=True, admin=True) + bot.register_command(commands('user_unban'), cmd_user_unban, no_partial_match=True, admin=True) + bot.register_command(commands('url_ban_list'), cmd_url_ban_list, no_partial_match=True, admin=True) + bot.register_command(commands('url_ban'), cmd_url_ban, no_partial_match=True, admin=True) + bot.register_command(commands('url_unban'), cmd_url_unban, no_partial_match=True, admin=True) + bot.register_command(commands('play'), cmd_play) + bot.register_command(commands('pause'), cmd_pause) + bot.register_command(commands('play_file'), cmd_play_file) + bot.register_command(commands('play_file_match'), cmd_play_file_match) + bot.register_command(commands('play_url'), cmd_play_url) + bot.register_command(commands('play_playlist'), cmd_play_playlist) + bot.register_command(commands('play_radio'), cmd_play_radio) + bot.register_command(commands('play_tag'), cmd_play_tags) + bot.register_command(commands('rb_query'), cmd_rb_query) + bot.register_command(commands('rb_play'), cmd_rb_play) + bot.register_command(commands('yt_search'), cmd_yt_search) + bot.register_command(commands('yt_play'), cmd_yt_play) + bot.register_command(commands('help'), cmd_help, no_partial_match=False, access_outside_channel=True) + bot.register_command(commands('stop'), cmd_stop) + bot.register_command(commands('clear'), cmd_clear) + bot.register_command(commands('kill'), cmd_kill, admin=True) + bot.register_command(commands('update'), cmd_update, no_partial_match=True, admin=True) + bot.register_command(commands('stop_and_getout'), cmd_stop_and_getout) + bot.register_command(commands('volume'), cmd_volume) + bot.register_command(commands('ducking'), cmd_ducking) + bot.register_command(commands('ducking_threshold'), cmd_ducking_threshold) + bot.register_command(commands('ducking_volume'), cmd_ducking_volume) + bot.register_command(commands('current_music'), cmd_current_music) + bot.register_command(commands('skip'), cmd_skip) + bot.register_command(commands('last'), cmd_last) + bot.register_command(commands('remove'), cmd_remove) + bot.register_command(commands('list_file'), cmd_list_file) + bot.register_command(commands('queue'), cmd_queue) + bot.register_command(commands('random'), cmd_random) + bot.register_command(commands('repeat'), cmd_repeat) + bot.register_command(commands('mode'), cmd_mode) + bot.register_command(commands('add_tag'), cmd_add_tag) + bot.register_command(commands('remove_tag'), cmd_remove_tag) + bot.register_command(commands('find_tagged'), cmd_find_tagged) + bot.register_command(commands('search'), cmd_search_library) + bot.register_command(commands('add_from_shortlist'), cmd_shortlist) + bot.register_command(commands('delete_from_library'), cmd_delete_from_library) + bot.register_command(commands('drop_database'), cmd_drop_database, no_partial_match=True, admin=True) + bot.register_command(commands('rescan'), cmd_refresh_cache, no_partial_match=True) + bot.register_command(commands('requests_webinterface_access'), cmd_web_access) + bot.register_command(commands('add_webinterface_user'), cmd_web_user_add, admin=True) + bot.register_command(commands('remove_webinterface_user'), cmd_web_user_remove, admin=True) + bot.register_command(commands('list_webinterface_user'), cmd_web_user_list, admin=True) + bot.register_command(commands('change_user_password'), cmd_user_password, no_partial_match=True) # Just for debug use bot.register_command('rtrms', cmd_real_time_rms, True) # bot.register_command('loop', cmd_loop_state, True) @@ -160,7 +161,7 @@ def cmd_url_ban(bot, user, text, command, parameter): var.cache.free_and_delete(item.id) var.playlist.remove_by_id(item.id) else: - bot.send_msg(constants.strings('bad_parameter', command=command), text) + bot.send_msg(tr('bad_parameter', command=command), text) def cmd_url_ban_list(bot, user, text, command, parameter): @@ -184,14 +185,14 @@ def cmd_play(bot, user, text, command, parameter): if params[0].isdigit() and 1 <= int(params[0]) <= len(var.playlist): index = int(params[0]) else: - bot.send_msg(constants.strings('invalid_index', index=parameter), text) + bot.send_msg(tr('invalid_index', index=parameter), text) return if len(params) > 1: try: start_at = util.parse_time(params[1]) except ValueError: - bot.send_msg(constants.strings('bad_parameter', command=command), text) + bot.send_msg(tr('bad_parameter', command=command), text) return if len(var.playlist) > 0: @@ -204,14 +205,14 @@ def cmd_play(bot, user, text, command, parameter): bot.send_msg(var.playlist.current_item().format_current_playing(), text) else: bot.is_pause = False - bot.send_msg(constants.strings('queue_empty'), text) + bot.send_msg(tr('queue_empty'), text) def cmd_pause(bot, user, text, command, parameter): global log bot.pause() - bot.send_channel_msg(constants.strings('paused')) + bot.send_channel_msg(tr('paused')) def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=False): @@ -222,7 +223,7 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals if music_wrappers: var.playlist.append(music_wrappers[0]) log.info("cmd: add to playlist: " + music_wrappers[0].format_debug_string()) - bot.send_msg(constants.strings('file_added', item=music_wrappers[0].format_song_string()), text) + bot.send_msg(tr('file_added', item=music_wrappers[0].format_song_string()), text) return # assume parameter is a folder @@ -230,7 +231,7 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals .and_equal('type', 'file') .and_like('path', parameter + '%')), user) if music_wrappers: - msgs = [constants.strings('multiple_file_added')] + msgs = [tr('multiple_file_added')] for music_wrapper in music_wrappers: log.info("cmd: add to playlist: " + music_wrapper.format_debug_string()) @@ -249,20 +250,20 @@ def cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=Fals music_wrapper = get_cached_wrapper_from_dict(matches[0], user) var.playlist.append(music_wrapper) 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(tr('file_added', item=music_wrapper.format_song_string()), text) return elif len(matches) > 1: song_shortlist = matches - msgs = [constants.strings('multiple_matches')] + msgs = [tr('multiple_matches')] for index, match in enumerate(matches): msgs.append("{:d} - {:s} ({:s})".format( index + 1, match['title'], match['path'])) - msgs.append(constants.strings("shortlist_instruction")) + msgs.append(tr("shortlist_instruction")) send_multi_lines(bot, msgs, text) return if do_not_refresh_cache: - bot.send_msg(constants.strings("no_file"), text) + bot.send_msg(tr("no_file"), text) else: var.cache.build_dir_cache() cmd_play_file(bot, user, text, command, parameter, do_not_refresh_cache=True) @@ -273,7 +274,7 @@ def cmd_play_file_match(bot, user, text, command, parameter, do_not_refresh_cach if parameter: file_dicts = var.music_db.query_music(Condition().and_equal('type', 'file')) - msgs = [constants.strings('multiple_file_added') + "