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:
		| @@ -105,6 +105,16 @@ export const meta = { | ||||
| 				type: 'boolean', | ||||
| 				optional: false, nullable: false, | ||||
| 			}, | ||||
| 			silencedHosts: { | ||||
| 				type: "array", | ||||
| 				optional: true, | ||||
| 				nullable: false, | ||||
| 				items: { | ||||
| 					type: "string", | ||||
| 					optional: false, | ||||
| 					nullable: false, | ||||
| 				}, | ||||
| 			}, | ||||
| 			pinnedUsers: { | ||||
| 				type: 'array', | ||||
| 				optional: false, nullable: false, | ||||
| @@ -367,6 +377,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				pinnedUsers: instance.pinnedUsers, | ||||
| 				hiddenTags: instance.hiddenTags, | ||||
| 				blockedHosts: instance.blockedHosts, | ||||
| 				silencedHosts: instance.silencedHosts, | ||||
| 				sensitiveWords: instance.sensitiveWords, | ||||
| 				preservedUsernames: instance.preservedUsernames, | ||||
| 				hcaptchaSecretKey: instance.hcaptchaSecretKey, | ||||
|   | ||||
| @@ -20,18 +20,26 @@ export const paramDef = { | ||||
| 	type: 'object', | ||||
| 	properties: { | ||||
| 		disableRegistration: { type: 'boolean', nullable: true }, | ||||
| 		pinnedUsers: { type: 'array', nullable: true, items: { | ||||
| 			type: 'string', | ||||
| 		} }, | ||||
| 		hiddenTags: { type: 'array', nullable: true, items: { | ||||
| 			type: 'string', | ||||
| 		} }, | ||||
| 		blockedHosts: { type: 'array', nullable: true, items: { | ||||
| 			type: 'string', | ||||
| 		} }, | ||||
| 		sensitiveWords: { type: 'array', nullable: true, items: { | ||||
| 			type: 'string', | ||||
| 		} }, | ||||
| 		pinnedUsers: { | ||||
| 			type: 'array', nullable: true, items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 		hiddenTags: { | ||||
| 			type: 'array', nullable: true, items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 		blockedHosts: { | ||||
| 			type: 'array', nullable: true, items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 		sensitiveWords: { | ||||
| 			type: 'array', nullable: true, items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 		themeColor: { type: 'string', nullable: true, pattern: '^#[0-9a-fA-F]{6}$' }, | ||||
| 		mascotImageUrl: { type: 'string', nullable: true }, | ||||
| 		bannerUrl: { type: 'string', nullable: true }, | ||||
| @@ -67,9 +75,11 @@ export const paramDef = { | ||||
| 		proxyAccountId: { type: 'string', format: 'misskey:id', nullable: true }, | ||||
| 		maintainerName: { type: 'string', nullable: true }, | ||||
| 		maintainerEmail: { type: 'string', nullable: true }, | ||||
| 		langs: { type: 'array', items: { | ||||
| 			type: 'string', | ||||
| 		} }, | ||||
| 		langs: { | ||||
| 			type: 'array', items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 		summalyProxy: { type: 'string', nullable: true }, | ||||
| 		deeplAuthKey: { type: 'string', nullable: true }, | ||||
| 		deeplIsPro: { type: 'boolean' }, | ||||
| @@ -115,6 +125,13 @@ export const paramDef = { | ||||
| 		perUserHomeTimelineCacheMax: { type: 'integer' }, | ||||
| 		perUserListTimelineCacheMax: { type: 'integer' }, | ||||
| 		notesPerOneAd: { type: 'integer' }, | ||||
| 		silencedHosts: { | ||||
| 			type: 'array', | ||||
| 			nullable: true, | ||||
| 			items: { | ||||
| 				type: 'string', | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	required: [], | ||||
| } as const; | ||||
| @@ -147,7 +164,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			if (Array.isArray(ps.sensitiveWords)) { | ||||
| 				set.sensitiveWords = ps.sensitiveWords.filter(Boolean); | ||||
| 			} | ||||
|  | ||||
| 			if (Array.isArray(ps.silencedHosts)) { | ||||
| 				let lastValue = ''; | ||||
| 				set.silencedHosts = ps.silencedHosts.sort().filter((h) => { | ||||
| 					const lv = lastValue; | ||||
| 					lastValue = h; | ||||
| 					return h !== '' && h !== lv && !set.blockedHosts?.includes(h); | ||||
| 				}); | ||||
| 			} | ||||
| 			if (ps.themeColor !== undefined) { | ||||
| 				set.themeColor = ps.themeColor; | ||||
| 			} | ||||
|   | ||||
| @@ -36,6 +36,7 @@ export const paramDef = { | ||||
| 		blocked: { type: 'boolean', nullable: true }, | ||||
| 		notResponding: { type: 'boolean', nullable: true }, | ||||
| 		suspended: { type: 'boolean', nullable: true }, | ||||
| 		silenced: { type: "boolean", nullable: true }, | ||||
| 		federating: { type: 'boolean', nullable: true }, | ||||
| 		subscribing: { type: 'boolean', nullable: true }, | ||||
| 		publishing: { type: 'boolean', nullable: true }, | ||||
| @@ -102,6 +103,23 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if (typeof ps.silenced === "boolean") { | ||||
| 				const meta = await this.metaService.fetch(true); | ||||
|  | ||||
| 				if (ps.silenced) { | ||||
| 					if (meta.silencedHosts.length === 0) { | ||||
| 						return []; | ||||
| 					} | ||||
| 					query.andWhere("instance.host IN (:...silences)", { | ||||
| 						silences: meta.silencedHosts, | ||||
| 					}); | ||||
| 				} else if (meta.silencedHosts.length > 0) { | ||||
| 					query.andWhere("instance.host NOT IN (:...silences)", { | ||||
| 						silences: meta.silencedHosts, | ||||
| 					}); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if (typeof ps.federating === 'boolean') { | ||||
| 				if (ps.federating) { | ||||
| 					query.andWhere('((instance.followingCount > 0) OR (instance.followersCount > 0))'); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 まっちゃてぃー
					まっちゃてぃー