mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-03 23:14:13 +00:00 
			
		
		
		
	
							parent
							
								
									baa45859c1
								
							
						
					
					
						commit
						ae5a72a2df
					
				
					 16 changed files with 61 additions and 2 deletions
				
			
		CHANGELOG.md
locales
packages
backend
migration
src
core/entities
models
server
api/endpoints
web/views
test/e2e
frontend/src/pages/settings
							
								
								
									
										11
									
								
								CHANGELOG.md
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGELOG.md
									
										
									
									
									
								
							| 
						 | 
					@ -12,6 +12,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 13.x.x (unreleased)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### General
 | 
				
			||||||
 | 
					- 投稿したコンテンツのAIによる学習を軽減するオプションを追加
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Client
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Server
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 13.12.1
 | 
					## 13.12.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Client
 | 
					### Client
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1038,6 +1038,8 @@ thisChannelArchived: "このチャンネルはアーカイブされています
 | 
				
			||||||
displayOfNote: "ノートの表示"
 | 
					displayOfNote: "ノートの表示"
 | 
				
			||||||
initialAccountSetting: "初期設定"
 | 
					initialAccountSetting: "初期設定"
 | 
				
			||||||
youFollowing: "フォロー中"
 | 
					youFollowing: "フォロー中"
 | 
				
			||||||
 | 
					preventAiLarning: "AIによる学習を防止"
 | 
				
			||||||
 | 
					preventAiLarningDescription: "投稿したノート、添付した画像などのコンテンツを学習の対象にしないようAIに要求します。これはnoaiフラグをHTMLレスポンスに含めることによって実現されます。"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_initialAccountSetting:
 | 
					_initialAccountSetting:
 | 
				
			||||||
  accountCreated: "アカウントの作成が完了しました!"
 | 
					  accountCreated: "アカウントの作成が完了しました!"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					export class PreventAiLarning1683682889948 {
 | 
				
			||||||
 | 
					    name = 'PreventAiLarning1683682889948'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async up(queryRunner) {
 | 
				
			||||||
 | 
					        await queryRunner.query(`ALTER TABLE "user_profile" ADD "preventAiLarning" boolean NOT NULL DEFAULT true`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async down(queryRunner) {
 | 
				
			||||||
 | 
					        await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "preventAiLarning"`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -445,6 +445,7 @@ export class UserEntityService implements OnModuleInit {
 | 
				
			||||||
				carefulBot: profile!.carefulBot,
 | 
									carefulBot: profile!.carefulBot,
 | 
				
			||||||
				autoAcceptFollowed: profile!.autoAcceptFollowed,
 | 
									autoAcceptFollowed: profile!.autoAcceptFollowed,
 | 
				
			||||||
				noCrawle: profile!.noCrawle,
 | 
									noCrawle: profile!.noCrawle,
 | 
				
			||||||
 | 
									preventAiLarning: profile!.preventAiLarning,
 | 
				
			||||||
				isExplorable: user.isExplorable,
 | 
									isExplorable: user.isExplorable,
 | 
				
			||||||
				isDeleted: user.isDeleted,
 | 
									isDeleted: user.isDeleted,
 | 
				
			||||||
				hideOnlineStatus: user.hideOnlineStatus,
 | 
									hideOnlineStatus: user.hideOnlineStatus,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,6 +147,11 @@ export class UserProfile {
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	public noCrawle: boolean;
 | 
						public noCrawle: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Column('boolean', {
 | 
				
			||||||
 | 
							default: true,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						public preventAiLarning: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Column('boolean', {
 | 
						@Column('boolean', {
 | 
				
			||||||
		default: false,
 | 
							default: false,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -302,7 +302,11 @@ export const packedMeDetailedOnlySchema = {
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		noCrawle: {
 | 
							noCrawle: {
 | 
				
			||||||
			type: 'boolean',
 | 
								type: 'boolean',
 | 
				
			||||||
			nullable: true, optional: false,
 | 
								nullable: false, optional: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							preventAiLarning: {
 | 
				
			||||||
 | 
								type: 'boolean',
 | 
				
			||||||
 | 
								nullable: false, optional: false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		isExplorable: {
 | 
							isExplorable: {
 | 
				
			||||||
			type: 'boolean',
 | 
								type: 'boolean',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,6 +68,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 | 
				
			||||||
				emailVerified: profile.emailVerified,
 | 
									emailVerified: profile.emailVerified,
 | 
				
			||||||
				autoAcceptFollowed: profile.autoAcceptFollowed,
 | 
									autoAcceptFollowed: profile.autoAcceptFollowed,
 | 
				
			||||||
				noCrawle: profile.noCrawle,
 | 
									noCrawle: profile.noCrawle,
 | 
				
			||||||
 | 
									preventAiLarning: profile.preventAiLarning,
 | 
				
			||||||
				alwaysMarkNsfw: profile.alwaysMarkNsfw,
 | 
									alwaysMarkNsfw: profile.alwaysMarkNsfw,
 | 
				
			||||||
				autoSensitive: profile.autoSensitive,
 | 
									autoSensitive: profile.autoSensitive,
 | 
				
			||||||
				carefulBot: profile.carefulBot,
 | 
									carefulBot: profile.carefulBot,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ export const meta = {
 | 
				
			||||||
			message: 'This feature is restricted by your role.',
 | 
								message: 'This feature is restricted by your role.',
 | 
				
			||||||
			code: 'RESTRICTED_BY_ROLE',
 | 
								code: 'RESTRICTED_BY_ROLE',
 | 
				
			||||||
			id: '8feff0ba-5ab5-585b-31f4-4df816663fad',
 | 
								id: '8feff0ba-5ab5-585b-31f4-4df816663fad',
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	res: {
 | 
						res: {
 | 
				
			||||||
| 
						 | 
					@ -138,6 +138,7 @@ export const paramDef = {
 | 
				
			||||||
		carefulBot: { type: 'boolean' },
 | 
							carefulBot: { type: 'boolean' },
 | 
				
			||||||
		autoAcceptFollowed: { type: 'boolean' },
 | 
							autoAcceptFollowed: { type: 'boolean' },
 | 
				
			||||||
		noCrawle: { type: 'boolean' },
 | 
							noCrawle: { type: 'boolean' },
 | 
				
			||||||
 | 
							preventAiLarning: { type: 'boolean' },
 | 
				
			||||||
		isBot: { type: 'boolean' },
 | 
							isBot: { type: 'boolean' },
 | 
				
			||||||
		isCat: { type: 'boolean' },
 | 
							isCat: { type: 'boolean' },
 | 
				
			||||||
		showTimelineReplies: { type: 'boolean' },
 | 
							showTimelineReplies: { type: 'boolean' },
 | 
				
			||||||
| 
						 | 
					@ -242,6 +243,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 | 
				
			||||||
			if (typeof ps.carefulBot === 'boolean') profileUpdates.carefulBot = ps.carefulBot;
 | 
								if (typeof ps.carefulBot === 'boolean') profileUpdates.carefulBot = ps.carefulBot;
 | 
				
			||||||
			if (typeof ps.autoAcceptFollowed === 'boolean') profileUpdates.autoAcceptFollowed = ps.autoAcceptFollowed;
 | 
								if (typeof ps.autoAcceptFollowed === 'boolean') profileUpdates.autoAcceptFollowed = ps.autoAcceptFollowed;
 | 
				
			||||||
			if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle;
 | 
								if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle;
 | 
				
			||||||
 | 
								if (typeof ps.preventAiLarning === 'boolean') profileUpdates.preventAiLarning = ps.preventAiLarning;
 | 
				
			||||||
			if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat;
 | 
								if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat;
 | 
				
			||||||
			if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote;
 | 
								if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote;
 | 
				
			||||||
			if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail;
 | 
								if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if profile.noCrawle
 | 
						if profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if profile.noCrawle
 | 
						if profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if user.host || profile.noCrawle
 | 
						if user.host || profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if user.host || isRenote || profile.noCrawle
 | 
						if user.host || isRenote || profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if profile.noCrawle
 | 
						if profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,8 @@ block og
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if user.host || profile.noCrawle
 | 
						if user.host || profile.noCrawle
 | 
				
			||||||
		meta(name='robots' content='noindex')
 | 
							meta(name='robots' content='noindex')
 | 
				
			||||||
 | 
						if profile.preventAiLarning
 | 
				
			||||||
 | 
							meta(name='robots' content='noai')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta(name='misskey:user-username' content=user.username)
 | 
						meta(name='misskey:user-username' content=user.username)
 | 
				
			||||||
	meta(name='misskey:user-id' content=user.id)
 | 
						meta(name='misskey:user-id' content=user.id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,6 +145,7 @@ describe('ユーザー', () => {
 | 
				
			||||||
			carefulBot: user.carefulBot,
 | 
								carefulBot: user.carefulBot,
 | 
				
			||||||
			autoAcceptFollowed: user.autoAcceptFollowed,
 | 
								autoAcceptFollowed: user.autoAcceptFollowed,
 | 
				
			||||||
			noCrawle: user.noCrawle,
 | 
								noCrawle: user.noCrawle,
 | 
				
			||||||
 | 
								preventAiLarning: user.preventAiLarning,
 | 
				
			||||||
			isExplorable: user.isExplorable,
 | 
								isExplorable: user.isExplorable,
 | 
				
			||||||
			isDeleted: user.isDeleted,
 | 
								isDeleted: user.isDeleted,
 | 
				
			||||||
			hideOnlineStatus: user.hideOnlineStatus,
 | 
								hideOnlineStatus: user.hideOnlineStatus,
 | 
				
			||||||
| 
						 | 
					@ -390,6 +391,7 @@ describe('ユーザー', () => {
 | 
				
			||||||
		assert.strictEqual(response.carefulBot, false);
 | 
							assert.strictEqual(response.carefulBot, false);
 | 
				
			||||||
		assert.strictEqual(response.autoAcceptFollowed, true);
 | 
							assert.strictEqual(response.autoAcceptFollowed, true);
 | 
				
			||||||
		assert.strictEqual(response.noCrawle, false);
 | 
							assert.strictEqual(response.noCrawle, false);
 | 
				
			||||||
 | 
							assert.strictEqual(response.preventAiLarning, true);
 | 
				
			||||||
		assert.strictEqual(response.isExplorable, true);
 | 
							assert.strictEqual(response.isExplorable, true);
 | 
				
			||||||
		assert.strictEqual(response.isDeleted, false);
 | 
							assert.strictEqual(response.isDeleted, false);
 | 
				
			||||||
		assert.strictEqual(response.hideOnlineStatus, false);
 | 
							assert.strictEqual(response.hideOnlineStatus, false);
 | 
				
			||||||
| 
						 | 
					@ -462,6 +464,8 @@ describe('ユーザー', () => {
 | 
				
			||||||
		{ parameters: (): object => ({ autoAcceptFollowed: false }) },
 | 
							{ parameters: (): object => ({ autoAcceptFollowed: false }) },
 | 
				
			||||||
		{ parameters: (): object => ({ noCrawle: true }) },
 | 
							{ parameters: (): object => ({ noCrawle: true }) },
 | 
				
			||||||
		{ parameters: (): object => ({ noCrawle: false }) },
 | 
							{ parameters: (): object => ({ noCrawle: false }) },
 | 
				
			||||||
 | 
							{ parameters: (): object => ({ preventAiLarning: false }) },
 | 
				
			||||||
 | 
							{ parameters: (): object => ({ preventAiLarning: true }) },
 | 
				
			||||||
		{ parameters: (): object => ({ isBot: true }) },
 | 
							{ parameters: (): object => ({ isBot: true }) },
 | 
				
			||||||
		{ parameters: (): object => ({ isBot: false }) },
 | 
							{ parameters: (): object => ({ isBot: false }) },
 | 
				
			||||||
		{ parameters: (): object => ({ isCat: true }) },
 | 
							{ parameters: (): object => ({ isCat: true }) },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,10 @@
 | 
				
			||||||
		{{ i18n.ts.noCrawle }}
 | 
							{{ i18n.ts.noCrawle }}
 | 
				
			||||||
		<template #caption>{{ i18n.ts.noCrawleDescription }}</template>
 | 
							<template #caption>{{ i18n.ts.noCrawleDescription }}</template>
 | 
				
			||||||
	</MkSwitch>
 | 
						</MkSwitch>
 | 
				
			||||||
 | 
						<MkSwitch v-model="preventAiLarning" @update:model-value="save()">
 | 
				
			||||||
 | 
							{{ i18n.ts.preventAiLarning }}<span class="_beta">{{ i18n.ts.beta }}</span>
 | 
				
			||||||
 | 
							<template #caption>{{ i18n.ts.preventAiLarningDescription }}</template>
 | 
				
			||||||
 | 
						</MkSwitch>
 | 
				
			||||||
	<MkSwitch v-model="isExplorable" @update:model-value="save()">
 | 
						<MkSwitch v-model="isExplorable" @update:model-value="save()">
 | 
				
			||||||
		{{ i18n.ts.makeExplorable }}
 | 
							{{ i18n.ts.makeExplorable }}
 | 
				
			||||||
		<template #caption>{{ i18n.ts.makeExplorableDescription }}</template>
 | 
							<template #caption>{{ i18n.ts.makeExplorableDescription }}</template>
 | 
				
			||||||
| 
						 | 
					@ -71,6 +75,7 @@ import { definePageMetadata } from '@/scripts/page-metadata';
 | 
				
			||||||
let isLocked = $ref($i.isLocked);
 | 
					let isLocked = $ref($i.isLocked);
 | 
				
			||||||
let autoAcceptFollowed = $ref($i.autoAcceptFollowed);
 | 
					let autoAcceptFollowed = $ref($i.autoAcceptFollowed);
 | 
				
			||||||
let noCrawle = $ref($i.noCrawle);
 | 
					let noCrawle = $ref($i.noCrawle);
 | 
				
			||||||
 | 
					let preventAiLarning = $ref($i.preventAiLarning);
 | 
				
			||||||
let isExplorable = $ref($i.isExplorable);
 | 
					let isExplorable = $ref($i.isExplorable);
 | 
				
			||||||
let hideOnlineStatus = $ref($i.hideOnlineStatus);
 | 
					let hideOnlineStatus = $ref($i.hideOnlineStatus);
 | 
				
			||||||
let publicReactions = $ref($i.publicReactions);
 | 
					let publicReactions = $ref($i.publicReactions);
 | 
				
			||||||
| 
						 | 
					@ -86,6 +91,7 @@ function save() {
 | 
				
			||||||
		isLocked: !!isLocked,
 | 
							isLocked: !!isLocked,
 | 
				
			||||||
		autoAcceptFollowed: !!autoAcceptFollowed,
 | 
							autoAcceptFollowed: !!autoAcceptFollowed,
 | 
				
			||||||
		noCrawle: !!noCrawle,
 | 
							noCrawle: !!noCrawle,
 | 
				
			||||||
 | 
							preventAiLarning: !!preventAiLarning,
 | 
				
			||||||
		isExplorable: !!isExplorable,
 | 
							isExplorable: !!isExplorable,
 | 
				
			||||||
		hideOnlineStatus: !!hideOnlineStatus,
 | 
							hideOnlineStatus: !!hideOnlineStatus,
 | 
				
			||||||
		publicReactions: !!publicReactions,
 | 
							publicReactions: !!publicReactions,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue