From 998beeae59bbe9c272e3248b29b89a07259a3624 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:32:59 +0900 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20AiScript=E3=82=921.0=E3=81=AB?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #16277 --- CHANGELOG.md | 4 +++ packages/frontend/package.json | 3 +- packages/frontend/src/components/MkNote.vue | 28 +++++++++---------- .../src/components/MkNoteDetailed.vue | 27 +++++++++--------- .../frontend/src/pages/flash/flash-edit.vue | 8 +++--- packages/frontend/src/pages/flash/flash.vue | 10 +++++-- packages/frontend/src/plugin.ts | 8 +++--- pnpm-lock.yaml | 18 ++++++++++-- 8 files changed, 62 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0b23ed891..4734033c54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,10 @@ - Fix: Unicode絵文字に隣接する異体字セレクタ(`U+FE0F`)が絵文字として認識される問題を修正 ### Client +- Feat: AiScriptが1.0に更新されました + - プラグインは1.0に対応したものが必要です + - Playはそのまま動作しますが、新規に作られるプリセットは1.0になります + - 以前のバージョンから無効化されていた note_view_interruptor が有効になりました - Feat: セーフモード - プラグイン・テーマ・カスタムCSSの使用でクライアントの起動に問題が発生した際に、これらを無効にして起動できます - 以下の方法でセーフモードを起動できます diff --git a/packages/frontend/package.json b/packages/frontend/package.json index e2880bee7e..f4f72d944a 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -25,7 +25,8 @@ "@rollup/plugin-replace": "6.0.2", "@rollup/pluginutils": "5.2.0", "@sentry/vue": "10.0.0", - "@syuilo/aiscript": "0.19.0", + "@syuilo/aiscript": "1.0.0", + "@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0", "@twemoji/parser": "16.0.0", "@vitejs/plugin-vue": "6.0.1", "@vue/compiler-sfc": "3.5.18", diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index b9cb37e99a..043af4cc96 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -265,21 +265,19 @@ const currentClip = inject | null>('currentClip', nul let note = deepClone(props.note); -// コンポーネント初期化に非同期的な処理を行うとTransitionのレンダリングがバグるため同期的に実行できるメソッドが実装されるのを待つ必要がある -// https://github.com/aiscript-dev/aiscript/issues/937 -//// plugin -//const noteViewInterruptors = getPluginHandlers('note_view_interruptor'); -//if (noteViewInterruptors.length > 0) { -// let result: Misskey.entities.Note | null = deepClone(note); -// for (const interruptor of noteViewInterruptors) { -// try { -// result = await interruptor.handler(result!) as Misskey.entities.Note | null; -// } catch (err) { -// console.error(err); -// } -// } -// note = result as Misskey.entities.Note; -//} +// plugin +const noteViewInterruptors = getPluginHandlers('note_view_interruptor'); +if (noteViewInterruptors.length > 0) { + let result: Misskey.entities.Note | null = deepClone(note); + for (const interruptor of noteViewInterruptors) { + try { + result = interruptor.handler(result!) as Misskey.entities.Note | null; + } catch (err) { + console.error(err); + } + } + note = result as Misskey.entities.Note; +} const isRenote = Misskey.note.isPureRenote(note); const appearNote = getAppearNote(note) ?? note; diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue index c04959b97a..f3e990e65a 100644 --- a/packages/frontend/src/components/MkNoteDetailed.vue +++ b/packages/frontend/src/components/MkNoteDetailed.vue @@ -287,20 +287,19 @@ const inChannel = inject('inChannel', null); let note = deepClone(props.note); -// コンポーネント初期化に非同期的な処理を行うとTransitionのレンダリングがバグるため同期的に実行できるメソッドが実装されるのを待つ必要がある -//// plugin -//const noteViewInterruptors = getPluginHandlers('note_view_interruptor'); -//if (noteViewInterruptors.length > 0) { -// let result: Misskey.entities.Note | null = deepClone(note); -// for (const interruptor of noteViewInterruptors) { -// try { -// result = await interruptor.handler(result!) as Misskey.entities.Note | null; -// } catch (err) { -// console.error(err); -// } -// } -// note = result as Misskey.entities.Note; -//} +// plugin +const noteViewInterruptors = getPluginHandlers('note_view_interruptor'); +if (noteViewInterruptors.length > 0) { + let result: Misskey.entities.Note | null = deepClone(note); + for (const interruptor of noteViewInterruptors) { + try { + result = interruptor.handler(result!) as Misskey.entities.Note | null; + } catch (err) { + console.error(err); + } + } + note = result as Misskey.entities.Note; +} const isRenote = Misskey.note.isPureRenote(note); const appearNote = getAppearNote(note); diff --git a/packages/frontend/src/pages/flash/flash-edit.vue b/packages/frontend/src/pages/flash/flash-edit.vue index a964b33a52..bf4911f648 100644 --- a/packages/frontend/src/pages/flash/flash-edit.vue +++ b/packages/frontend/src/pages/flash/flash-edit.vue @@ -88,7 +88,7 @@ let choices = [ ] // シードが「PlayID+ユーザーID+今日の日付」である乱数生成器を用意 -let random = Math:gen_rng(\`{THIS_ID}{USER_ID}{Date:year()}{Date:month()}{Date:day()}\`) +let random = Math:gen_rng(\`{THIS_ID}{USER_ID}{Date:year()}{Date:month()}{Date:day()}\`, { algorithm: 'rc4_legacy' }) // ランダムに選択肢を選ぶ let chosen = choices[random(0, (choices.len - 1))] @@ -127,7 +127,7 @@ var results = [] // どれだけ巻き戻しているか var cursor = 0 -@do() { +@main() { if (cursor != 0) { results = results.slice(0, (cursor + 1)) cursor = 0 @@ -175,7 +175,7 @@ var cursor = 0 onClick: forward }, { text: "引き直す" - onClick: do + onClick: main }] }) Ui:C:postFormButton({ @@ -191,7 +191,7 @@ var cursor = 0 ]) } -do() +main() `; const PRESET_QUIZ = `/// @ ${AISCRIPT_VERSION} diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index 8443293d34..560d2a46ea 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -63,11 +63,11 @@ SPDX-License-Identifier: AGPL-3.0-only