From 65e96b6e625b2560eff60624a51bf9b0f7bd44a3 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:53:09 +0900 Subject: [PATCH 1/5] =?UTF-8?q?fix(frontend):=20=E3=83=8E=E3=83=BC?= =?UTF-8?q?=E3=83=88=E6=8A=95=E7=A8=BF=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=AE=9F=E7=B8=BE=E3=81=8C=E6=8A=95=E7=A8=BF=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=82=A2=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=A7=E8=A7=A3?= =?UTF-8?q?=E9=99=A4=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/src/components/MkPostForm.vue | 25 ++++++++++++------- packages/frontend/src/scripts/achievements.ts | 25 +++++++++++++------ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index e03faeaf55..ad5e7c5e11 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -803,17 +803,24 @@ async function post(ev?: MouseEvent) { miLocalStorage.setItem('hashtags', JSON.stringify(unique(hashtags_.concat(history)))); } posting.value = false; - postAccount.value = null; - incNotesCount(); - if (notesCount === 1) { - claimAchievement('notes1'); + const isMe = postAccount.value?.id === $i.id; + + if (isMe) { + incNotesCount(); + if (notesCount === 1) { + claimAchievement('notes1'); + } + } else if ((postAccount.value?.notesCount ?? 0) <= 0) { + claimAchievement('notes1', token); } + postAccount.value = null; + const text = postData.text ?? ''; const lowerCase = text.toLowerCase(); if ((lowerCase.includes('love') || lowerCase.includes('❤')) && lowerCase.includes('misskey')) { - claimAchievement('iLoveMisskey'); + claimAchievement('iLoveMisskey', token); } if ([ 'https://youtu.be/Efrlqw8ytg4', @@ -829,11 +836,11 @@ async function post(ev?: MouseEvent) { 'https://open.spotify.com/track/5Odr16TvEN4my22K9nbH7l', 'https://open.spotify.com/album/5bOlxyl4igOrp2DwVQxBco', ].some(url => text.includes(url))) { - claimAchievement('brainDiver'); + claimAchievement('brainDiver', token); } if (props.renote && (props.renote.userId === $i.id) && text.length > 0) { - claimAchievement('selfQuote'); + claimAchievement('selfQuote', token); } const date = new Date(); @@ -841,10 +848,10 @@ async function post(ev?: MouseEvent) { const m = date.getMinutes(); const s = date.getSeconds(); if (h >= 0 && h <= 3) { - claimAchievement('postedAtLateNight'); + claimAchievement('postedAtLateNight', token); } if (m === 0 && s === 0) { - claimAchievement('postedAt0min0sec'); + claimAchievement('postedAt0min0sec', token); } }); }).catch(err => { diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts index f5d0ab559f..4ae3fe9085 100644 --- a/packages/frontend/src/scripts/achievements.ts +++ b/packages/frontend/src/scripts/achievements.ts @@ -487,21 +487,32 @@ export const ACHIEVEMENT_BADGES = { */ } as const; -export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name) : []; +export const claimedAchievements: typeof ACHIEVEMENT_TYPES[number][] = ($i && $i.achievements) ? $i.achievements.map(x => x.name as typeof ACHIEVEMENT_TYPES[number]) : []; -const claimingQueue = new Set(); +const claimingQueue = new Set<{ + name: typeof ACHIEVEMENT_TYPES[number]; + token?: string; +}>(); -export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number]) { +export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number], token?: string) { if ($i == null) return; if ($i.movedTo) return; if (claimedAchievements.includes(type)) return; - claimingQueue.add(type); - claimedAchievements.push(type); + claimingQueue.add({ + name: type, + token, + }); + if (!token || $i.token !== token) { + claimedAchievements.push(type); + } await new Promise(resolve => setTimeout(resolve, (claimingQueue.size - 1) * 500)); window.setTimeout(() => { - claimingQueue.delete(type); + claimingQueue.delete({ + name: type, + token, + }); }, 500); - misskeyApi('i/claim-achievement', { name: type }); + misskeyApi('i/claim-achievement', { name: type }, token); } if (_DEV_) { From 42c024cc6db8b3fdec6144cafb51eb4da5ada9fd Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:02:55 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E5=AE=9F=E7=B8=BE=E3=81=8C=E3=81=99?= =?UTF-8?q?=E3=81=A7=E3=81=AB=E7=8D=B2=E5=BE=97=E3=81=95=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=82=8B=E3=81=8B=E3=81=A9=E3=81=86=E3=81=8B=E3=81=AE?= =?UTF-8?q?=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/frontend/src/scripts/achievements.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts index 4ae3fe9085..c7a84c703d 100644 --- a/packages/frontend/src/scripts/achievements.ts +++ b/packages/frontend/src/scripts/achievements.ts @@ -497,7 +497,9 @@ const claimingQueue = new Set<{ export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number], token?: string) { if ($i == null) return; if ($i.movedTo) return; - if (claimedAchievements.includes(type)) return; + // バックエンドにも実績を獲ったかどうかのチェックがあるのでtoken指定時は常に実績獲得を送信する + if (!token && claimedAchievements.includes(type)) return; + claimingQueue.add({ name: type, token, From 843a91a4f1f2156788073a2d7366365b62ed4a8b Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 4 Mar 2024 15:03:57 +0900 Subject: [PATCH 3/5] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bafee277d2..c9e2a50771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - 履歴に残っている or ピン留めされた絵文字がコントロールパネルより削除されていた際にリアクションデッキが表示できなくなる - Unicode絵文字が履歴に残っている or ピン留めされているとリアクションデッキが表示できなくなる - Fix: カスタム絵文字の画像読み込みに失敗した際はテキストではなくダミー画像を表示 #13487 +- Fix: 別アカウントを指定してノートを投稿した場合でも自分のアカウントの実績が解除されてしまう問題を修正 ### Server - From 06419f257388c699dc45b7db398775af3970203f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:10:33 +0900 Subject: [PATCH 4/5] Update CHANGELOG.md --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e800409c7b..982789f697 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ - ### Client -- +- Fix: 別アカウントを指定してノートを投稿した場合でも自分のアカウントの実績が解除されてしまう問題を修正 ### Server - @@ -33,7 +33,6 @@ - 履歴に残っている or ピン留めされた絵文字がコントロールパネルより削除されていた際にリアクションデッキが表示できなくなる - Unicode絵文字が履歴に残っている or ピン留めされているとリアクションデッキが表示できなくなる - Fix: カスタム絵文字の画像読み込みに失敗した際はテキストではなくダミー画像を表示 #13487 -- Fix: 別アカウントを指定してノートを投稿した場合でも自分のアカウントの実績が解除されてしまう問題を修正 ### Server - From 196ae11487d4cb97f979f46845c0602949a82394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 30 Mar 2024 16:32:18 +0900 Subject: [PATCH 5/5] Update packages/frontend/src/scripts/achievements.ts --- packages/frontend/src/scripts/achievements.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/scripts/achievements.ts b/packages/frontend/src/scripts/achievements.ts index c7a84c703d..4b25f3b589 100644 --- a/packages/frontend/src/scripts/achievements.ts +++ b/packages/frontend/src/scripts/achievements.ts @@ -498,7 +498,7 @@ export async function claimAchievement(type: typeof ACHIEVEMENT_TYPES[number], t if ($i == null) return; if ($i.movedTo) return; // バックエンドにも実績を獲ったかどうかのチェックがあるのでtoken指定時は常に実績獲得を送信する - if (!token && claimedAchievements.includes(type)) return; + if ((!token || token === $i.token) && claimedAchievements.includes(type)) return; claimingQueue.add({ name: type,