Compare commits

..

2 Commits

Author SHA1 Message Date
413afea538 chore: idjson v3.4 2025-07-28 23:26:21 +08:00
524597f891 fix: dynamically select API path based on gacha type
- Modified `getGachaLogs()` to choose API path based on current gacha_type instead of input URL
2025-07-28 23:19:34 +08:00
10 changed files with 28 additions and 561 deletions

1
.github/FUNDING.yml vendored
View File

@@ -10,3 +10,4 @@ liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: https://afdian.net/a/haisha

View File

@@ -1,91 +0,0 @@
name: Update ID Map and Version
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
update-idmap:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_PAT }}
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests opencc
- name: Run getIdMap.py
run: |
python tools/getIdMap.py
- name: Check if idJson.json changed
id: check_changes
run: |
git add -A
if git diff --staged --quiet -- src/idJson.json; then
echo "changes=false" >> $GITHUB_OUTPUT
echo "No changes detected in src/idJson.json"
else
echo "changes=true" >> $GITHUB_OUTPUT
echo "Changes detected in src/idJson.json"
fi
- name: Get current version from idJson
if: steps.check_changes.outputs.changes == 'true'
id: get_version
run: |
VERSION=$(python -c "import json; print(json.load(open('src/idJson.json', encoding='utf-8'))['version'])")
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Current version in idJson: $VERSION"
- name: Bump package.json version
if: steps.check_changes.outputs.changes == 'true'
id: bump_version
run: |
CURRENT_VERSION=$(node -p "require('./package.json').version")
echo "Current package.json version: $CURRENT_VERSION"
IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION"
MAJOR=${VERSION_PARTS[0]}
MINOR=${VERSION_PARTS[1]}
PATCH=${VERSION_PARTS[2]}
NEW_PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH"
echo "New package.json version: $NEW_VERSION"
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
node -e "
const fs = require('fs');
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
packageJson.version = '$NEW_VERSION';
fs.writeFileSync('./package.json', JSON.stringify(packageJson, null, 2) + '\n');
"
- name: Create and push tag
if: steps.check_changes.outputs.changes == 'true'
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add src/idJson.json package.json
git commit -m "chore: update idJson to ${{ steps.get_version.outputs.version }}"
TAG_NAME="v${{ steps.bump_version.outputs.new_version }}"
git tag $TAG_NAME
git push
git push origin $TAG_NAME
echo "Created and pushed tag: $TAG_NAME"

View File

@@ -1,6 +1,6 @@
{
"name": "star-rail-warp-export",
"version": "0.2.5",
"version": "0.2.0",
"main": "./dist/electron/main/main.js",
"author": "biuuu <https://github.com/biuuu>",
"homepage": "https://github.com/biuuu/star-rail-warp-export",

View File

@@ -98,7 +98,7 @@
"excel.customFont": "Arial",
"excel.filePrefix": "Star Rail Warp logger",
"excel.fileType": "Excel file",
"uigf.fileType": "Uniformed Interchangeable GachaLog Format v4.0, v4.1",
"uigf.fileType": "Uniformed Interchangeable GachaLog Format v4.0",
"ui.extra.cacheClean": "1. Confirm whether the warp history in the game has been opened, and if the error \"User authentication expired\" still appears, try the following steps \n2. Close the game window of Star Rail \n3. Click the \"Open Web Cache Folder\" button above to open the \"Cache\" folder \n4. Delete the \"Cache_Data\" folder \n5. Start the Star Rail game and open the warp history page in the game \n6. Close this dialog and click the \"Update Data\" button",
"ui.extra.findCacheFolder": "If the \"Open cache folder\" button does not respond, you can manually find the game's web cache folder. The directory is \"Your game installation path/Star Rail/Games/StarRail_Data/webCaches/Cache/\"",
"ui.extra.urlCopied": "URL Copied",

View File

@@ -98,7 +98,7 @@
"excel.customFont": "メイリオ",
"excel.filePrefix": "スターレイル跳躍ログ",
"excel.fileType": "Excelファイル",
"uigf.fileType":"統一交換可能ガチャ記録フォーマット標準UIGF v4.0, v4.1",
"uigf.fileType":"統一交換可能ガチャ記録フォーマット標準UIGF v4.0",
"ui.extra.cacheClean": "1. ゲーム内の跳躍履歴を開いたことを確認し、それでも「Authkeyの有効期限が切れました」エラーが表示される場合は、以下の手順を再度お試しください\n2. スターレイルのゲーム画面を閉じる\n3. 上部の「キャッシュフォルダーを開く」ボタンをクリックして、Cacheフォルダーを開く\n4. Cache_Dataフォルダを削除する\n5. スターレイルを起動し、ゲーム内の跳躍履歴ページを開く\n6. このダイアログボックスを閉じ、「更新データ」ボタンをクリックします",
"ui.extra.findCacheFolder": "もし「キャッシュフォルダーを開く」ボタンが反応しない場合、手動でゲームのウェブキャッシュフォルダを見つけることができます。そのディレクトリは、“あなたのゲームのインストールパス/Star Rail/Game/StarRail_Data/webCaches/Cache/”",
"ui.extra.urlCopied": "URLがコピーされました",

View File

@@ -98,7 +98,7 @@
"excel.customFont": "微软雅黑",
"excel.filePrefix": "星穹铁道跃迁记录",
"excel.fileType": "Excel文件",
"uigf.fileType":"统一可交换抽卡记录标准 v4.0, v4.1",
"uigf.fileType":"统一可交换抽卡记录标准 v4.0",
"ui.extra.cacheClean": "1. 确认是否已经打开游戏内的抽卡历史记录,如果仍然出现“身份认证已过期”的错误,再尝试下面的步骤\n2. 关闭星穹铁道的游戏窗口\n3. 点击上方的“打开缓存文件夹”按钮打开Cache文件夹\n4. 删除Cache_Data文件夹\n5. 启动星穹铁道游戏,打开游戏内抽卡历史记录页面\n6. 关闭这个对话框,再点击“更新数据”按钮",
"ui.extra.findCacheFolder": "如果点“打开缓存文件夹”按钮没有反应,可以手动找到游戏的网页缓存文件夹,目录为“你的游戏安装路径/Star Rail/Game/StarRail_Data/webCaches/Cache/”",
"ui.extra.urlCopied": "URL已复制",

View File

@@ -87,7 +87,7 @@
"excel.customFont": "微軟正黑體",
"excel.filePrefix": "星穹鐵道躍遷紀錄",
"excel.fileType": "Excel 檔案",
"srgf.fileType":"統一可交換抽卡記錄標準 v4.0, v4.1",
"srgf.fileType":"統一可交換抽卡記錄標準 v4.0",
"ui.extra.cacheClean": "1. 確認是否已經開啟遊戲內的躍遷歷史紀錄,如果仍然出現「身分驗證已過期」的錯誤,再嘗試下面的步驟\n2. 關閉「崩壞:星穹鐵道」的遊戲視窗\n3. 按一下上方的「開啟快取資料夾」按鈕開啟「Cache」資料夾\n4. 刪除「Cache_Data」資料夾\n5. 啟動「崩壞:星穹鐵道」遊戲,開啟遊戲內躍遷歷史紀錄頁面\n6. 關閉這個對話方塊,再按下「更新資料」按鈕",
"ui.extra.findCacheFolder": "如果按下「開啟快取資料夾」按鈕沒有回應,可以手動找到遊戲的網頁快取資料夾,目錄為「您的遊戲安裝路徑/Star Rail/Games/StarRail_Data/webCaches/Cache/」",
"ui.uigf.title": "請選擇要導出的UID"

View File

@@ -115,16 +115,6 @@
"item_type": "光锥",
"rank_type": "3"
},
"20023": {
"name": "嗤笑",
"item_type": "光锥",
"rank_type": "3"
},
"20024": {
"name": "残泪",
"item_type": "光锥",
"rank_type": "3"
},
"21000": {
"name": "一场术后对话",
"item_type": "光锥",
@@ -430,16 +420,6 @@
"item_type": "光锥",
"rank_type": "4"
},
"21064": {
"name": "菇菇嘎嘎历险记",
"item_type": "光锥",
"rank_type": "4"
},
"21065": {
"name": "今日好手气",
"item_type": "光锥",
"rank_type": "4"
},
"22000": {
"name": "新手任务开始前",
"item_type": "光锥",
@@ -470,11 +450,6 @@
"item_type": "光锥",
"rank_type": "4"
},
"22006": {
"name": "飞向粉色的明天",
"item_type": "光锥",
"rank_type": "4"
},
"23000": {
"name": "银河铁道之夜",
"item_type": "光锥",
@@ -720,36 +695,6 @@
"item_type": "光锥",
"rank_type": "5"
},
"23049": {
"name": "致长夜的星光",
"item_type": "光锥",
"rank_type": "5"
},
"23050": {
"name": "勿忘她的火焰",
"item_type": "光锥",
"rank_type": "5"
},
"23051": {
"name": "纵然山河万程",
"item_type": "光锥",
"rank_type": "5"
},
"23052": {
"name": "爱如此刻永恒",
"item_type": "光锥",
"rank_type": "5"
},
"23053": {
"name": "花花世界迷人眼",
"item_type": "光锥",
"rank_type": "5"
},
"23054": {
"name": "当她决定看见",
"item_type": "光锥",
"rank_type": "5"
},
"24000": {
"name": "记一位星神的陨落",
"item_type": "光锥",
@@ -1085,11 +1030,6 @@
"item_type": "角色",
"rank_type": "5"
},
"1321": {
"name": "大丽花",
"item_type": "角色",
"rank_type": "5"
},
"1401": {
"name": "大黑塔",
"item_type": "角色",
@@ -1145,31 +1085,6 @@
"item_type": "角色",
"rank_type": "5"
},
"1413": {
"name": "长夜月",
"item_type": "角色",
"rank_type": "5"
},
"1414": {
"name": "丹恒•腾荒",
"item_type": "角色",
"rank_type": "5"
},
"1415": {
"name": "昔涟",
"item_type": "角色",
"rank_type": "5"
},
"1501": {
"name": "火花",
"item_type": "角色",
"rank_type": "5"
},
"1502": {
"name": "爻光",
"item_type": "角色",
"rank_type": "5"
},
"8001": {
"name": "{NICKNAME}",
"item_type": "角色",
@@ -1327,16 +1242,6 @@
"item_type": "光錐",
"rank_type": "3"
},
"20023": {
"name": "嗤笑",
"item_type": "光錐",
"rank_type": "3"
},
"20024": {
"name": "殘淚",
"item_type": "光錐",
"rank_type": "3"
},
"21000": {
"name": "一場術後對話",
"item_type": "光錐",
@@ -1642,16 +1547,6 @@
"item_type": "光錐",
"rank_type": "4"
},
"21064": {
"name": "菇菇嘎嘎歷險記",
"item_type": "光錐",
"rank_type": "4"
},
"21065": {
"name": "今日好手氣",
"item_type": "光錐",
"rank_type": "4"
},
"22000": {
"name": "新手任務開始前",
"item_type": "光錐",
@@ -1682,11 +1577,6 @@
"item_type": "光錐",
"rank_type": "4"
},
"22006": {
"name": "飛向粉色的明天",
"item_type": "光錐",
"rank_type": "4"
},
"23000": {
"name": "銀河鐵道之夜",
"item_type": "光錐",
@@ -1932,36 +1822,6 @@
"item_type": "光錐",
"rank_type": "5"
},
"23049": {
"name": "致長夜的星光",
"item_type": "光錐",
"rank_type": "5"
},
"23050": {
"name": "勿忘她的火焰",
"item_type": "光錐",
"rank_type": "5"
},
"23051": {
"name": "縱然山河萬程",
"item_type": "光錐",
"rank_type": "5"
},
"23052": {
"name": "愛如此刻永恆",
"item_type": "光錐",
"rank_type": "5"
},
"23053": {
"name": "花花世界迷人眼",
"item_type": "光錐",
"rank_type": "5"
},
"23054": {
"name": "當她決定看見",
"item_type": "光錐",
"rank_type": "5"
},
"24000": {
"name": "記一位星神的隕落",
"item_type": "光錐",
@@ -2297,11 +2157,6 @@
"item_type": "角色",
"rank_type": "5"
},
"1321": {
"name": "大麗花",
"item_type": "角色",
"rank_type": "5"
},
"1401": {
"name": "大黑塔",
"item_type": "角色",
@@ -2357,31 +2212,6 @@
"item_type": "角色",
"rank_type": "5"
},
"1413": {
"name": "長夜月",
"item_type": "角色",
"rank_type": "5"
},
"1414": {
"name": "丹恆•騰荒",
"item_type": "角色",
"rank_type": "5"
},
"1415": {
"name": "昔漣",
"item_type": "角色",
"rank_type": "5"
},
"1501": {
"name": "火花",
"item_type": "角色",
"rank_type": "5"
},
"1502": {
"name": "爻光",
"item_type": "角色",
"rank_type": "5"
},
"8001": {
"name": "{NICKNAME}",
"item_type": "角色",
@@ -2539,16 +2369,6 @@
"item_type": "Light Cone",
"rank_type": "3"
},
"20023": {
"name": "Sneering",
"item_type": "Light Cone",
"rank_type": "3"
},
"20024": {
"name": "Lingering Tear",
"item_type": "Light Cone",
"rank_type": "3"
},
"21000": {
"name": "Post-Op Conversation",
"item_type": "Light Cone",
@@ -2854,16 +2674,6 @@
"item_type": "Light Cone",
"rank_type": "4"
},
"21064": {
"name": "Mushy Shroomy's Adventures",
"item_type": "Light Cone",
"rank_type": "4"
},
"21065": {
"name": "Today's Good Luck",
"item_type": "Light Cone",
"rank_type": "4"
},
"22000": {
"name": "Before the Tutorial Mission Starts",
"item_type": "Light Cone",
@@ -2894,11 +2704,6 @@
"item_type": "Light Cone",
"rank_type": "4"
},
"22006": {
"name": "Fly Into a Pink Tomorrow",
"item_type": "Light Cone",
"rank_type": "4"
},
"23000": {
"name": "Night on the Milky Way",
"item_type": "Light Cone",
@@ -3144,36 +2949,6 @@
"item_type": "Light Cone",
"rank_type": "5"
},
"23049": {
"name": "To Evernight's Stars",
"item_type": "Light Cone",
"rank_type": "5"
},
"23050": {
"name": "Never Forget Her Flame",
"item_type": "Light Cone",
"rank_type": "5"
},
"23051": {
"name": "Though Worlds Apart",
"item_type": "Light Cone",
"rank_type": "5"
},
"23052": {
"name": "This Love, Forever",
"item_type": "Light Cone",
"rank_type": "5"
},
"23053": {
"name": "Dazzled by a Flowery World",
"item_type": "Light Cone",
"rank_type": "5"
},
"23054": {
"name": "When She Decided to See",
"item_type": "Light Cone",
"rank_type": "5"
},
"24000": {
"name": "On the Fall of an Aeon",
"item_type": "Light Cone",
@@ -3509,11 +3284,6 @@
"item_type": "Character",
"rank_type": "5"
},
"1321": {
"name": "The Dahlia",
"item_type": "Character",
"rank_type": "5"
},
"1401": {
"name": "The Herta",
"item_type": "Character",
@@ -3569,31 +3339,6 @@
"item_type": "Character",
"rank_type": "5"
},
"1413": {
"name": "Evernight",
"item_type": "Character",
"rank_type": "5"
},
"1414": {
"name": "Dan Heng • Permansor Terrae",
"item_type": "Character",
"rank_type": "5"
},
"1415": {
"name": "Cyrene",
"item_type": "Character",
"rank_type": "5"
},
"1501": {
"name": "Sparxie",
"item_type": "Character",
"rank_type": "5"
},
"1502": {
"name": "Yao Guang",
"item_type": "Character",
"rank_type": "5"
},
"8001": {
"name": "{NICKNAME}",
"item_type": "Character",
@@ -3751,16 +3496,6 @@
"item_type": "光円錐",
"rank_type": "3"
},
"20023": {
"name": "{RUBY_B#ししょう}嗤笑{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "3"
},
"20024": {
"name": "{RUBY_B#ざんるい}残涙{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "3"
},
"21000": {
"name": "{RUBY_B#しゅじゅつご}手術後{RUBY_E#}の{RUBY_B#かいわ}会話{RUBY_E#}",
"item_type": "光円錐",
@@ -4066,16 +3801,6 @@
"item_type": "光円錐",
"rank_type": "4"
},
"21064": {
"name": "タケタケ{RUBY_B#ぼうけんき}冒険記{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "4"
},
"21065": {
"name": "{RUBY_B#きょう}今日{RUBY_E#}は{RUBY_B#こううん}好運{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "4"
},
"22000": {
"name": "{RUBY_B#はじ}初{RUBY_E#}めてのクエストの{RUBY_B#まえ}前{RUBY_E#}に",
"item_type": "光円錐",
@@ -4106,11 +3831,6 @@
"item_type": "光円錐",
"rank_type": "4"
},
"22006": {
"name": "ピンク{RUBY_B#いろ}色{RUBY_E#}の{RUBY_B#あした}明日{RUBY_E#}へ",
"item_type": "光円錐",
"rank_type": "4"
},
"23000": {
"name": "{RUBY_B#ぎんがてつどう}銀河鉄道{RUBY_E#}の{RUBY_B#よる}夜{RUBY_E#}",
"item_type": "光円錐",
@@ -4356,36 +4076,6 @@
"item_type": "光円錐",
"rank_type": "5"
},
"23049": {
"name": "{RUBY_B#なが}長{RUBY_E#}き{RUBY_B#よる}夜{RUBY_E#}に{RUBY_B#かがや}輝{RUBY_E#}く{RUBY_B#ほし}星{RUBY_E#}へ",
"item_type": "光円錐",
"rank_type": "5"
},
"23050": {
"name": "{RUBY_B#かのじょ}彼女{RUBY_E#}の{RUBY_B#ほのお}炎{RUBY_E#}を{RUBY_B#わす}忘{RUBY_E#}れずに",
"item_type": "光円錐",
"rank_type": "5"
},
"23051": {
"name": "{RUBY_B#ばんり}万里{RUBY_E#}の{RUBY_B#さんが}山河{RUBY_E#}を{RUBY_B#こ}越{RUBY_E#}えて",
"item_type": "光円錐",
"rank_type": "5"
},
"23052": {
"name": "{RUBY_B#あい}愛{RUBY_E#}はいま{RUBY_B#えいえん}永遠{RUBY_E#}に",
"item_type": "光円錐",
"rank_type": "5"
},
"23053": {
"name": "きらびやかな{RUBY_B#せかい}世界{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "5"
},
"23054": {
"name": "{RUBY_B#かのじょ}彼女{RUBY_E#}が{RUBY_B#み}視{RUBY_E#}ると{RUBY_B#き}決{RUBY_E#}めた{RUBY_B#とき}時{RUBY_E#}",
"item_type": "光円錐",
"rank_type": "5"
},
"24000": {
"name": "とある{RUBY_B#アイオーン}星神{RUBY_E#}の{RUBY_B#うんらく}殞落{RUBY_E#}を{RUBY_B#しる}記{RUBY_E#}す",
"item_type": "光円錐",
@@ -4721,11 +4411,6 @@
"item_type": "キャラ",
"rank_type": "5"
},
"1321": {
"name": "ダリア",
"item_type": "キャラ",
"rank_type": "5"
},
"1401": {
"name": "マダム・ヘルタ",
"item_type": "キャラ",
@@ -4781,31 +4466,6 @@
"item_type": "キャラ",
"rank_type": "5"
},
"1413": {
"name": "{RUBY_B#ながよづき}長夜月{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1414": {
"name": "{RUBY_B#たんこう}丹恒{RUBY_E#}・{RUBY_B#とうこう}騰荒{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1415": {
"name": "キュレネ",
"item_type": "キャラ",
"rank_type": "5"
},
"1501": {
"name": "{RUBY_B#ひばな}火花{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"1502": {
"name": "{RUBY_B#コウコウ}爻光{RUBY_E#}",
"item_type": "キャラ",
"rank_type": "5"
},
"8001": {
"name": "{NICKNAME}",
"item_type": "キャラ",
@@ -4963,16 +4623,6 @@
"item_type": "무기",
"rank_type": "3"
},
"20023": {
"name": "비웃음",
"item_type": "무기",
"rank_type": "3"
},
"20024": {
"name": "눈물의 흔적",
"item_type": "무기",
"rank_type": "3"
},
"21000": {
"name": "수술 후의 대화",
"item_type": "무기",
@@ -5278,16 +4928,6 @@
"item_type": "무기",
"rank_type": "4"
},
"21064": {
"name": "슈룸 모험기",
"item_type": "무기",
"rank_type": "4"
},
"21065": {
"name": "오늘의 행운",
"item_type": "무기",
"rank_type": "4"
},
"22000": {
"name": "초보자 임무 시작 전",
"item_type": "무기",
@@ -5318,11 +4958,6 @@
"item_type": "무기",
"rank_type": "4"
},
"22006": {
"name": "핑크빛 내일을 향해",
"item_type": "무기",
"rank_type": "4"
},
"23000": {
"name": "은하철도의 밤",
"item_type": "무기",
@@ -5568,36 +5203,6 @@
"item_type": "무기",
"rank_type": "5"
},
"23049": {
"name": "긴 밤의 별빛에게",
"item_type": "무기",
"rank_type": "5"
},
"23050": {
"name": "그녀의 불꽃을 잊지 말라",
"item_type": "무기",
"rank_type": "5"
},
"23051": {
"name": "끝없는 산과 강을 거치더라도",
"item_type": "무기",
"rank_type": "5"
},
"23052": {
"name": "이 순간처럼 영원한 사랑",
"item_type": "무기",
"rank_type": "5"
},
"23053": {
"name": "눈부신 파키의 세상",
"item_type": "무기",
"rank_type": "5"
},
"23054": {
"name": "그녀가 보기로 결심했을 때",
"item_type": "무기",
"rank_type": "5"
},
"24000": {
"name": "어떤 에이언즈의 몰락",
"item_type": "무기",
@@ -5933,11 +5538,6 @@
"item_type": "캐릭터",
"rank_type": "5"
},
"1321": {
"name": "달리아",
"item_type": "캐릭터",
"rank_type": "5"
},
"1401": {
"name": "더 헤르타",
"item_type": "캐릭터",
@@ -5993,31 +5593,6 @@
"item_type": "캐릭터",
"rank_type": "5"
},
"1413": {
"name": "에버나이트",
"item_type": "캐릭터",
"rank_type": "5"
},
"1414": {
"name": "단항•등황",
"item_type": "캐릭터",
"rank_type": "5"
},
"1415": {
"name": "키레네",
"item_type": "캐릭터",
"rank_type": "5"
},
"1501": {
"name": "스파키",
"item_type": "캐릭터",
"rank_type": "5"
},
"1502": {
"name": "효광",
"item_type": "캐릭터",
"rank_type": "5"
},
"8001": {
"name": "{NICKNAME}",
"item_type": "캐릭터",
@@ -6059,5 +5634,5 @@
"rank_type": "5"
}
},
"version": "4.0"
"version": "3.4"
}

View File

@@ -27,7 +27,7 @@ const exportUIGF = async (uids) => {
export_timestamp: Math.ceil(Date.now() / 1000),
export_app: `${name}`,
export_app_version: `v${version}`,
version: "v4.1"
version: "v4.0"
},
hkrpg: []
}
@@ -139,7 +139,7 @@ const importUIGF = async () => {
try {
const jsonData = fs.readJsonSync(filepath[0])
if('info' in jsonData && 'version' in jsonData.info) {
if (jsonData.info.version !== 'v4.0' && jsonData.info.version !== 'v4.1') {
if (jsonData.info.version !== 'v4.0') {
sendMsg('不支持此版本UIGF')
console.error('不支持此版本UIGF')
return

View File

@@ -3,73 +3,54 @@ import json
from opencc import OpenCC
# 初始化 OpenCC 转换器
cc = OpenCC("s2t")
cc = OpenCC('s2t')
# 获取 JSON 数据
weapon_url = 'https://api.hakush.in/hsr/data/lightcone.json'
character_url = 'https://api.hakush.in/hsr/data/character.json'
version_url = 'https://api.hakush.in/hsr/new.json'
# 语言映射配置
language_map = {
"zh-cn": "zh",
"zh-tw": "zh", # 简体转繁体
"zh-cn": "cn",
"zh-tw": "cn", # 简体转繁体
"en-us": "en",
"ja-jp": "ja",
"ko-kr": "ko",
"ja-jp": "jp",
"ko-kr": "kr"
}
# 类型映射配置
type_map = {
"weapon": {
"zh-cn": "光锥",
"zh-tw": "光錐",
"en-us": "Light Cone",
"ja-jp": "光円錐",
"ko-kr": "무기",
},
"character": {
"zh-cn": "角色",
"zh-tw": "角色",
"en-us": "Character",
"ja-jp": "キャラ",
"ko-kr": "캐릭터",
},
"weapon": {"zh-cn": "光锥", "zh-tw": "光錐", "en-us": "Light Cone", "ja-jp": "光円錐", "ko-kr": "무기"},
"character": {"zh-cn": "角色", "zh-tw": "角色", "en-us": "Character", "ja-jp": "キャラ", "ko-kr": "캐릭터"}
}
def fetch_json(url):
response = requests.get(url)
response.raise_for_status()
return response.json()
def transform_data(data, item_type):
transformed = {lang: {} for lang in language_map.keys()}
for id, item in data.items():
for lang, key in language_map.items():
name = item[key] if lang != "zh-tw" else cc.convert(item["zh"])
name = item[key] if lang != 'zh-tw' else cc.convert(item['cn'])
transformed[lang][id] = {
"name": name,
"item_type": type_map[item_type][lang],
"rank_type": item["rank"][-1],
"rank_type": item['rank'][-1]
}
return transformed
def main():
try:
version_url = "https://static.nanoka.cc/manifest.json"
version_data = fetch_json(version_url)
latest_version = version_data['hsr']['live']
print(f"Latest version: {latest_version}")
weapon_url = f"https://static.nanoka.cc/hsr/{latest_version}/lightcone.json"
character_url = f"https://static.nanoka.cc/hsr/{latest_version}/character.json"
weapon_data = fetch_json(weapon_url)
print("Fetched", len(weapon_data), "lightcones")
character_data = fetch_json(character_url)
print("Fetched", len(character_data), "characters")
version_data = fetch_json(version_url)
transformed_data = {lang: {} for lang in language_map.keys()}
transformed_data["version"] = latest_version
transformed_data["version"] = version_data["version"]
weapon_transformed = transform_data(weapon_data, "weapon")
character_transformed = transform_data(character_data, "character")
@@ -78,12 +59,13 @@ def main():
transformed_data[lang].update(weapon_transformed[lang])
transformed_data[lang].update(character_transformed[lang])
with open("./src/idJson.json", "w", encoding="utf-8") as f:
with open('./src/idJson.json', 'w', encoding='utf-8') as f:
json.dump(transformed_data, f, ensure_ascii=False, indent=2)
print("Data successfully transformed and saved")
except requests.RequestException as e:
print(f"Error fetching data: {e}")
if __name__ == "__main__":
main()