feat: サーバーサイレンス機能を追加 (#12031)

* feat : サーバーサイレンスを追加

* Update CHANGELOG.md

* Update CHANGELOG.md

* Update locale

* Update instance-info.vue

* update misskey-js.api.md

* lint fix

* migration fix

* 既存のものを使うように

* fix

* 色々直した

* Update packages/frontend/src/pages/admin/instance-block.vue

* Update packages/frontend/src/pages/admin/instance-block.vue

* Update packages/frontend/src/components/MkInstanceCardMini.vue

* Update packages/backend/src/core/entities/InstanceEntityService.ts

* Update packages/backend/src/core/entities/InstanceEntityService.ts

* Update packages/backend/src/core/entities/InstanceEntityService.ts

* Update packages/backend/src/core/UserFollowingService.ts

* Update packages/backend/src/core/UserFollowingService.ts

* fix: サイレンスされてるサーバーからの投稿は全部ホームにする

* fix: undefinedでfalseを返すようにした

---------

Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
まっちゃてぃー 2023-10-16 20:11:27 +09:00 committed by GitHub
parent 1966876320
commit 5efd01ba70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 184 additions and 35 deletions

View file

@ -36,7 +36,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_s">
<MkSwitch v-model="suspended" :disabled="!instance" @update:modelValue="toggleSuspend">{{ i18n.ts.stopActivityDelivery }}</MkSwitch>
<MkSwitch v-model="isBlocked" :disabled="!meta || !instance" @update:modelValue="toggleBlock">{{ i18n.ts.blockThisInstance }}</MkSwitch>
<MkButton @click="refreshMetadata"><i class="ti ti-refresh"></i> Refresh metadata</MkButton>
<MkSwitch v-model="isSilenced" :disabled="!meta || !instance" @update:modelValue="toggleSilenced">{{ i18n.ts.silenceThisInstance }}</MkSwitch>
<MkButton @click="refreshMetadata"><i class="ti ti-refresh"></i> Refresh metadata</MkButton>
</div>
</FormSection>
@ -147,6 +148,7 @@ let meta = $ref<Misskey.entities.AdminInstanceMetadata | null>(null);
let instance = $ref<Misskey.entities.Instance | null>(null);
let suspended = $ref(false);
let isBlocked = $ref(false);
let isSilenced = $ref(false);
let faviconUrl = $ref<string | null>(null);
const usersPagination = {
@ -169,7 +171,8 @@ async function fetch(): Promise<void> {
});
suspended = instance.isSuspended;
isBlocked = instance.isBlocked;
faviconUrl = getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.iconUrl, 'preview');
isSilenced = instance.isSilenced;
faviconUrl = getProxiedImageUrlNullable(instance.faviconUrl, 'preview') ?? getProxiedImageUrlNullable(instance.iconUrl, 'preview');
}
async function toggleBlock(): Promise<void> {
@ -180,7 +183,14 @@ async function toggleBlock(): Promise<void> {
blockedHosts: isBlocked ? meta.blockedHosts.concat([host]) : meta.blockedHosts.filter(x => x !== host),
});
}
async function toggleSilenced(): Promise<void> {
if (!meta) throw new Error('No meta?');
if (!instance) throw new Error('No instance?');
const { host } = instance;
await os.api('admin/update-meta', {
silencedHosts: isSilenced ? meta.silencedHosts.concat([host]) : meta.silencedHosts.filter(x => x !== host),
});
}
async function toggleSuspend(): Promise<void> {
if (!instance) throw new Error('No instance?');
await os.api('admin/federation/update-instance', {