From aba8a8174da249753c3f1aa08ae69c365e46825e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=BE=85=E7=8B=BC?= Date: Sat, 21 Dec 2024 19:47:40 +0800 Subject: [PATCH 01/18] Update server.py --- modules/mcserver/server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/mcserver/server.py b/modules/mcserver/server.py index e54807aaed..824661d544 100644 --- a/modules/mcserver/server.py +++ b/modules/mcserver/server.py @@ -13,7 +13,7 @@ async def query_java_server( ) -> str: match_object = re.match(r"(.*)[\s:](\d*)", address, re.M | re.I) serip = match_object.group(1) if match_object else address - port = int(match_object.group(2)) if match_object else 25565 + port = match_object.group(2)if match_object else 25565 servers = [] try: @@ -65,7 +65,7 @@ async def query_java_server( async def query_bedrock_server(msg, address, raw=False): match_object = re.match(r"(.*)[\s:](\d*)", address, re.M | re.I) serip = match_object.group(1) if match_object else address - port = int(match_object.group(2)) if match_object else 19132 + port = match_object.group(2) if match_object else 19132 servers = [] try: From 1b8afc75502dcc03d393633eaca85254b0d0a4e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=BE=85=E7=8B=BC?= Date: Sun, 22 Dec 2024 00:12:06 +0800 Subject: [PATCH 02/18] Create nightly-build.yml Delete .github/workflows/weekly-release.yml --- .../workflows/docker-build-and-publish.yml | 8 ++-- .github/workflows/nightly-build.yml | 39 +++++++++++++++++++ .github/workflows/weekly-release.yml | 22 ----------- 3 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/nightly-build.yml delete mode 100644 .github/workflows/weekly-release.yml diff --git a/.github/workflows/docker-build-and-publish.yml b/.github/workflows/docker-build-and-publish.yml index 688ef7f642..1f35156357 100644 --- a/.github/workflows/docker-build-and-publish.yml +++ b/.github/workflows/docker-build-and-publish.yml @@ -1,9 +1,9 @@ -name: Docker Build and Publish +name: "Docker Build and Publish (3:00, UTC+8)" on: - push: - branches: [master] - + schedule: + - cron: "0 3 * * *" + workflow_dispatch: jobs: build-and-push: runs-on: ubuntu-latest diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml new file mode 100644 index 0000000000..c9ddb91a5d --- /dev/null +++ b/.github/workflows/nightly-build.yml @@ -0,0 +1,39 @@ +name: "Nightly Build and Release (3:00, UTC+8)" + +on: + schedule: + - cron: '0 3 * * *' + workflow_dispatch: + +permissions: + contents: write + +jobs: + nightly: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Delete and recreate nightly tag + run: | + if git rev-parse refs/tags/nightly >/dev/null 2>&1; then + git tag -d nightly + git push origin --delete nightly + fi + git tag nightly + git push origin nightly + + - name: Update release version + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + release_exists=$(gh release list --json tagName --jq '.[] | select(.tagName=="nightly") | .tagName') + if [ -n "$release_exists" ]; then + gh release delete nightly -y + fi + gh release create nightly \ + --title "Nightly Release" \ + --notes "> 这是 Nightly 版本,由于无法及时同步代码和验证版本的稳定性,本项目已不再提供正式版本。请点击 Assets -> Source code 下载当前最新源代码。" diff --git a/.github/workflows/weekly-release.yml b/.github/workflows/weekly-release.yml deleted file mode 100644 index 25fa8e6fda..0000000000 --- a/.github/workflows/weekly-release.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: "Weekly Release" - -on: - schedule: - - cron: "0 0 * * 1" - workflow_dispatch: - -jobs: - weekly-release: - name: Weekly Release - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: master - - - uses: rui-costa/action-automatic-semver-releases@v1 - with: - TOKEN: ${{ secrets.GITHUB_TOKEN }} - SEMVER: PATCH From dad5f12efe032aa5ce395ff92ff41cca31c928a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=BE=85=E7=8B=BC?= Date: Tue, 24 Dec 2024 11:23:53 +0800 Subject: [PATCH 03/18] locale --- modules/nintendo_err/__init__.py | 31 +++++++------------------ modules/nintendo_err/locales/zh_cn.json | 7 ++++++ 2 files changed, 16 insertions(+), 22 deletions(-) create mode 100644 modules/nintendo_err/locales/zh_cn.json diff --git a/modules/nintendo_err/__init__.py b/modules/nintendo_err/__init__.py index 20e01bc751..46cbaed48a 100644 --- a/modules/nintendo_err/__init__.py +++ b/modules/nintendo_err/__init__.py @@ -75,35 +75,22 @@ def is_hex(user_input): @staticmethod def check_meme(err: str) -> str: memes = { - "0xdeadbeef": "都坏掉了,不能吃了。", - "0xdeadbabe": "我觉得你有问题。", - "0x8badf00d": "记得垃圾分类。", + "0xdeadbeef": "nintendo_err.message.meme.0xdeadbeef", + "0xdeadbabe": "nintendo_err.message.meme.0xdeadbabe", + "0x8badf00d": "nintendo_err.message.meme.0xbadf00d", } return memes.get(err.casefold()) -e = module("err", developers=["OasisAkari", "kurisu"], doc=True) +e = module("nintendo_err", alias=["err"], developers=["OasisAkari", "kurisu"], doc=True) -@e.command(" {解析任天堂系列主机的报错码并给出原因。}") -async def _(msg: Bot.MessageSession): - """ - Displays information on game console result codes, with a fancy embed. - 0x prefix is not required for hex input. - - Examples: - .err 0xD960D02B - .err D960D02B - .err 022-2634 - .err 102-2804 - .err 2168-0002 - .err 2-ARVHA-0000 - """ +@e.command(" {{nintendo_err.help}}") +async def _(msg: Bot.MessageSession, err_code: str): results = Results() - err = msg.parsed_msg[""] - err = results.fixup_input(err) + err = results.fixup_input(err_code) if meme := results.check_meme(err): - await msg.finish(meme) + await msg.finish(msg.locale.t(meme)) try: ret = results.fetch(err) except ValueError: @@ -117,4 +104,4 @@ async def _(msg: Bot.MessageSession): embed.add_field(name=field.field_name, value=field.message, inline=False) await msg.finish(convert_discord_embed(embed)) else: - await msg.finish("你输入的代码是无效的,或者此功能不支持你使用的主机。") + await msg.finish(msg.locale.t("nintendo_err.message.invalid")) diff --git a/modules/nintendo_err/locales/zh_cn.json b/modules/nintendo_err/locales/zh_cn.json new file mode 100644 index 0000000000..d318354d52 --- /dev/null +++ b/modules/nintendo_err/locales/zh_cn.json @@ -0,0 +1,7 @@ +{ +"nintendo_err.help": "解析任天堂系列主机的报错码并给出原因。", +"nintendo_err.message.invalid": "你输入的代码是无效的,或者此功能不支持你使用的主机。", +"nintendo_err.message.meme.0xdeadbeef": "都坏掉了,不能吃了。", +"nintendo_err.message.meme.0xdeadbabe": "我觉得你有问题。", +"nintendo_err.message.meme.0xbadf00d": "记得垃圾分类。" +} \ No newline at end of file From 3707eee05edb868fd691467ecd1ecb488f5b3ffe Mon Sep 17 00:00:00 2001 From: yzhh <31803608+OasisAkari@users.noreply.github.com> Date: Tue, 24 Dec 2024 22:27:55 +0800 Subject: [PATCH 04/18] u --- .gitignore | 5 ++++- bots/discord/slash_message.py | 11 ----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 14d5388277..1e657cde77 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,10 @@ config/*.toml* test* *.db cache/* +assets/arcaea* +assets/maimai* assets/modules/arcaea +assets/arc.apk assets/modules/maimai* !assets/modules/maimai/mai_utage_info.json !assets/modules/maimai/mai_grade_info.json @@ -27,4 +30,4 @@ output/* assets/bots_list.json assets/discord_slash_list.json assets/modules_list.json -assets/schedulers_list.json \ No newline at end of file +assets/schedulers_list.json diff --git a/bots/discord/slash_message.py b/bots/discord/slash_message.py index 45ba32f364..1617b8e33f 100644 --- a/bots/discord/slash_message.py +++ b/bots/discord/slash_message.py @@ -101,17 +101,6 @@ async def send_message( return FinishedSession(self, msg_ids, send) - async def check_permission(self): - if ( - self.session.message.channel.permissions_for( - self.session.message.author - ).administrator - or isinstance(self.session.message.channel, discord.DMChannel) - or self.info.is_super_user - or self.info.check_TargetAdmin(self.target.target_id) - ): - return True - return False async def check_native_permission(self): if self.session.message.channel.permissions_for( From 805657a87b331c4c2bcbb734babed88bb1bc387f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:28:00 +0800 Subject: [PATCH 05/18] Update dependency jinja2 to v3.1.5 [SECURITY] (#1506) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- requirements.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index eb399fb1be..638d2b7e9e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1628,13 +1628,13 @@ test = ["portend", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-c [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] diff --git a/requirements.txt b/requirements.txt index e79799b3a2..f8398a97f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -62,7 +62,7 @@ inputimeout==1.0.4 ; python_full_version >= "3.12.0" and python_full_version < " iso639-lang==2.5.0 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" itsdangerous==2.2.0 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" jaraco-context==6.0.1 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" -jinja2==3.1.4 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" +jinja2==3.1.5 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" jiter==0.7.0 ; python_full_version >= "3.12.0" and python_full_version < "4.0.0" jsonpatch==1.33 ; python_full_version >= "3.12.0" and python_version < "4.0" jsonpointer==3.0.0 ; python_full_version >= "3.12.0" and python_version < "4.0" From 8b2929ff89aa30ef22f8528e92baafd59b089d13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:28:09 +0800 Subject: [PATCH 06/18] Bump jinja2 from 3.1.4 to 3.1.5 (#1505) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 638d2b7e9e..ea5dc18bd1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiocqhttp" @@ -4537,4 +4537,4 @@ propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = "^3.12.0" -content-hash = "78bd3610a1b3fc1005ea68cf7bf4f181df6a14bc9cfacef8ede379835fc559c5" +content-hash = "9c98494aec57da701cba72db281f4a589564bb45d66a324c3f468aba2dfeebed" diff --git a/pyproject.toml b/pyproject.toml index c3ea64953e..0ae82b4362 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ emoji = "^2.12.1" langconv = {git = "https://github.com/OasisAkari/langconv.py.git"} ff3 = "^1.0.2" orjson = "^3.10.9" -jinja2 = "^3.1.4" +jinja2 = "^3.1.5" mcstatus = "^11.1.1" qq-botpy = "^1.2.1" botpy = {git = "https://github.com/Teahouse-Studios/botpy.git"} From d0e3dccfc3078a46bcaa262861e71cb2071b0e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=BE=85=E7=8B=BC?= Date: Fri, 27 Dec 2024 14:10:02 +0800 Subject: [PATCH 07/18] remove jwt --- assets/config_store/en_us/bot_api.toml | 4 -- assets/config_store/en_us/bot_qqbot.toml | 2 +- assets/config_store/en_us/config.toml | 6 +- assets/config_store/zh_cn/bot_api.toml | 4 -- assets/config_store/zh_tw/bot_api.toml | 4 -- assets/config_store/zh_tw/config.toml | 6 +- assets/config_store_packed/en_us.zip | Bin 14840 -> 14530 bytes assets/config_store_packed/zh_cn.zip | Bin 13513 -> 13254 bytes assets/config_store_packed/zh_tw.zip | Bin 13480 -> 13227 bytes bots/api/bot.py | 72 ++++++++++++++++++++--- core/config/update.py | 1 - core/locales/en_us.json | 1 - core/locales/zh_cn.json | 1 - core/locales/zh_tw.json | 1 - modules/core/utils.py | 23 -------- poetry.lock | 24 +------- pyproject.toml | 1 - requirements.txt | 1 - 18 files changed, 72 insertions(+), 79 deletions(-) diff --git a/assets/config_store/en_us/bot_api.toml b/assets/config_store/en_us/bot_api.toml index b4a89e255c..d1f2b3c011 100644 --- a/assets/config_store/en_us/bot_api.toml +++ b/assets/config_store/en_us/bot_api.toml @@ -2,10 +2,6 @@ # NOTE: TOML is not like Python. Do not use Python syntax here. # EXAMPLE: Boolean values in TOML must be lowercase. -[bot_api_secret] -# The secret config section of the platform. The bot will try to intercept if the value here accidentally appears in the message sent, but be careful to prevent leakage. -jwt_secret = "" # The authentication key for the built-in API, it can be filled in at will. - [bot_api] # The basic config section of the platform. The value ​​filled in here can be displayed in the message. Please do not fill in sensitive information in this section. enable = true # Whether to enable this platform. diff --git a/assets/config_store/en_us/bot_qqbot.toml b/assets/config_store/en_us/bot_qqbot.toml index 027492b99f..0bb4575a5b 100644 --- a/assets/config_store/en_us/bot_qqbot.toml +++ b/assets/config_store/en_us/bot_qqbot.toml @@ -6,7 +6,7 @@ # The basic config section of the platform. The value ​​filled in here can be displayed in the message. Please do not fill in sensitive information in this section. qq_bot_appid = "" # The QQ official robot AppID. enable = false # Whether to enable this platform. -qq_private_bot = false # Whether it is a private robot when using the QQ official robot. +qq_private_bot = false # Whether it is a private robot when using the QQ official bot. qq_bot_enable_send_url = false # Whether to enable sending URLs when using QQ official robot. qq_typing_emoji = 181 # When using QQ related protocol terminals, the response emoji ID attached to the message when processing the message. It needs to be supported by the protocol terminal. For details of emoji ID, see: https://bot.q.qq.com/wiki/develop/api/openapi/emoji/model.html#Emoji diff --git a/assets/config_store/en_us/config.toml b/assets/config_store/en_us/config.toml index 8c2af14049..179070552e 100644 --- a/assets/config_store/en_us/config.toml +++ b/assets/config_store/en_us/config.toml @@ -57,7 +57,7 @@ dice_output_len = 200 # The maximum length output of dice module. dice_roll_limit = 10 # The maximum number of dice rolled per command of dice module. dice_detail_count = 5 # The total number of dice rolled n times of dice module, it will no longer show details when this value is exceeded. dice_count_limit = 10 # The maximum number of items in dice expressions of dice module. -ncmusic_enable_card = false # Whether enables card messages of ncmusic module. (Only valid on QQ platform) +ncmusic_enable_card = false # Whether enables card messages of ncmusic module. (Only valid on QQ) wiki_whitelist_url = "" # Wiki whitelist application URL. wordle_disable_image = false # Whether to disable images of wordle module. slower_schedule = false # Whether to enable a slower scheduled task scheduler. (To reduce request pressure) @@ -73,8 +73,8 @@ ff3_tweak = "1E915EC4922E78" # The key tweak used to encrypt sensitive informati web_render = "" # WebRender service URL. openai_api_key = "" # OpenAI API Key. (For ask modules etc.) exchange_rate_api_key = "" # API Key for ExchangeRate-API. (For exchange_rate module and exchange rate calculation) -wolfram_alpha_appid = "" # WolframAlpha AppID. (For wolframalpha module) +wolfram_alpha_appid = "" # WolframAlpha 的 AppID。(用于 wolframalpha 模块) diving_fish_developer_token = "" # Developer token for Diving Fish prober. (For maimai module) curseforge_api_key = "" # CurseForge API key. (For mod_dl module) ncmusic_api = "" # API address of NetEase Cloud Music API. (For ncmusic module) -osu_api_key = "" # osu! API Key (for osu module) +osu_api_key = "" # Osu! API Key (for osu module) diff --git a/assets/config_store/zh_cn/bot_api.toml b/assets/config_store/zh_cn/bot_api.toml index c879b46dee..778eed465a 100644 --- a/assets/config_store/zh_cn/bot_api.toml +++ b/assets/config_store/zh_cn/bot_api.toml @@ -2,10 +2,6 @@ # 注意:TOML 不是 Python。请不要在此处使用 Python 语法。 # 例如:TOML 中的布尔值必须是小写。 -[bot_api_secret] -# 平台端的密钥配置部分,此处的值若意外出现在发送的消息中,机器人会尝试拦截。但请务必提防泄露。 -jwt_secret = "" # 内置 API 的认证密钥,随意填写即可。 - [bot_api] # 平台端的配置部分,此处填写的值可在消息中以明文形式展示。请不要在此部分填写敏感信息。 enable = true # 是否启用此平台。 diff --git a/assets/config_store/zh_tw/bot_api.toml b/assets/config_store/zh_tw/bot_api.toml index abd835d404..8ee0f86e36 100644 --- a/assets/config_store/zh_tw/bot_api.toml +++ b/assets/config_store/zh_tw/bot_api.toml @@ -2,10 +2,6 @@ # 注意:TOML 不是 Python。請不要在此處使用 Python 語法。 # 例如:TOML 中的布林值必須是小寫。 -[bot_api_secret] -# 平台端的金鑰設定部分,此處的值若意外出現在傳送的訊息中,機器人會嘗試攔截。但請務必提防洩漏。 -jwt_secret = "" # 內建 API 的認證金鑰,隨意填寫即可。 - [bot_api] # 平台端的設定部分,此處填寫的值可在訊息中以明文顯示。請不要在此部分填寫敏感資訊。 enable = true # 是否啟用此平台。 diff --git a/assets/config_store/zh_tw/config.toml b/assets/config_store/zh_tw/config.toml index ea0a47f760..86eaab2bc4 100644 --- a/assets/config_store/zh_tw/config.toml +++ b/assets/config_store/zh_tw/config.toml @@ -35,7 +35,7 @@ enable_get_petal = false # 是否允許取得花瓣。 gained_petal_limit = 0 # 單日取得花瓣上限。 lost_petal_limit = 0 # 單日失去花瓣上限。 use_secrets_random = false # 是否使用基於 secrets 庫的隨機數產生器。 -web_render_local = "" # 本地 WebRender 位址。 +web_render_local = "" # 本地 WebRender 服務位址。 enable_langsmith = "" langsmith_endpoint = "" langsmith_project = "" @@ -59,7 +59,7 @@ dice_detail_count = 5 # dice 模組 n 次投擲的骰子的總量超過該值時 dice_count_limit = 10 # dice 模組骰子表示式項數上限。 ncmusic_enable_card = false # ncmusic 模組是否啟用卡片訊息。(僅在 QQ 平台有效) wiki_whitelist_url = "" # Wiki 白名單申請網址。 -wordle_disable_image = false # wordle 模組是否停用圖片。 +wordle_disable_image = false # wordle 模块是否禁用图片。 slower_schedule = false # 是否啟用更慢的排程任務調度器。(減少請求壓力用) [secret] @@ -77,4 +77,4 @@ wolfram_alpha_appid = "" # WolframAlpha 的 AppID。 diving_fish_developer_token = "" # Diving Fish 查分器的開發者令牌。(用於 maimai 模組) curseforge_api_key = "" # CurseForge 的 API Key。(用於 mod_dl 模組) ncmusic_api = "" # 網易雲音樂 API 的 API 位址。(用於 ncmusic 模組) -osu_api_key = "" # osu! 的 API Key。(用於 osu 模組) +osu_api_key = "" # osu! 的 API Key。(用于 osu 模块) diff --git a/assets/config_store_packed/en_us.zip b/assets/config_store_packed/en_us.zip index 55b1ec5619064901cc56e8343a7c09408c42ad60..db6f6d0c6992c64b87aaa55d19437ade223debe5 100644 GIT binary patch delta 440 zcmexSe5jB&z?+#xgaHKp6wKbpYr(+`q&ItTY-8dBG9s_D@6z1D$iT3LaWW70hRvUO z6d1t@#Q3%_ff;87mO>b%!f`CTAT3FrjlPFi7#I$1ejskmv{_ba853As^yH@t3epS= z3Y#y;%oW~TW^k2N=lQG_1;>H{PnX9HP4D+~JfE`S$*w+y^8B2%qQu<9oPvx*g=Z@k zKAk)L{hrRv*=D7TjQ*1!nrne5&26$jZp1f}0Sqsz&!n`QDJNYLoT1ta$ zx3`pLG8CE|V=1eE;(1^I@S*6LBsO`brHnI35j-S-p}~!!r~xRFoS&DLnGSUkD;r3j O0|*}jW8tJ3hz9_hnU6C7 delta 455 zcmX?9_@kINz?+#xgaHKFCQsPNYr(+`q&ItTY-8dBG9u+p{oM1KiGkrY(_|j*4U_+~ zZDr0XFPXf-P)|Lvv?L=nuOu@$u_QA;Pa!+CQXwtBNC7CQkW`wPQ=*%hr{EaiIeC|e z`sSV7%8X!x@AGV70yC!ZFNHAdgyL9uK~`;IWl}l9!oYB3^GY#mCZ?kN%}*qjF@dF6 zcj;HlN;5FXZk{eZSC~_wASbZ|XjkrL6aA~K3XTN@o-TR{8g4+_%ky*6iV|}Za|$vN z6>{@aN^?>*H=CN4GBV~*UTvlYvU>6jGg~k%VQ!7?$3$}-u+#)|X(mp-$!pE!z}#~{ z?g4?xug#^wTuuw=`V3(PhNS$G_}s*jqRa}tlKkA90B=Sn5e9f*B0L226dyQ33 e^%4vW$@zI{ndwk7SlK|fZ~)eln9cz?+#xgaHKFCQsPN`-Y7fNN@hbR>33QSwBOL{h(85bqlHNe~g0KMCYY<{vqXf_7jYe`{MN6M7wy*~( z0AXGfMHBfZzc-QwTf%EB&GcJfvX-$dnCoRMo#-SA353EzU{L6lL=~oE`1`y^(F?o|D14D9tURq{4R3j@JNS*@-A2TvATrdLh0G=p<{{R30 diff --git a/assets/config_store_packed/zh_tw.zip b/assets/config_store_packed/zh_tw.zip index 90e69be32be45057bf307d64f17d6cd9d268cf3f..bc99acdad485813e0c557a4045bda597e4be98c5 100644 GIT binary patch delta 408 zcmZ3HxjLOUz?+#xgaHJ87tG$s`;?6tNN@hiR>Z^yWJIP3*#50!WMHUcoLtJeeX>6H zW3ap^PXQB{(ZQDpVZ0G=WC4p9h-R?xg0x2c>R<6sf`Q@R=B1J!x!Io0>3!NgbMrJ+ zGd7{8bEiL>vHt0VWzUy2KA*DU>Fj-*?`iL2Q+l$iPa(g!RN>i*g+L|m_jK}d1$Z+u zi7>!jIC-CuEy$Y5|BS5B9q4YX69=+*`hg8@u1pLJAS?j(8id%^$jZ&Ykd$8%pORUe zoL`ipSCXHbgJwbGvH$#cEP*;fm={HN1@GjG#?oNh-y2Ia-Ql0iVX=9~DTqw= rG?8&e@j1}Z^yWJEseUDVyk#K6$VG`W;>`{aLo zGnli=OD0dy(b9j~y8P+xT?&o?o(j)rwY*r>`(kb9%l3&cCvJGZr|0FY70+7wpDtYe zbp7h5y_=u*ub(W-^$BdY5O)C+n9<6c2w}YBcVq#J=!#^pNP(uk zOU}Ez`K@MdHZVSxK{@OjjYkV>1Ct?mZ~(8X5!$PJk3Zh z8sws5|M~A&0s{hsdBNcYA+|ME^D!_a<(I@~=jUhZmE`B