Merge branch 'develop' into feature/2024.9.0
This commit is contained in:
commit
52e291af67
19 changed files with 206 additions and 18 deletions
|
@ -1229,6 +1229,7 @@ refreshing: "Refreshing..."
|
||||||
pullDownToRefresh: "Pull down to refresh"
|
pullDownToRefresh: "Pull down to refresh"
|
||||||
disableStreamingTimeline: "Disable real-time timeline updates"
|
disableStreamingTimeline: "Disable real-time timeline updates"
|
||||||
useGroupedNotifications: "Display grouped notifications"
|
useGroupedNotifications: "Display grouped notifications"
|
||||||
|
allowClickingNotifications: "Allow clicking on pop-up notifications"
|
||||||
signupPendingError: "There was a problem verifying the email address. The link may have expired."
|
signupPendingError: "There was a problem verifying the email address. The link may have expired."
|
||||||
cwNotationRequired: "If \"Hide content\" is enabled, a description must be provided."
|
cwNotationRequired: "If \"Hide content\" is enabled, a description must be provided."
|
||||||
doReaction: "Add reaction"
|
doReaction: "Add reaction"
|
||||||
|
|
4
locales/index.d.ts
vendored
4
locales/index.d.ts
vendored
|
@ -4943,6 +4943,10 @@ export interface Locale extends ILocale {
|
||||||
* 通知をグルーピングして表示する
|
* 通知をグルーピングして表示する
|
||||||
*/
|
*/
|
||||||
"useGroupedNotifications": string;
|
"useGroupedNotifications": string;
|
||||||
|
/**
|
||||||
|
* ポップアップ通知のクリックを許可する
|
||||||
|
*/
|
||||||
|
"allowClickingNotifications": string;
|
||||||
/**
|
/**
|
||||||
* メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。
|
* メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1231,6 +1231,7 @@ refreshing: "リロード中"
|
||||||
pullDownToRefresh: "引っ張ってリロード"
|
pullDownToRefresh: "引っ張ってリロード"
|
||||||
disableStreamingTimeline: "タイムラインのリアルタイム更新を無効にする"
|
disableStreamingTimeline: "タイムラインのリアルタイム更新を無効にする"
|
||||||
useGroupedNotifications: "通知をグルーピングして表示する"
|
useGroupedNotifications: "通知をグルーピングして表示する"
|
||||||
|
allowClickingNotifications: "ポップアップ通知のクリックを許可する"
|
||||||
signupPendingError: "メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。"
|
signupPendingError: "メールアドレスの確認中に問題が発生しました。リンクの有効期限が切れている可能性があります。"
|
||||||
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
cwNotationRequired: "「内容を隠す」がオンの場合は注釈の記述が必要です。"
|
||||||
doReaction: "リアクションする"
|
doReaction: "リアクションする"
|
||||||
|
|
|
@ -79,6 +79,7 @@ import * as ep___admin_silenceUser from './endpoints/admin/silence-user.js';
|
||||||
import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
|
import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
|
||||||
import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
|
import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
|
||||||
import * as ep___admin_approveUser from './endpoints/admin/approve-user.js';
|
import * as ep___admin_approveUser from './endpoints/admin/approve-user.js';
|
||||||
|
import * as ep___admin_declineUser from './endpoints/admin/decline-user.js';
|
||||||
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
|
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
|
||||||
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
||||||
import * as ep___admin_deleteAccount from './endpoints/admin/delete-account.js';
|
import * as ep___admin_deleteAccount from './endpoints/admin/delete-account.js';
|
||||||
|
@ -479,6 +480,7 @@ const $admin_silenceUser: Provider = { provide: 'ep:admin/silence-user', useClas
|
||||||
const $admin_unsilenceUser: Provider = { provide: 'ep:admin/unsilence-user', useClass: ep___admin_unsilenceUser.default };
|
const $admin_unsilenceUser: Provider = { provide: 'ep:admin/unsilence-user', useClass: ep___admin_unsilenceUser.default };
|
||||||
const $admin_suspendUser: Provider = { provide: 'ep:admin/suspend-user', useClass: ep___admin_suspendUser.default };
|
const $admin_suspendUser: Provider = { provide: 'ep:admin/suspend-user', useClass: ep___admin_suspendUser.default };
|
||||||
const $admin_approveUser: Provider = { provide: 'ep:admin/approve-user', useClass: ep___admin_approveUser.default };
|
const $admin_approveUser: Provider = { provide: 'ep:admin/approve-user', useClass: ep___admin_approveUser.default };
|
||||||
|
const $admin_declineUser: Provider = { provide: 'ep:admin/decline-user', useClass: ep___admin_declineUser.default };
|
||||||
const $admin_unsuspendUser: Provider = { provide: 'ep:admin/unsuspend-user', useClass: ep___admin_unsuspendUser.default };
|
const $admin_unsuspendUser: Provider = { provide: 'ep:admin/unsuspend-user', useClass: ep___admin_unsuspendUser.default };
|
||||||
const $admin_updateMeta: Provider = { provide: 'ep:admin/update-meta', useClass: ep___admin_updateMeta.default };
|
const $admin_updateMeta: Provider = { provide: 'ep:admin/update-meta', useClass: ep___admin_updateMeta.default };
|
||||||
const $admin_deleteAccount: Provider = { provide: 'ep:admin/delete-account', useClass: ep___admin_deleteAccount.default };
|
const $admin_deleteAccount: Provider = { provide: 'ep:admin/delete-account', useClass: ep___admin_deleteAccount.default };
|
||||||
|
@ -883,6 +885,7 @@ const $reversi_verify: Provider = { provide: 'ep:reversi/verify', useClass: ep__
|
||||||
$admin_unsilenceUser,
|
$admin_unsilenceUser,
|
||||||
$admin_suspendUser,
|
$admin_suspendUser,
|
||||||
$admin_approveUser,
|
$admin_approveUser,
|
||||||
|
$admin_declineUser,
|
||||||
$admin_unsuspendUser,
|
$admin_unsuspendUser,
|
||||||
$admin_updateMeta,
|
$admin_updateMeta,
|
||||||
$admin_deleteAccount,
|
$admin_deleteAccount,
|
||||||
|
@ -1281,6 +1284,7 @@ const $reversi_verify: Provider = { provide: 'ep:reversi/verify', useClass: ep__
|
||||||
$admin_unsilenceUser,
|
$admin_unsilenceUser,
|
||||||
$admin_suspendUser,
|
$admin_suspendUser,
|
||||||
$admin_approveUser,
|
$admin_approveUser,
|
||||||
|
$admin_declineUser,
|
||||||
$admin_unsuspendUser,
|
$admin_unsuspendUser,
|
||||||
$admin_updateMeta,
|
$admin_updateMeta,
|
||||||
$admin_deleteAccount,
|
$admin_deleteAccount,
|
||||||
|
|
|
@ -85,6 +85,7 @@ import * as ep___admin_silenceUser from './endpoints/admin/silence-user.js';
|
||||||
import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
|
import * as ep___admin_unsilenceUser from './endpoints/admin/unsilence-user.js';
|
||||||
import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
|
import * as ep___admin_suspendUser from './endpoints/admin/suspend-user.js';
|
||||||
import * as ep___admin_approveUser from './endpoints/admin/approve-user.js';
|
import * as ep___admin_approveUser from './endpoints/admin/approve-user.js';
|
||||||
|
import * as ep___admin_declineUser from './endpoints/admin/decline-user.js';
|
||||||
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
|
import * as ep___admin_unsuspendUser from './endpoints/admin/unsuspend-user.js';
|
||||||
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
import * as ep___admin_updateMeta from './endpoints/admin/update-meta.js';
|
||||||
import * as ep___admin_deleteAccount from './endpoints/admin/delete-account.js';
|
import * as ep___admin_deleteAccount from './endpoints/admin/delete-account.js';
|
||||||
|
@ -483,6 +484,7 @@ const eps = [
|
||||||
['admin/unsilence-user', ep___admin_unsilenceUser],
|
['admin/unsilence-user', ep___admin_unsilenceUser],
|
||||||
['admin/suspend-user', ep___admin_suspendUser],
|
['admin/suspend-user', ep___admin_suspendUser],
|
||||||
['admin/approve-user', ep___admin_approveUser],
|
['admin/approve-user', ep___admin_approveUser],
|
||||||
|
['admin/decline-user', ep___admin_declineUser],
|
||||||
['admin/unsuspend-user', ep___admin_unsuspendUser],
|
['admin/unsuspend-user', ep___admin_unsuspendUser],
|
||||||
['admin/update-meta', ep___admin_updateMeta],
|
['admin/update-meta', ep___admin_updateMeta],
|
||||||
['admin/delete-account', ep___admin_deleteAccount],
|
['admin/delete-account', ep___admin_deleteAccount],
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import { Endpoint } from '@/server/api/endpoint-base.js';
|
||||||
|
import type { UsedUsernamesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
|
||||||
|
import { ModerationLogService } from '@/core/ModerationLogService.js';
|
||||||
|
import { DI } from '@/di-symbols.js';
|
||||||
|
import { EmailService } from '@/core/EmailService.js';
|
||||||
|
import { DeleteAccountService } from '@/core/DeleteAccountService.js';
|
||||||
|
|
||||||
|
export const meta = {
|
||||||
|
tags: ['admin'],
|
||||||
|
|
||||||
|
requireCredential: true,
|
||||||
|
requireModerator: true,
|
||||||
|
kind: 'write:admin:decline-user',
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export const paramDef = {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
userId: { type: 'string', format: 'misskey:id' },
|
||||||
|
},
|
||||||
|
required: ['userId'],
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
|
||||||
|
constructor(
|
||||||
|
@Inject(DI.usersRepository)
|
||||||
|
private usersRepository: UsersRepository,
|
||||||
|
|
||||||
|
@Inject(DI.userProfilesRepository)
|
||||||
|
private userProfilesRepository: UserProfilesRepository,
|
||||||
|
|
||||||
|
@Inject(DI.usedUsernamesRepository)
|
||||||
|
private usedUsernamesRepository: UsedUsernamesRepository,
|
||||||
|
|
||||||
|
private moderationLogService: ModerationLogService,
|
||||||
|
private emailService: EmailService,
|
||||||
|
private deleteAccountService: DeleteAccountService,
|
||||||
|
) {
|
||||||
|
super(meta, paramDef, async (ps, me) => {
|
||||||
|
const user = await this.usersRepository.findOneBy({ id: ps.userId });
|
||||||
|
|
||||||
|
if (user == null || user.isDeleted) {
|
||||||
|
throw new Error('user not found or already deleted');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.approved) {
|
||||||
|
throw new Error('user is already approved');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.host) {
|
||||||
|
throw new Error('user is not local');
|
||||||
|
}
|
||||||
|
|
||||||
|
const profile = await this.userProfilesRepository.findOneBy({ userId: ps.userId });
|
||||||
|
|
||||||
|
if (profile?.email) {
|
||||||
|
this.emailService.sendEmail(profile.email, 'Account Declined',
|
||||||
|
'Your Account has been declined!',
|
||||||
|
'Your Account has been declined!');
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.usedUsernamesRepository.delete({ username: user.username });
|
||||||
|
|
||||||
|
await this.deleteAccountService.deleteAccount(user);
|
||||||
|
|
||||||
|
this.moderationLogService.log(me, 'decline', {
|
||||||
|
userId: user.id,
|
||||||
|
userUsername: user.username,
|
||||||
|
userHost: user.host,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -72,6 +72,7 @@ export const moderationLogTypes = [
|
||||||
'updateServerSettings',
|
'updateServerSettings',
|
||||||
'suspend',
|
'suspend',
|
||||||
'approve',
|
'approve',
|
||||||
|
'decline',
|
||||||
'unsuspend',
|
'unsuspend',
|
||||||
'updateUserNote',
|
'updateUserNote',
|
||||||
'addCustomEmoji',
|
'addCustomEmoji',
|
||||||
|
@ -139,6 +140,11 @@ export type ModerationLogPayloads = {
|
||||||
userUsername: string;
|
userUsername: string;
|
||||||
userHost: string | null;
|
userHost: string | null;
|
||||||
};
|
};
|
||||||
|
decline: {
|
||||||
|
userId: string;
|
||||||
|
userUsername: string;
|
||||||
|
userHost: string | null;
|
||||||
|
};
|
||||||
unsuspend: {
|
unsuspend: {
|
||||||
userId: string;
|
userId: string;
|
||||||
userUsername: string;
|
userUsername: string;
|
||||||
|
|
|
@ -69,22 +69,10 @@ async function deleteAccount() {
|
||||||
});
|
});
|
||||||
if (confirm.canceled) return;
|
if (confirm.canceled) return;
|
||||||
|
|
||||||
const typed = await os.inputText({
|
await os.apiWithDialog('admin/decline-user', {
|
||||||
text: i18n.t('typeToConfirm', { x: props.user.username }),
|
|
||||||
});
|
|
||||||
if (typed.canceled) return;
|
|
||||||
|
|
||||||
if (typed.result === props.user.username) {
|
|
||||||
await os.apiWithDialog('admin/delete-account', {
|
|
||||||
userId: props.user.id,
|
userId: props.user.id,
|
||||||
});
|
});
|
||||||
emits('deleted', props.user.id);
|
emits('deleted', props.user.id);
|
||||||
} else {
|
|
||||||
os.alert({
|
|
||||||
type: 'error',
|
|
||||||
text: 'input not match',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function approveAccount() {
|
async function approveAccount() {
|
||||||
|
|
|
@ -31,6 +31,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
[$style.logRed]: [
|
[$style.logRed]: [
|
||||||
'suspend',
|
'suspend',
|
||||||
'approve',
|
'approve',
|
||||||
|
'decline',
|
||||||
'deleteRole',
|
'deleteRole',
|
||||||
'deleteGlobalAnnouncement',
|
'deleteGlobalAnnouncement',
|
||||||
'deleteUserAnnouncement',
|
'deleteUserAnnouncement',
|
||||||
|
@ -51,6 +52,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<span v-if="log.type === 'updateUserNote'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
<span v-if="log.type === 'updateUserNote'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
<span v-else-if="log.type === 'suspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
<span v-else-if="log.type === 'suspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
<span v-else-if="log.type === 'approve'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
<span v-else-if="log.type === 'approve'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
|
<span v-else-if="log.type === 'decline'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
<span v-else-if="log.type === 'unsuspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
<span v-else-if="log.type === 'unsuspend'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
<span v-else-if="log.type === 'resetPassword'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
<span v-else-if="log.type === 'resetPassword'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }}</span>
|
||||||
<span v-else-if="log.type === 'assignRole'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }} <i class="ti ti-arrow-right"></i> {{ log.info.roleName }}</span>
|
<span v-else-if="log.type === 'assignRole'">: @{{ log.info.userUsername }}{{ log.info.userHost ? '@' + log.info.userHost : '' }} <i class="ti ti-arrow-right"></i> {{ log.info.roleName }}</span>
|
||||||
|
|
|
@ -170,6 +170,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<option value="horizontal"><i class="ti ti-carousel-horizontal"></i> {{ i18n.ts.horizontal }}</option>
|
<option value="horizontal"><i class="ti ti-carousel-horizontal"></i> {{ i18n.ts.horizontal }}</option>
|
||||||
</MkRadios>
|
</MkRadios>
|
||||||
|
|
||||||
|
<MkSwitch v-model="notificationClickable">{{ i18n.ts.allowClickingNotifications }}</MkSwitch>
|
||||||
|
|
||||||
<MkButton @click="testNotification">{{ i18n.ts._notification.checkNotificationBehavior }}</MkButton>
|
<MkButton @click="testNotification">{{ i18n.ts._notification.checkNotificationBehavior }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</FormSection>
|
</FormSection>
|
||||||
|
@ -414,6 +416,7 @@ const showAvatarDecorations = computed(defaultStore.makeGetterSetter('showAvatar
|
||||||
const mediaListWithOneImageAppearance = computed(defaultStore.makeGetterSetter('mediaListWithOneImageAppearance'));
|
const mediaListWithOneImageAppearance = computed(defaultStore.makeGetterSetter('mediaListWithOneImageAppearance'));
|
||||||
const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition'));
|
const notificationPosition = computed(defaultStore.makeGetterSetter('notificationPosition'));
|
||||||
const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis'));
|
const notificationStackAxis = computed(defaultStore.makeGetterSetter('notificationStackAxis'));
|
||||||
|
const notificationClickable = computed(defaultStore.makeGetterSetter('notificationClickable'));
|
||||||
const keepScreenOn = computed(defaultStore.makeGetterSetter('keepScreenOn'));
|
const keepScreenOn = computed(defaultStore.makeGetterSetter('keepScreenOn'));
|
||||||
const disableStreamingTimeline = computed(defaultStore.makeGetterSetter('disableStreamingTimeline'));
|
const disableStreamingTimeline = computed(defaultStore.makeGetterSetter('disableStreamingTimeline'));
|
||||||
const useGroupedNotifications = computed(defaultStore.makeGetterSetter('useGroupedNotifications'));
|
const useGroupedNotifications = computed(defaultStore.makeGetterSetter('useGroupedNotifications'));
|
||||||
|
|
|
@ -481,6 +481,10 @@ export const defaultStore = markRaw(new Storage('base', {
|
||||||
where: 'device',
|
where: 'device',
|
||||||
default: 'horizontal' as 'vertical' | 'horizontal',
|
default: 'horizontal' as 'vertical' | 'horizontal',
|
||||||
},
|
},
|
||||||
|
notificationClickable: {
|
||||||
|
where: 'device',
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
enableCondensedLine: {
|
enableCondensedLine: {
|
||||||
where: 'device',
|
where: 'device',
|
||||||
default: true,
|
default: true,
|
||||||
|
|
|
@ -30,7 +30,11 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
:enterFromClass="defaultStore.state.animation ? $style.transition_notification_enterFrom : ''"
|
:enterFromClass="defaultStore.state.animation ? $style.transition_notification_enterFrom : ''"
|
||||||
:leaveToClass="defaultStore.state.animation ? $style.transition_notification_leaveTo : ''"
|
:leaveToClass="defaultStore.state.animation ? $style.transition_notification_leaveTo : ''"
|
||||||
>
|
>
|
||||||
<div v-for="notification in notifications" :key="notification.id" :class="$style.notification">
|
<div
|
||||||
|
v-for="notification in notifications" :key="notification.id" :class="$style.notification" :style="{
|
||||||
|
pointerEvents: getPointerEvents()
|
||||||
|
}"
|
||||||
|
>
|
||||||
<XNotification :notification="notification"/>
|
<XNotification :notification="notification"/>
|
||||||
</div>
|
</div>
|
||||||
</TransitionGroup>
|
</TransitionGroup>
|
||||||
|
@ -101,6 +105,10 @@ if ($i) {
|
||||||
swInject();
|
swInject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPointerEvents() {
|
||||||
|
return defaultStore.state.notificationClickable ? undefined : 'none';
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" module>
|
<style lang="scss" module>
|
||||||
|
@ -122,7 +130,6 @@ if ($i) {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 3900000;
|
z-index: 3900000;
|
||||||
padding: 0 var(--margin);
|
padding: 0 var(--margin);
|
||||||
pointer-events: none;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
&.notificationsPosition_leftTop {
|
&.notificationsPosition_leftTop {
|
||||||
|
|
|
@ -133,6 +133,9 @@ type AdminAvatarDecorationsListResponse = operations['admin___avatar-decorations
|
||||||
// @public (undocumented)
|
// @public (undocumented)
|
||||||
type AdminAvatarDecorationsUpdateRequest = operations['admin___avatar-decorations___update']['requestBody']['content']['application/json'];
|
type AdminAvatarDecorationsUpdateRequest = operations['admin___avatar-decorations___update']['requestBody']['content']['application/json'];
|
||||||
|
|
||||||
|
// @public (undocumented)
|
||||||
|
type AdminDeclineUserRequest = operations['admin___decline-user']['requestBody']['content']['application/json'];
|
||||||
|
|
||||||
// @public (undocumented)
|
// @public (undocumented)
|
||||||
type AdminDeleteAccountRequest = operations['admin___delete-account']['requestBody']['content']['application/json'];
|
type AdminDeleteAccountRequest = operations['admin___delete-account']['requestBody']['content']['application/json'];
|
||||||
|
|
||||||
|
@ -1328,6 +1331,7 @@ declare namespace entities {
|
||||||
AdminUnsilenceUserRequest,
|
AdminUnsilenceUserRequest,
|
||||||
AdminSuspendUserRequest,
|
AdminSuspendUserRequest,
|
||||||
AdminApproveUserRequest,
|
AdminApproveUserRequest,
|
||||||
|
AdminDeclineUserRequest,
|
||||||
AdminUnsuspendUserRequest,
|
AdminUnsuspendUserRequest,
|
||||||
AdminUpdateMetaRequest,
|
AdminUpdateMetaRequest,
|
||||||
AdminDeleteAccountRequest,
|
AdminDeleteAccountRequest,
|
||||||
|
@ -2487,6 +2491,9 @@ type ModerationLog = {
|
||||||
} | {
|
} | {
|
||||||
type: 'approve';
|
type: 'approve';
|
||||||
info: ModerationLogPayloads['approve'];
|
info: ModerationLogPayloads['approve'];
|
||||||
|
} | {
|
||||||
|
type: 'decline';
|
||||||
|
info: ModerationLogPayloads['decline'];
|
||||||
} | {
|
} | {
|
||||||
type: 'suspend';
|
type: 'suspend';
|
||||||
info: ModerationLogPayloads['suspend'];
|
info: ModerationLogPayloads['suspend'];
|
||||||
|
@ -2926,7 +2933,7 @@ type PartialRolePolicyOverride = Partial<{
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
// @public (undocumented)
|
// @public (undocumented)
|
||||||
export const permissions: readonly ["read:account", "write:account", "read:blocks", "write:blocks", "read:drive", "write:drive", "read:favorites", "write:favorites", "read:following", "write:following", "read:messaging", "write:messaging", "read:mutes", "write:mutes", "write:notes", "read:notifications", "write:notifications", "read:reactions", "write:reactions", "write:votes", "read:pages", "write:pages", "write:page-likes", "read:page-likes", "read:user-groups", "write:user-groups", "read:channels", "write:channels", "read:gallery", "write:gallery", "read:gallery-likes", "write:gallery-likes", "read:flash", "write:flash", "read:flash-likes", "write:flash-likes", "read:admin:abuse-user-reports", "write:admin:delete-account", "write:admin:delete-all-files-of-a-user", "read:admin:index-stats", "read:admin:table-stats", "read:admin:user-ips", "read:admin:meta", "write:admin:reset-password", "write:admin:resolve-abuse-user-report", "write:admin:send-email", "read:admin:server-info", "read:admin:show-moderation-log", "read:admin:show-user", "write:admin:suspend-user", "write:admin:approve-user", "write:admin:nsfw-user", "write:admin:unnsfw-user", "write:admin:silence-user", "write:admin:unsilence-user", "write:admin:unset-user-avatar", "write:admin:unset-user-banner", "write:admin:unsuspend-user", "write:admin:meta", "write:admin:user-note", "write:admin:roles", "read:admin:roles", "write:admin:relays", "read:admin:relays", "write:admin:invite-codes", "read:admin:invite-codes", "write:admin:announcements", "read:admin:announcements", "write:admin:avatar-decorations", "read:admin:avatar-decorations", "write:admin:federation", "write:admin:account", "read:admin:account", "write:admin:emoji", "read:admin:emoji", "write:admin:queue", "read:admin:queue", "write:admin:promo", "write:admin:drive", "read:admin:drive", "write:admin:ad", "read:admin:ad", "write:invite-codes", "read:invite-codes", "write:clip-favorite", "read:clip-favorite", "read:federation", "write:report-abuse"];
|
export const permissions: readonly ["read:account", "write:account", "read:blocks", "write:blocks", "read:drive", "write:drive", "read:favorites", "write:favorites", "read:following", "write:following", "read:messaging", "write:messaging", "read:mutes", "write:mutes", "write:notes", "read:notifications", "write:notifications", "read:reactions", "write:reactions", "write:votes", "read:pages", "write:pages", "write:page-likes", "read:page-likes", "read:user-groups", "write:user-groups", "read:channels", "write:channels", "read:gallery", "write:gallery", "read:gallery-likes", "write:gallery-likes", "read:flash", "write:flash", "read:flash-likes", "write:flash-likes", "read:admin:abuse-user-reports", "write:admin:delete-account", "write:admin:delete-all-files-of-a-user", "read:admin:index-stats", "read:admin:table-stats", "read:admin:user-ips", "read:admin:meta", "write:admin:reset-password", "write:admin:resolve-abuse-user-report", "write:admin:send-email", "read:admin:server-info", "read:admin:show-moderation-log", "read:admin:show-user", "write:admin:suspend-user", "write:admin:approve-user", "write:admin:decline-user", "write:admin:nsfw-user", "write:admin:unnsfw-user", "write:admin:silence-user", "write:admin:unsilence-user", "write:admin:unset-user-avatar", "write:admin:unset-user-banner", "write:admin:unsuspend-user", "write:admin:meta", "write:admin:user-note", "write:admin:roles", "read:admin:roles", "write:admin:relays", "read:admin:relays", "write:admin:invite-codes", "read:admin:invite-codes", "write:admin:announcements", "read:admin:announcements", "write:admin:avatar-decorations", "read:admin:avatar-decorations", "write:admin:federation", "write:admin:account", "read:admin:account", "write:admin:emoji", "read:admin:emoji", "write:admin:queue", "read:admin:queue", "write:admin:promo", "write:admin:drive", "read:admin:drive", "write:admin:ad", "read:admin:ad", "write:invite-codes", "read:invite-codes", "write:clip-favorite", "read:clip-favorite", "read:federation", "write:report-abuse"];
|
||||||
|
|
||||||
// @public (undocumented)
|
// @public (undocumented)
|
||||||
type PingResponse = operations['ping']['responses']['200']['content']['application/json'];
|
type PingResponse = operations['ping']['responses']['200']['content']['application/json'];
|
||||||
|
|
|
@ -812,6 +812,17 @@ declare module '../api.js' {
|
||||||
credential?: string | null,
|
credential?: string | null,
|
||||||
): Promise<SwitchCaseResponseType<E, P>>;
|
): Promise<SwitchCaseResponseType<E, P>>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No description provided.
|
||||||
|
*
|
||||||
|
* **Credential required**: *Yes* / **Permission**: *write:admin:decline-user*
|
||||||
|
*/
|
||||||
|
request<E extends 'admin/decline-user', P extends Endpoints[E]['req']>(
|
||||||
|
endpoint: E,
|
||||||
|
params: P,
|
||||||
|
credential?: string | null,
|
||||||
|
): Promise<SwitchCaseResponseType<E, P>>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* No description provided.
|
* No description provided.
|
||||||
*
|
*
|
||||||
|
|
|
@ -97,6 +97,7 @@ import type {
|
||||||
AdminUnsilenceUserRequest,
|
AdminUnsilenceUserRequest,
|
||||||
AdminSuspendUserRequest,
|
AdminSuspendUserRequest,
|
||||||
AdminApproveUserRequest,
|
AdminApproveUserRequest,
|
||||||
|
AdminDeclineUserRequest,
|
||||||
AdminUnsuspendUserRequest,
|
AdminUnsuspendUserRequest,
|
||||||
AdminUpdateMetaRequest,
|
AdminUpdateMetaRequest,
|
||||||
AdminDeleteAccountRequest,
|
AdminDeleteAccountRequest,
|
||||||
|
@ -668,6 +669,7 @@ export type Endpoints = {
|
||||||
'admin/unsilence-user': { req: AdminUnsilenceUserRequest; res: EmptyResponse };
|
'admin/unsilence-user': { req: AdminUnsilenceUserRequest; res: EmptyResponse };
|
||||||
'admin/suspend-user': { req: AdminSuspendUserRequest; res: EmptyResponse };
|
'admin/suspend-user': { req: AdminSuspendUserRequest; res: EmptyResponse };
|
||||||
'admin/approve-user': { req: AdminApproveUserRequest; res: EmptyResponse };
|
'admin/approve-user': { req: AdminApproveUserRequest; res: EmptyResponse };
|
||||||
|
'admin/decline-user': { req: AdminDeclineUserRequest; res: EmptyResponse };
|
||||||
'admin/unsuspend-user': { req: AdminUnsuspendUserRequest; res: EmptyResponse };
|
'admin/unsuspend-user': { req: AdminUnsuspendUserRequest; res: EmptyResponse };
|
||||||
'admin/update-meta': { req: AdminUpdateMetaRequest; res: EmptyResponse };
|
'admin/update-meta': { req: AdminUpdateMetaRequest; res: EmptyResponse };
|
||||||
'admin/delete-account': { req: AdminDeleteAccountRequest; res: EmptyResponse };
|
'admin/delete-account': { req: AdminDeleteAccountRequest; res: EmptyResponse };
|
||||||
|
|
|
@ -100,6 +100,7 @@ export type AdminSilenceUserRequest = operations['admin___silence-user']['reques
|
||||||
export type AdminUnsilenceUserRequest = operations['admin___unsilence-user']['requestBody']['content']['application/json'];
|
export type AdminUnsilenceUserRequest = operations['admin___unsilence-user']['requestBody']['content']['application/json'];
|
||||||
export type AdminSuspendUserRequest = operations['admin___suspend-user']['requestBody']['content']['application/json'];
|
export type AdminSuspendUserRequest = operations['admin___suspend-user']['requestBody']['content']['application/json'];
|
||||||
export type AdminApproveUserRequest = operations['admin___approve-user']['requestBody']['content']['application/json'];
|
export type AdminApproveUserRequest = operations['admin___approve-user']['requestBody']['content']['application/json'];
|
||||||
|
export type AdminDeclineUserRequest = operations['admin___decline-user']['requestBody']['content']['application/json'];
|
||||||
export type AdminUnsuspendUserRequest = operations['admin___unsuspend-user']['requestBody']['content']['application/json'];
|
export type AdminUnsuspendUserRequest = operations['admin___unsuspend-user']['requestBody']['content']['application/json'];
|
||||||
export type AdminUpdateMetaRequest = operations['admin___update-meta']['requestBody']['content']['application/json'];
|
export type AdminUpdateMetaRequest = operations['admin___update-meta']['requestBody']['content']['application/json'];
|
||||||
export type AdminDeleteAccountRequest = operations['admin___delete-account']['requestBody']['content']['application/json'];
|
export type AdminDeleteAccountRequest = operations['admin___delete-account']['requestBody']['content']['application/json'];
|
||||||
|
|
|
@ -675,6 +675,15 @@ export type paths = {
|
||||||
*/
|
*/
|
||||||
post: operations['admin___approve-user'];
|
post: operations['admin___approve-user'];
|
||||||
};
|
};
|
||||||
|
'/admin/decline-user': {
|
||||||
|
/**
|
||||||
|
* admin/decline-user
|
||||||
|
* @description No description provided.
|
||||||
|
*
|
||||||
|
* **Credential required**: *Yes* / **Permission**: *write:admin:decline-user*
|
||||||
|
*/
|
||||||
|
post: operations['admin___decline-user'];
|
||||||
|
};
|
||||||
'/admin/unsuspend-user': {
|
'/admin/unsuspend-user': {
|
||||||
/**
|
/**
|
||||||
* admin/unsuspend-user
|
* admin/unsuspend-user
|
||||||
|
@ -9712,6 +9721,58 @@ export type operations = {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* admin/decline-user
|
||||||
|
* @description No description provided.
|
||||||
|
*
|
||||||
|
* **Credential required**: *Yes* / **Permission**: *write:admin:decline-user*
|
||||||
|
*/
|
||||||
|
'admin___decline-user': {
|
||||||
|
requestBody: {
|
||||||
|
content: {
|
||||||
|
'application/json': {
|
||||||
|
/** Format: misskey:id */
|
||||||
|
userId: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
responses: {
|
||||||
|
/** @description OK (without any results) */
|
||||||
|
204: {
|
||||||
|
content: never;
|
||||||
|
};
|
||||||
|
/** @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'];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* admin/unsuspend-user
|
* admin/unsuspend-user
|
||||||
* @description No description provided.
|
* @description No description provided.
|
||||||
|
|
|
@ -78,6 +78,7 @@ export const permissions = [
|
||||||
'read:admin:show-user',
|
'read:admin:show-user',
|
||||||
'write:admin:suspend-user',
|
'write:admin:suspend-user',
|
||||||
'write:admin:approve-user',
|
'write:admin:approve-user',
|
||||||
|
'write:admin:decline-user',
|
||||||
'write:admin:nsfw-user',
|
'write:admin:nsfw-user',
|
||||||
'write:admin:unnsfw-user',
|
'write:admin:unnsfw-user',
|
||||||
'write:admin:silence-user',
|
'write:admin:silence-user',
|
||||||
|
@ -204,6 +205,11 @@ export type ModerationLogPayloads = {
|
||||||
userUsername: string;
|
userUsername: string;
|
||||||
userHost: string | null;
|
userHost: string | null;
|
||||||
};
|
};
|
||||||
|
decline: {
|
||||||
|
userId: string;
|
||||||
|
userUsername: string;
|
||||||
|
userHost: string | null;
|
||||||
|
};
|
||||||
unsuspend: {
|
unsuspend: {
|
||||||
userId: string;
|
userId: string;
|
||||||
userUsername: string;
|
userUsername: string;
|
||||||
|
|
|
@ -50,6 +50,9 @@ export type ModerationLog = {
|
||||||
} | {
|
} | {
|
||||||
type: 'approve';
|
type: 'approve';
|
||||||
info: ModerationLogPayloads['approve'];
|
info: ModerationLogPayloads['approve'];
|
||||||
|
} | {
|
||||||
|
type: 'decline';
|
||||||
|
info: ModerationLogPayloads['decline'];
|
||||||
} | {
|
} | {
|
||||||
type: 'suspend';
|
type: 'suspend';
|
||||||
info: ModerationLogPayloads['suspend'];
|
info: ModerationLogPayloads['suspend'];
|
||||||
|
|
Loading…
Reference in a new issue