summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2021-05-11 12:41:02 +0900
committerGitHub <noreply@github.com>2021-05-11 12:41:02 +0900
commit917e57d47536aec70c33ea63cb2f3868f21f8242 (patch)
tree474d55ffb1e473ce722b0057c26b0cd7dde71192 /src
parentchange dom order: down elements cover upper ones (#7509) (diff)
downloadsharkey-917e57d47536aec70c33ea63cb2f3868f21f8242.tar.gz
sharkey-917e57d47536aec70c33ea63cb2f3868f21f8242.tar.bz2
sharkey-917e57d47536aec70c33ea63cb2f3868f21f8242.zip
Fix #7431 (#7432)
* Fix #7431 * fix
Diffstat (limited to 'src')
-rw-r--r--src/remote/activitypub/kernel/like.ts9
-rw-r--r--src/services/note/reaction/create.ts12
2 files changed, 14 insertions, 7 deletions
diff --git a/src/remote/activitypub/kernel/like.ts b/src/remote/activitypub/kernel/like.ts
index a6f02a1f8f..6ba03e4a48 100644
--- a/src/remote/activitypub/kernel/like.ts
+++ b/src/remote/activitypub/kernel/like.ts
@@ -11,6 +11,11 @@ export default async (actor: IRemoteUser, activity: ILike) => {
await extractEmojis(activity.tag || [], actor.host).catch(() => null);
- await create(actor, note, activity._misskey_reaction || activity.content || activity.name);
- return `ok`;
+ return await create(actor, note, activity._misskey_reaction || activity.content || activity.name).catch(e => {
+ if (e.id === '51c42bb4-931a-456b-bff7-e5a8a70dd298') {
+ return 'skip: already reacted';
+ } else {
+ throw e;
+ }
+ }).then(() => 'ok');
};
diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts
index e2e7fc54ef..ce6ae08b30 100644
--- a/src/services/note/reaction/create.ts
+++ b/src/services/note/reaction/create.ts
@@ -13,12 +13,13 @@ import { createNotification } from '../../create-notification';
import deleteReaction from './delete';
import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error';
import { NoteReaction } from '../../../models/entities/note-reaction';
+import { IdentifiableError } from '@/misc/identifiable-error';
export default async (user: { id: User['id']; host: User['host']; }, note: Note, reaction?: string) => {
// TODO: cache
reaction = await toDbReaction(reaction, user.host);
- let record: NoteReaction = {
+ const record: NoteReaction = {
id: genId(),
createdAt: new Date(),
noteId: note.id,
@@ -31,17 +32,18 @@ export default async (user: { id: User['id']; host: User['host']; }, note: Note,
await NoteReactions.insert(record);
} catch (e) {
if (isDuplicateKeyValueError(e)) {
- record = await NoteReactions.findOneOrFail({
+ const exists = await NoteReactions.findOneOrFail({
noteId: note.id,
userId: user.id,
});
- if (record.reaction !== reaction) {
+ if (exists.reaction !== reaction) {
// 別のリアクションがすでにされていたら置き換える
await deleteReaction(user, note);
+ await NoteReactions.insert(record);
} else {
- // 同じリアクションがすでにされていたら何もしない
- return;
+ // 同じリアクションがすでにされていたらエラー
+ throw new IdentifiableError('51c42bb4-931a-456b-bff7-e5a8a70dd298');
}
} else {
throw e;