diff --git a/locales/index.d.ts b/locales/index.d.ts index d585601d18f7..e47bcb9793e7 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -680,6 +680,10 @@ export interface Locale extends ILocale { * リノートのミュートを解除 */ "renoteUnmute": string; + /** + * リアクションのミュート + */ + "mutedReactions": string; /** * ブロック */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 1d01807d7b82..7381361b3031 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -166,6 +166,7 @@ mute: "ミュート" unmute: "ミュート解除" renoteMute: "リノートをミュート" renoteUnmute: "リノートのミュートを解除" +mutedReactions: "リアクションのミュート" block: "ブロック" unblock: "ブロック解除" suspend: "凍結" diff --git a/packages/backend/migration/1721320100254-reactionMute.js b/packages/backend/migration/1721320100254-reactionMute.js new file mode 100644 index 000000000000..24989a32a930 --- /dev/null +++ b/packages/backend/migration/1721320100254-reactionMute.js @@ -0,0 +1,12 @@ +export class ReactionMute1721320100254 { + name = 'ReactionMute1721320100254' + + async up(queryRunner) { + + await queryRunner.query(`ALTER TABLE "user_profile" ADD "mutedReactions" jsonb NOT NULL DEFAULT '[]'`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "mutedReactions"`); + } +} diff --git a/packages/backend/src/core/entities/UserEntityService.ts b/packages/backend/src/core/entities/UserEntityService.ts index 9b7e8ecc6ddb..9426f5a3184c 100644 --- a/packages/backend/src/core/entities/UserEntityService.ts +++ b/packages/backend/src/core/entities/UserEntityService.ts @@ -597,6 +597,7 @@ export class UserEntityService implements OnModuleInit { mutedWords: profile!.mutedWords, hardMutedWords: profile!.hardMutedWords, mutedInstances: profile!.mutedInstances, + mutedReactions: profile!.mutedReactions, mutingNotificationTypes: [], // 後方互換性のため notificationRecieveConfig: profile!.notificationRecieveConfig, emailNotificationTypes: profile!.emailNotificationTypes, diff --git a/packages/backend/src/models/UserProfile.ts b/packages/backend/src/models/UserProfile.ts index 1046076ecf36..969825dc655f 100644 --- a/packages/backend/src/models/UserProfile.ts +++ b/packages/backend/src/models/UserProfile.ts @@ -235,6 +235,11 @@ export class MiUserProfile { }) public mutedInstances: string[]; + @Column('jsonb', { + default: [], + }) + public mutedReactions: (string[] | string)[]; + @Column('jsonb', { default: {}, }) diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index 228a86f50631..a78fabe4f046 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -183,6 +183,7 @@ export const paramDef = { pinnedPageId: { type: 'string', format: 'misskey:id', nullable: true }, mutedWords: muteWords, hardMutedWords: muteWords, + mutedReactions: muteWords, mutedInstances: { type: 'array', items: { type: 'string', } }, @@ -311,6 +312,12 @@ export default class extends Endpoint { // eslint- validateMuteWordRegex(ps.hardMutedWords); profileUpdates.hardMutedWords = ps.hardMutedWords; } + if (ps.mutedReactions !== undefined) { + policies ??= await this.roleService.getUserPolicies(user.id); + checkMuteWordCount(ps.mutedReactions, policies.wordMuteLimit); + validateMuteWordRegex(ps.mutedReactions); + profileUpdates.mutedReactions = ps.mutedReactions; + } if (ps.mutedInstances !== undefined) profileUpdates.mutedInstances = ps.mutedInstances; if (ps.notificationRecieveConfig !== undefined) profileUpdates.notificationRecieveConfig = ps.notificationRecieveConfig; if (typeof ps.isLocked === 'boolean') updates.isLocked = ps.isLocked; diff --git a/packages/frontend/src/components/MkReactionsViewer.vue b/packages/frontend/src/components/MkReactionsViewer.vue index 639b804177c2..63aceb504dc9 100644 --- a/packages/frontend/src/components/MkReactionsViewer.vue +++ b/packages/frontend/src/components/MkReactionsViewer.vue @@ -21,6 +21,7 @@ import * as Misskey from 'misskey-js'; import { inject, watch, ref } from 'vue'; import XReaction from '@/components/MkReactionsViewer.reaction.vue'; import { defaultStore } from '@/store.js'; +import { $i } from '@/account.js'; const props = withDefaults(defineProps<{ note: Misskey.entities.Note & { @@ -46,6 +47,7 @@ if (props.note.myReaction && !Object.keys(reactions.value).includes(props.note.m reactions.value[props.note.myReaction] = props.note.reactions[props.note.myReaction]; } + function onMockToggleReaction(emoji: string, count: number) { if (!mock) return; @@ -54,7 +56,13 @@ function onMockToggleReaction(emoji: string, count: number) { emit('mockUpdateMyReaction', emoji, (count - reactions.value[i][1])); } +if ($i && reactions.value){ + reactions.value = reactions.value.filter(([reactionType]) =>{ + if (reactionType === props.note.myReaction) return true; + if (!($i.mutedReactions.flat()).includes(reactionType)) return true; + } ); +} watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumber]) => { let newReactions: [string, number][] = []; hasMoreReactions.value = Object.keys(newSource).length > maxNumber; @@ -65,7 +73,6 @@ watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumbe newReactions.push(reactions.value[i]); } } - const newReactionsNames = newReactions.map(([x]) => x); newReactions = [ ...newReactions, @@ -76,11 +83,17 @@ watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumbe newReactions = newReactions.slice(0, props.maxNumber); - if (props.note. myReaction && !newReactions.map(([x]) => x).includes(props.note.myReaction)) { + if (props.note.myReaction && !newReactions.map(([x]) => x).includes(props.note.myReaction)) { newReactions.push([props.note.myReaction, newSource[props.note.myReaction]]); } - - reactions.value = newReactions; + if ($i){ + reactions.value = newReactions.filter(([reactionType]) =>{ + if (reactionType === props.note.myReaction) return true; + if (!($i.mutedReactions.flat()).includes(reactionType)) return true; + } ); + } else { + reactions.value = newReactions; + } }, { immediate: true, deep: true }); diff --git a/packages/frontend/src/pages/settings/mute-block.vue b/packages/frontend/src/pages/settings/mute-block.vue index a786e437323e..6499a0910cb1 100644 --- a/packages/frontend/src/pages/settings/mute-block.vue +++ b/packages/frontend/src/pages/settings/mute-block.vue @@ -19,6 +19,13 @@ SPDX-License-Identifier: AGPL-3.0-only + + + + + + + @@ -225,6 +232,9 @@ async function saveMutedWords(mutedWords: (string | string[])[]) { async function saveHardMutedWords(hardMutedWords: (string | string[])[]) { await misskeyApi('i/update', { hardMutedWords }); } +async function saveMutedReactions(mutedReactions: (string | string[])[]) { + await misskeyApi('i/update', { mutedReactions }); +} const headerActions = computed(() => []); diff --git a/packages/frontend/src/pages/settings/mute-block.word-mute.vue b/packages/frontend/src/pages/settings/mute-block.word-mute.vue index 66c63865f564..4c3bc97b45ae 100644 --- a/packages/frontend/src/pages/settings/mute-block.word-mute.vue +++ b/packages/frontend/src/pages/settings/mute-block.word-mute.vue @@ -8,7 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts._wordMute.muteWords }} - +
{{ i18n.ts.save }} @@ -24,6 +24,7 @@ import { i18n } from '@/i18n.js'; const props = defineProps<{ muted: (string[] | string)[]; + notCaption?: boolean; }>(); const emit = defineEmits<{ diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index d11d2a4f0617..1881eba44f06 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -79,6 +79,9 @@ type AdminAccountsFindByEmailRequest = operations['admin___accounts___find-by-em // @public (undocumented) type AdminAccountsFindByEmailResponse = operations['admin___accounts___find-by-email']['responses']['200']['content']['application/json']; +// @public (undocumented) +type AdminAccountsPresentPointsRequest = operations['admin___accounts___present-points']['requestBody']['content']['application/json']; + // @public (undocumented) type AdminAdCreateRequest = operations['admin___ad___create']['requestBody']['content']['application/json']; @@ -154,6 +157,9 @@ type AdminEmojiAddAliasesBulkRequest = operations['admin___emoji___add-aliases-b // @public (undocumented) type AdminEmojiAddRequest = operations['admin___emoji___add']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminEmojiAddRequestRequest = operations['admin___emoji___add-request']['requestBody']['content']['application/json']; + // @public (undocumented) type AdminEmojiAddResponse = operations['admin___emoji___add']['responses']['200']['content']['application/json']; @@ -181,6 +187,12 @@ type AdminEmojiListRemoteResponse = operations['admin___emoji___list-remote']['r // @public (undocumented) type AdminEmojiListRequest = operations['admin___emoji___list']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminEmojiListRequestRequest = operations['admin___emoji___list-request']['requestBody']['content']['application/json']; + +// @public (undocumented) +type AdminEmojiListRequestResponse = operations['admin___emoji___list-request']['responses']['200']['content']['application/json']; + // @public (undocumented) type AdminEmojiListResponse = operations['admin___emoji___list']['responses']['200']['content']['application/json']; @@ -193,12 +205,21 @@ type AdminEmojiSetAliasesBulkRequest = operations['admin___emoji___set-aliases-b // @public (undocumented) type AdminEmojiSetCategoryBulkRequest = operations['admin___emoji___set-category-bulk']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminEmojiSetIssensitiveBulkRequest = operations['admin___emoji___set-issensitive-bulk']['requestBody']['content']['application/json']; + // @public (undocumented) type AdminEmojiSetLicenseBulkRequest = operations['admin___emoji___set-license-bulk']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminEmojiSetLocalonlyBulkRequest = operations['admin___emoji___set-localonly-bulk']['requestBody']['content']['application/json']; + // @public (undocumented) type AdminEmojiUpdateRequest = operations['admin___emoji___update']['requestBody']['content']['application/json']; +// @public (undocumented) +type AdminEmojiUpdateRequestRequest = operations['admin___emoji___update-request']['requestBody']['content']['application/json']; + // @public (undocumented) type AdminFederationDeleteAllFilesRequest = operations['admin___federation___delete-all-files']['requestBody']['content']['application/json']; @@ -1101,12 +1122,24 @@ type EmojiDetailed = components['schemas']['EmojiDetailed']; // @public (undocumented) type EmojiRequest = operations['emoji']['requestBody']['content']['application/json']; +// @public (undocumented) +type EmojiRequestDetailed = components['schemas']['EmojiRequestDetailed']; + +// @public (undocumented) +type EmojiRequestSimple = components['schemas']['EmojiRequestSimple']; + +// @public (undocumented) +type EmojiRequestsResponse = operations['emoji-requests']['responses']['200']['content']['application/json']; + // @public (undocumented) type EmojiResponse = operations['emoji']['responses']['200']['content']['application/json']; // @public (undocumented) type EmojiSimple = components['schemas']['EmojiSimple']; +// @public (undocumented) +type EmojiSpeedtestRequest = operations['emoji___speedtest']['requestBody']['content']['application/json']; + // @public (undocumented) type EmojisResponse = operations['emojis']['responses']['200']['content']['application/json']; @@ -1211,6 +1244,7 @@ declare namespace entities { AdminAccountsDeleteRequest, AdminAccountsFindByEmailRequest, AdminAccountsFindByEmailResponse, + AdminAccountsPresentPointsRequest, AdminAdCreateRequest, AdminAdCreateResponse, AdminAdDeleteRequest, @@ -1238,6 +1272,7 @@ declare namespace entities { AdminEmojiAddAliasesBulkRequest, AdminEmojiAddRequest, AdminEmojiAddResponse, + AdminEmojiAddRequestRequest, AdminEmojiCopyRequest, AdminEmojiCopyResponse, AdminEmojiDeleteBulkRequest, @@ -1247,11 +1282,17 @@ declare namespace entities { AdminEmojiListRemoteResponse, AdminEmojiListRequest, AdminEmojiListResponse, + AdminEmojiListRequestRequest, + AdminEmojiListRequestResponse, AdminEmojiRemoveAliasesBulkRequest, AdminEmojiSetAliasesBulkRequest, AdminEmojiSetCategoryBulkRequest, + AdminEmojiSetLocalonlyBulkRequest, + AdminEmojiSetIssensitiveBulkRequest, AdminEmojiSetLicenseBulkRequest, AdminEmojiUpdateRequest, + AdminEmojiUpdateRequestRequest, + EmojiSpeedtestRequest, AdminFederationDeleteAllFilesRequest, AdminFederationRefreshRemoteInstanceMetadataRequest, AdminFederationRemoveAllFollowingRequest, @@ -1569,6 +1610,8 @@ declare namespace entities { IWebhooksShowResponse, IWebhooksUpdateRequest, IWebhooksDeleteRequest, + IStatsRequest, + IStatsResponse, InviteCreateResponse, InviteDeleteRequest, InviteListRequest, @@ -1577,6 +1620,7 @@ declare namespace entities { MetaRequest, MetaResponse, EmojisResponse, + EmojiRequestsResponse, EmojiRequest, EmojiResponse, MiauthGenTokenRequest, @@ -1601,7 +1645,11 @@ declare namespace entities { NotesConversationResponse, NotesCreateRequest, NotesCreateResponse, + NotesScheduleDeleteRequest, + NotesScheduleListRequest, + NotesScheduleListResponse, NotesDeleteRequest, + NotesUpdateRequest, NotesFavoritesCreateRequest, NotesFavoritesDeleteRequest, NotesFeaturedRequest, @@ -1612,6 +1660,8 @@ declare namespace entities { NotesHybridTimelineResponse, NotesLocalTimelineRequest, NotesLocalTimelineResponse, + NotesAnyLocalTimelineRequest, + NotesAnyLocalTimelineResponse, NotesMentionsRequest, NotesMentionsResponse, NotesPollsRecommendationRequest, @@ -1710,6 +1760,8 @@ declare namespace entities { UsersListsDeleteRequest, UsersListsListRequest, UsersListsListResponse, + UsersListsListFavoriteRequest, + UsersListsListFavoriteResponse, UsersListsPullRequest, UsersListsPushRequest, UsersListsShowRequest, @@ -1797,7 +1849,9 @@ declare namespace entities { FederationInstance, GalleryPost, EmojiSimple, + EmojiRequestSimple, EmojiDetailed, + EmojiRequestDetailed, Flash, Signin, RoleCondFormulaLogics, @@ -2280,6 +2334,12 @@ type ISigninHistoryRequest = operations['i___signin-history']['requestBody']['co // @public (undocumented) type ISigninHistoryResponse = operations['i___signin-history']['responses']['200']['content']['application/json']; +// @public (undocumented) +type IStatsRequest = operations['i___stats']['requestBody']['content']['application/json']; + +// @public (undocumented) +type IStatsResponse = operations['i___stats']['responses']['200']['content']['application/json']; + // @public (undocumented) type IUnpinRequest = operations['i___unpin']['requestBody']['content']['application/json']; @@ -2519,6 +2579,12 @@ type NoteFavorite = components['schemas']['NoteFavorite']; // @public (undocumented) type NoteReaction = components['schemas']['NoteReaction']; +// @public (undocumented) +type NotesAnyLocalTimelineRequest = operations['notes___any-local-timeline']['requestBody']['content']['application/json']; + +// @public (undocumented) +type NotesAnyLocalTimelineResponse = operations['notes___any-local-timeline']['responses']['200']['content']['application/json']; + // @public (undocumented) type NotesChildrenRequest = operations['notes___children']['requestBody']['content']['application/json']; @@ -2621,6 +2687,15 @@ type NotesRequest = operations['notes']['requestBody']['content']['application/j // @public (undocumented) type NotesResponse = operations['notes']['responses']['200']['content']['application/json']; +// @public (undocumented) +type NotesScheduleDeleteRequest = operations['notes___schedule___delete']['requestBody']['content']['application/json']; + +// @public (undocumented) +type NotesScheduleListRequest = operations['notes___schedule___list']['requestBody']['content']['application/json']; + +// @public (undocumented) +type NotesScheduleListResponse = operations['notes___schedule___list']['responses']['200']['content']['application/json']; + // @public (undocumented) type NotesSearchByTagRequest = operations['notes___search-by-tag']['requestBody']['content']['application/json']; @@ -2666,6 +2741,9 @@ type NotesTranslateResponse = operations['notes___translate']['responses']['200' // @public (undocumented) type NotesUnrenoteRequest = operations['notes___unrenote']['requestBody']['content']['application/json']; +// @public (undocumented) +type NotesUpdateRequest = operations['notes___update']['requestBody']['content']['application/json']; + // @public (undocumented) type NotesUserListTimelineRequest = operations['notes___user-list-timeline']['requestBody']['content']['application/json']; @@ -3137,6 +3215,12 @@ type UsersListsGetMembershipsRequest = operations['users___lists___get-membershi // @public (undocumented) type UsersListsGetMembershipsResponse = operations['users___lists___get-memberships']['responses']['200']['content']['application/json']; +// @public (undocumented) +type UsersListsListFavoriteRequest = operations['users___lists___list-favorite']['requestBody']['content']['application/json']; + +// @public (undocumented) +type UsersListsListFavoriteResponse = operations['users___lists___list-favorite']['responses']['200']['content']['application/json']; + // @public (undocumented) type UsersListsListRequest = operations['users___lists___list']['requestBody']['content']['application/json']; diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index e799d4a0c5e0..39ed728ed5b5 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -118,6 +118,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:admin:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -349,6 +360,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -416,6 +438,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -449,6 +482,28 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -471,6 +526,28 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:admin:emoji* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -2819,6 +2896,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * Show statistics about a user. + * + * **Credential required**: *No* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -2885,6 +2973,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *No* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -3040,6 +3139,28 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + + /** + * No description provided. + * + * **Credential required**: *Yes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -3051,6 +3172,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *Yes* / **Permission**: *write:notes* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -3117,6 +3249,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * No description provided. + * + * **Credential required**: *No* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * No description provided. * @@ -3858,6 +4001,17 @@ declare module '../api.js' { credential?: string | null, ): Promise>; + /** + * Show all lists that the authenticated user has created. + * + * **Credential required**: *No* / **Permission**: *read:account* + */ + request( + endpoint: E, + params: P, + credential?: string | null, + ): Promise>; + /** * Remove a user from a list. * diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index be41951e4dbe..f9c93aa33f9f 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -18,6 +18,7 @@ import type { AdminAccountsDeleteRequest, AdminAccountsFindByEmailRequest, AdminAccountsFindByEmailResponse, + AdminAccountsPresentPointsRequest, AdminAdCreateRequest, AdminAdCreateResponse, AdminAdDeleteRequest, @@ -45,6 +46,7 @@ import type { AdminEmojiAddAliasesBulkRequest, AdminEmojiAddRequest, AdminEmojiAddResponse, + AdminEmojiAddRequestRequest, AdminEmojiCopyRequest, AdminEmojiCopyResponse, AdminEmojiDeleteBulkRequest, @@ -54,11 +56,17 @@ import type { AdminEmojiListRemoteResponse, AdminEmojiListRequest, AdminEmojiListResponse, + AdminEmojiListRequestRequest, + AdminEmojiListRequestResponse, AdminEmojiRemoveAliasesBulkRequest, AdminEmojiSetAliasesBulkRequest, AdminEmojiSetCategoryBulkRequest, + AdminEmojiSetLocalonlyBulkRequest, + AdminEmojiSetIssensitiveBulkRequest, AdminEmojiSetLicenseBulkRequest, AdminEmojiUpdateRequest, + AdminEmojiUpdateRequestRequest, + EmojiSpeedtestRequest, AdminFederationDeleteAllFilesRequest, AdminFederationRefreshRemoteInstanceMetadataRequest, AdminFederationRemoveAllFollowingRequest, @@ -376,6 +384,8 @@ import type { IWebhooksShowResponse, IWebhooksUpdateRequest, IWebhooksDeleteRequest, + IStatsRequest, + IStatsResponse, InviteCreateResponse, InviteDeleteRequest, InviteListRequest, @@ -384,6 +394,7 @@ import type { MetaRequest, MetaResponse, EmojisResponse, + EmojiRequestsResponse, EmojiRequest, EmojiResponse, MiauthGenTokenRequest, @@ -408,7 +419,11 @@ import type { NotesConversationResponse, NotesCreateRequest, NotesCreateResponse, + NotesScheduleDeleteRequest, + NotesScheduleListRequest, + NotesScheduleListResponse, NotesDeleteRequest, + NotesUpdateRequest, NotesFavoritesCreateRequest, NotesFavoritesDeleteRequest, NotesFeaturedRequest, @@ -419,6 +434,8 @@ import type { NotesHybridTimelineResponse, NotesLocalTimelineRequest, NotesLocalTimelineResponse, + NotesAnyLocalTimelineRequest, + NotesAnyLocalTimelineResponse, NotesMentionsRequest, NotesMentionsResponse, NotesPollsRecommendationRequest, @@ -517,6 +534,8 @@ import type { UsersListsDeleteRequest, UsersListsListRequest, UsersListsListResponse, + UsersListsListFavoriteRequest, + UsersListsListFavoriteResponse, UsersListsPullRequest, UsersListsPushRequest, UsersListsShowRequest, @@ -584,6 +603,7 @@ export type Endpoints = { 'admin/accounts/create': { req: AdminAccountsCreateRequest; res: AdminAccountsCreateResponse }; 'admin/accounts/delete': { req: AdminAccountsDeleteRequest; res: EmptyResponse }; 'admin/accounts/find-by-email': { req: AdminAccountsFindByEmailRequest; res: AdminAccountsFindByEmailResponse }; + 'admin/accounts/present-points': { req: AdminAccountsPresentPointsRequest; res: EmptyResponse }; 'admin/ad/create': { req: AdminAdCreateRequest; res: AdminAdCreateResponse }; 'admin/ad/delete': { req: AdminAdDeleteRequest; res: EmptyResponse }; 'admin/ad/list': { req: AdminAdListRequest; res: AdminAdListResponse }; @@ -605,17 +625,23 @@ export type Endpoints = { 'admin/drive/show-file': { req: AdminDriveShowFileRequest; res: AdminDriveShowFileResponse }; 'admin/emoji/add-aliases-bulk': { req: AdminEmojiAddAliasesBulkRequest; res: EmptyResponse }; 'admin/emoji/add': { req: AdminEmojiAddRequest; res: AdminEmojiAddResponse }; + 'admin/emoji/add-request': { req: AdminEmojiAddRequestRequest; res: EmptyResponse }; 'admin/emoji/copy': { req: AdminEmojiCopyRequest; res: AdminEmojiCopyResponse }; 'admin/emoji/delete-bulk': { req: AdminEmojiDeleteBulkRequest; res: EmptyResponse }; 'admin/emoji/delete': { req: AdminEmojiDeleteRequest; res: EmptyResponse }; 'admin/emoji/import-zip': { req: AdminEmojiImportZipRequest; res: EmptyResponse }; 'admin/emoji/list-remote': { req: AdminEmojiListRemoteRequest; res: AdminEmojiListRemoteResponse }; 'admin/emoji/list': { req: AdminEmojiListRequest; res: AdminEmojiListResponse }; + 'admin/emoji/list-request': { req: AdminEmojiListRequestRequest; res: AdminEmojiListRequestResponse }; 'admin/emoji/remove-aliases-bulk': { req: AdminEmojiRemoveAliasesBulkRequest; res: EmptyResponse }; 'admin/emoji/set-aliases-bulk': { req: AdminEmojiSetAliasesBulkRequest; res: EmptyResponse }; 'admin/emoji/set-category-bulk': { req: AdminEmojiSetCategoryBulkRequest; res: EmptyResponse }; + 'admin/emoji/set-localonly-bulk': { req: AdminEmojiSetLocalonlyBulkRequest; res: EmptyResponse }; + 'admin/emoji/set-issensitive-bulk': { req: AdminEmojiSetIssensitiveBulkRequest; res: EmptyResponse }; 'admin/emoji/set-license-bulk': { req: AdminEmojiSetLicenseBulkRequest; res: EmptyResponse }; 'admin/emoji/update': { req: AdminEmojiUpdateRequest; res: EmptyResponse }; + 'admin/emoji/update-request': { req: AdminEmojiUpdateRequestRequest; res: EmptyResponse }; + 'emoji/speedtest': { req: EmojiSpeedtestRequest; res: EmptyResponse }; 'admin/federation/delete-all-files': { req: AdminFederationDeleteAllFilesRequest; res: EmptyResponse }; 'admin/federation/refresh-remote-instance-metadata': { req: AdminFederationRefreshRemoteInstanceMetadataRequest; res: EmptyResponse }; 'admin/federation/remove-all-following': { req: AdminFederationRemoveAllFollowingRequest; res: EmptyResponse }; @@ -826,12 +852,14 @@ export type Endpoints = { 'i/webhooks/show': { req: IWebhooksShowRequest; res: IWebhooksShowResponse }; 'i/webhooks/update': { req: IWebhooksUpdateRequest; res: EmptyResponse }; 'i/webhooks/delete': { req: IWebhooksDeleteRequest; res: EmptyResponse }; + 'i/stats': { req: IStatsRequest; res: IStatsResponse }; 'invite/create': { req: EmptyRequest; res: InviteCreateResponse }; 'invite/delete': { req: InviteDeleteRequest; res: EmptyResponse }; 'invite/list': { req: InviteListRequest; res: InviteListResponse }; 'invite/limit': { req: EmptyRequest; res: InviteLimitResponse }; 'meta': { req: MetaRequest; res: MetaResponse }; 'emojis': { req: EmptyRequest; res: EmojisResponse }; + 'emoji-requests': { req: EmptyRequest; res: EmojiRequestsResponse }; 'emoji': { req: EmojiRequest; res: EmojiResponse }; 'miauth/gen-token': { req: MiauthGenTokenRequest; res: MiauthGenTokenResponse }; 'mute/create': { req: MuteCreateRequest; res: EmptyResponse }; @@ -846,13 +874,17 @@ export type Endpoints = { 'notes/clips': { req: NotesClipsRequest; res: NotesClipsResponse }; 'notes/conversation': { req: NotesConversationRequest; res: NotesConversationResponse }; 'notes/create': { req: NotesCreateRequest; res: NotesCreateResponse }; + 'notes/schedule/delete': { req: NotesScheduleDeleteRequest; res: EmptyResponse }; + 'notes/schedule/list': { req: NotesScheduleListRequest; res: NotesScheduleListResponse }; 'notes/delete': { req: NotesDeleteRequest; res: EmptyResponse }; + 'notes/update': { req: NotesUpdateRequest; res: EmptyResponse }; 'notes/favorites/create': { req: NotesFavoritesCreateRequest; res: EmptyResponse }; 'notes/favorites/delete': { req: NotesFavoritesDeleteRequest; res: EmptyResponse }; 'notes/featured': { req: NotesFeaturedRequest; res: NotesFeaturedResponse }; 'notes/global-timeline': { req: NotesGlobalTimelineRequest; res: NotesGlobalTimelineResponse }; 'notes/hybrid-timeline': { req: NotesHybridTimelineRequest; res: NotesHybridTimelineResponse }; 'notes/local-timeline': { req: NotesLocalTimelineRequest; res: NotesLocalTimelineResponse }; + 'notes/any-local-timeline': { req: NotesAnyLocalTimelineRequest; res: NotesAnyLocalTimelineResponse }; 'notes/mentions': { req: NotesMentionsRequest; res: NotesMentionsResponse }; 'notes/polls/recommendation': { req: NotesPollsRecommendationRequest; res: NotesPollsRecommendationResponse }; 'notes/polls/vote': { req: NotesPollsVoteRequest; res: EmptyResponse }; @@ -920,6 +952,7 @@ export type Endpoints = { 'users/lists/create': { req: UsersListsCreateRequest; res: UsersListsCreateResponse }; 'users/lists/delete': { req: UsersListsDeleteRequest; res: EmptyResponse }; 'users/lists/list': { req: UsersListsListRequest; res: UsersListsListResponse }; + 'users/lists/list-favorite': { req: UsersListsListFavoriteRequest; res: UsersListsListFavoriteResponse }; 'users/lists/pull': { req: UsersListsPullRequest; res: EmptyResponse }; 'users/lists/push': { req: UsersListsPushRequest; res: EmptyResponse }; 'users/lists/show': { req: UsersListsShowRequest; res: UsersListsShowResponse }; @@ -966,6 +999,7 @@ export const endpointReqTypes: Record | null; + }; }; }; /** @description Client error */ @@ -20999,6 +21968,12 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; + /** @description To many requests */ + 429: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; /** @description Internal server error */ 500: { content: { @@ -21008,32 +21983,24 @@ export type operations = { }; }; /** - * notes/children + * notes/schedule/delete * @description No description provided. * - * **Credential required**: *No* + * **Credential required**: *Yes* */ - notes___children: { + notes___schedule___delete: { requestBody: { content: { 'application/json': { /** Format: misskey:id */ - noteId: string; - /** @default 10 */ - limit?: number; - /** Format: misskey:id */ - sinceId?: string; - /** Format: misskey:id */ - untilId?: string; + scheduledNoteId: string; }; }; }; responses: { - /** @description OK (with results) */ - 200: { - content: { - 'application/json': components['schemas']['Note'][]; - }; + /** @description OK (without any results) */ + 204: { + content: never; }; /** @description Client error */ 400: { @@ -21059,6 +22026,12 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; + /** @description To many requests */ + 429: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; /** @description Internal server error */ 500: { content: { @@ -21068,17 +22041,21 @@ export type operations = { }; }; /** - * notes/clips + * notes/schedule/list * @description No description provided. * - * **Credential required**: *No* + * **Credential required**: *Yes* */ - notes___clips: { + notes___schedule___list: { requestBody: { content: { 'application/json': { /** Format: misskey:id */ - noteId: string; + sinceId?: string; + /** Format: misskey:id */ + untilId?: string; + /** @default 10 */ + limit?: number; }; }; }; @@ -21086,7 +22063,7 @@ export type operations = { /** @description OK (with results) */ 200: { content: { - 'application/json': components['schemas']['Clip'][]; + 'application/json': Record[]; }; }; /** @description Client error */ @@ -21122,30 +22099,24 @@ export type operations = { }; }; /** - * notes/conversation + * notes/delete * @description No description provided. * - * **Credential required**: *No* + * **Credential required**: *Yes* / **Permission**: *write:notes* */ - notes___conversation: { + notes___delete: { requestBody: { content: { 'application/json': { /** Format: misskey:id */ noteId: string; - /** @default 10 */ - limit?: number; - /** @default 0 */ - offset?: number; }; }; }; responses: { - /** @description OK (with results) */ - 200: { - content: { - 'application/json': components['schemas']['Note'][]; - }; + /** @description OK (without any results) */ + 204: { + content: never; }; /** @description Client error */ 400: { @@ -21171,6 +22142,12 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; + /** @description To many requests */ + 429: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; /** @description Internal server error */ 500: { content: { @@ -21180,22 +22157,24 @@ export type operations = { }; }; /** - * notes/create + * notes/update * @description No description provided. * * **Credential required**: *Yes* / **Permission**: *write:notes* */ - notes___create: { + notes___update: { requestBody: { content: { 'application/json': { + /** Format: misskey:id */ + noteId: string; /** * @default public * @enum {string} */ visibility?: 'public' | 'home' | 'followers' | 'specified'; visibleUserIds?: string[]; - cw?: string | null; + cw: string | null; /** @default false */ localOnly?: boolean; /** @@ -21215,7 +22194,7 @@ export type operations = { renoteId?: string | null; /** Format: misskey:id */ channelId?: string | null; - text?: string | null; + text: string; fileIds?: string[]; mediaIds?: string[]; poll?: ({ @@ -21224,17 +22203,15 @@ export type operations = { expiresAt?: number | null; expiredAfter?: number | null; }) | null; + /** @default false */ + disableRightClick?: boolean; }; }; }; responses: { - /** @description OK (with results) */ - 200: { - content: { - 'application/json': { - createdNote: components['schemas']['Note']; - }; - }; + /** @description OK (without any results) */ + 204: { + content: never; }; /** @description Client error */ 400: { @@ -21275,12 +22252,12 @@ export type operations = { }; }; /** - * notes/delete + * notes/favorites/create * @description No description provided. * - * **Credential required**: *Yes* / **Permission**: *write:notes* + * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - notes___delete: { + notes___favorites___create: { requestBody: { content: { 'application/json': { @@ -21333,12 +22310,12 @@ export type operations = { }; }; /** - * notes/favorites/create + * notes/favorites/delete * @description No description provided. * * **Credential required**: *Yes* / **Permission**: *write:favorites* */ - notes___favorites___create: { + notes___favorites___delete: { requestBody: { content: { 'application/json': { @@ -21376,12 +22353,6 @@ export type operations = { 'application/json': components['schemas']['Error']; }; }; - /** @description To many requests */ - 429: { - content: { - 'application/json': components['schemas']['Error']; - }; - }; /** @description Internal server error */ 500: { content: { @@ -21391,24 +22362,30 @@ export type operations = { }; }; /** - * notes/favorites/delete + * notes/featured * @description No description provided. * - * **Credential required**: *Yes* / **Permission**: *write:favorites* + * **Credential required**: *No* */ - notes___favorites___delete: { + notes___featured: { requestBody: { content: { 'application/json': { + /** @default 10 */ + limit?: number; /** Format: misskey:id */ - noteId: string; + untilId?: string; + /** Format: misskey:id */ + channelId?: string | null; }; }; }; responses: { - /** @description OK (without any results) */ - 204: { - content: never; + /** @description OK (with results) */ + 200: { + content: { + 'application/json': components['schemas']['Note'][]; + }; }; /** @description Client error */ 400: { @@ -21443,21 +22420,27 @@ export type operations = { }; }; /** - * notes/featured + * notes/global-timeline * @description No description provided. * * **Credential required**: *No* */ - notes___featured: { + 'notes___global-timeline': { requestBody: { content: { 'application/json': { + /** @default false */ + withFiles?: boolean; + /** @default true */ + withRenotes?: boolean; /** @default 10 */ limit?: number; /** Format: misskey:id */ - untilId?: string; + sinceId?: string; /** Format: misskey:id */ - channelId?: string | null; + untilId?: string; + sinceDate?: number; + untilDate?: number; }; }; }; @@ -21501,19 +22484,15 @@ export type operations = { }; }; /** - * notes/global-timeline + * notes/hybrid-timeline * @description No description provided. * - * **Credential required**: *No* + * **Credential required**: *Yes* / **Permission**: *read:account* */ - 'notes___global-timeline': { + 'notes___hybrid-timeline': { requestBody: { content: { 'application/json': { - /** @default false */ - withFiles?: boolean; - /** @default true */ - withRenotes?: boolean; /** @default 10 */ limit?: number; /** Format: misskey:id */ @@ -21522,6 +22501,20 @@ export type operations = { untilId?: string; sinceDate?: number; untilDate?: number; + /** @default false */ + allowPartial?: boolean; + /** @default true */ + includeMyRenotes?: boolean; + /** @default true */ + includeRenotedMyNotes?: boolean; + /** @default true */ + includeLocalRenotes?: boolean; + /** @default false */ + withFiles?: boolean; + /** @default true */ + withRenotes?: boolean; + /** @default false */ + withReplies?: boolean; }; }; }; @@ -21565,37 +22558,31 @@ export type operations = { }; }; /** - * notes/hybrid-timeline + * notes/local-timeline * @description No description provided. * - * **Credential required**: *Yes* / **Permission**: *read:account* + * **Credential required**: *No* */ - 'notes___hybrid-timeline': { + 'notes___local-timeline': { requestBody: { content: { 'application/json': { + /** @default false */ + withFiles?: boolean; + /** @default true */ + withRenotes?: boolean; + /** @default false */ + withReplies?: boolean; /** @default 10 */ limit?: number; /** Format: misskey:id */ sinceId?: string; /** Format: misskey:id */ untilId?: string; - sinceDate?: number; - untilDate?: number; /** @default false */ allowPartial?: boolean; - /** @default true */ - includeMyRenotes?: boolean; - /** @default true */ - includeRenotedMyNotes?: boolean; - /** @default true */ - includeLocalRenotes?: boolean; - /** @default false */ - withFiles?: boolean; - /** @default true */ - withRenotes?: boolean; - /** @default false */ - withReplies?: boolean; + sinceDate?: number; + untilDate?: number; }; }; }; @@ -21639,12 +22626,12 @@ export type operations = { }; }; /** - * notes/local-timeline + * notes/any-local-timeline * @description No description provided. * * **Credential required**: *No* */ - 'notes___local-timeline': { + 'notes___any-local-timeline': { requestBody: { content: { 'application/json': { @@ -21664,6 +22651,8 @@ export type operations = { allowPartial?: boolean; sinceDate?: number; untilDate?: number; + host?: string; + remoteToken?: string; }; }; }; @@ -22004,6 +22993,7 @@ export type operations = { 'application/json': { /** Format: misskey:id */ noteId: string; + reaction?: string; }; }; }; @@ -25528,6 +26518,65 @@ export type operations = { 'application/json': { /** Format: misskey:id */ userId?: string; + publicAll?: boolean; + }; + }; + }; + responses: { + /** @description OK (with results) */ + 200: { + content: { + 'application/json': components['schemas']['UserList'][]; + }; + }; + /** @description Client error */ + 400: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Authentication error */ + 401: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Forbidden error */ + 403: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description I'm Ai */ + 418: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + /** @description Internal server error */ + 500: { + content: { + 'application/json': components['schemas']['Error']; + }; + }; + }; + }; + /** + * users/lists/list-favorite + * @description Show all lists that the authenticated user has created. + * + * **Credential required**: *No* / **Permission**: *read:account* + */ + 'users___lists___list-favorite': { + requestBody: { + content: { + 'application/json': { + /** @default 10 */ + limit?: number; + /** Format: misskey:id */ + sinceId?: string; + /** Format: misskey:id */ + untilId?: string; }; }; }; @@ -26479,6 +27528,7 @@ export type operations = { /** Format: misskey:id */ userId: string; comment: string; + noteIds?: string[]; }; }; };