diff --git a/packages/backend/src/misc/is-quote.ts b/packages/backend/src/misc/is-quote.ts deleted file mode 100644 index 779f548b0..000000000 --- a/packages/backend/src/misc/is-quote.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Note } from '@/models/entities/note.js'; - -export default function(note: Note): boolean { - return note.renoteId != null && (note.text != null || note.hasPoll || (note.fileIds != null && note.fileIds.length > 0)); -} diff --git a/packages/backend/src/misc/renote.ts b/packages/backend/src/misc/renote.ts new file mode 100644 index 000000000..e4b8c06e1 --- /dev/null +++ b/packages/backend/src/misc/renote.ts @@ -0,0 +1,5 @@ +import { Note } from '@/models/entities/note.js'; + +export function isPureRenote(note: Note): boolean { + return note.renoteId != null && note.text == null && (renote.fileIds == null || renote.fileIds.length === 0) && !note.hasPoll; +} diff --git a/packages/backend/src/server/activitypub/outbox.ts b/packages/backend/src/server/activitypub/outbox.ts index 7a2586998..feefff227 100644 --- a/packages/backend/src/server/activitypub/outbox.ts +++ b/packages/backend/src/server/activitypub/outbox.ts @@ -13,6 +13,7 @@ import { Users, Notes } from '@/models/index.js'; import { Note } from '@/models/entities/note.js'; import { makePaginationQuery } from '../api/common/make-pagination-query.js'; import { setResponseType } from '../activitypub.js'; +import { isPureRenote } from '@/misc/renote.js'; export default async (ctx: Router.RouterContext) => { const userId = ctx.params.user; @@ -99,10 +100,10 @@ export default async (ctx: Router.RouterContext) => { * @param note Note */ export async function packActivity(note: Note): Promise { - if (note.renoteId && note.text == null && !note.hasPoll && (note.fileIds == null || note.fileIds.length === 0)) { + if (isPureRenote(note)) { const renote = await Notes.findOneByOrFail({ id: note.renoteId }); return renderAnnounce(renote.uri ? renote.uri : `${config.url}/notes/${renote.id}`, note); + } else { + return renderCreate(await renderNote(note, false), note); } - - return renderCreate(await renderNote(note, false), note); } diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index 2f3d47c12..38d2f9cef 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -10,6 +10,7 @@ import { noteVisibilities } from '../../../../types.js'; import { ApiError } from '../../error.js'; import define from '../../define.js'; import { getNote } from '../../common/getters.js'; +import { isPureRenote } from '@/misc/renote.js'; export const meta = { tags: ['notes'], @@ -201,7 +202,7 @@ export default define(meta, paramDef, async (ps, user) => { throw e; }); - if (renote.renoteId && !renote.text && !renote.fileIds && !renote.hasPoll) { + if (isPureRenote(renote)) { throw new ApiError(meta.errors.cannotReRenote); } @@ -230,7 +231,7 @@ export default define(meta, paramDef, async (ps, user) => { throw e; }); - if (reply.renoteId && !reply.text && !reply.fileIds && !reply.hasPoll) { + if (isPureRenote(reply)) { throw new ApiError(meta.errors.cannotReplyToPureRenote); } diff --git a/packages/backend/src/services/note/delete.ts b/packages/backend/src/services/note/delete.ts index 496320016..54ba5c6cb 100644 --- a/packages/backend/src/services/note/delete.ts +++ b/packages/backend/src/services/note/delete.ts @@ -14,6 +14,7 @@ import { deliverToFollowers, deliverToUser } from '@/remote/activitypub/deliver- import { countSameRenotes } from '@/misc/count-same-renotes.js'; import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc.js'; import { deliverToRelays } from '../relay.js'; +import { isPureRenote } from '@/misc/renote.js'; /** * 投稿を削除します。 @@ -43,7 +44,7 @@ export default async function(user: { id: User['id']; uri: User['uri']; host: Us let renote: Note | null = null; // if deletd note is renote - if (note.renoteId && note.text == null && !note.hasPoll && (note.fileIds == null || note.fileIds.length === 0)) { + if (isPureRenote(note)) { renote = await Notes.findOneBy({ id: note.renoteId, });