diff --git a/CHANGELOG.md b/CHANGELOG.md
index 89c90bb6633e..da204c9198ad 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,17 +1,36 @@
+## Unreleased
+
+### General
+-
+
+### Client
+-
+
+### Server
+-
+
+
## 2024.8.0
### General
-- Fix: リモートユーザのフォロー・フォロワーの一覧が非公開設定の場合も表示できてしまう問題を修正
- Enhance: モデレーターはすべてのユーザーのフォロー・フォロワーの一覧を見られるように
+- Enhance: アカウントの削除のモデレーションログを残すように
+- Enhance: 不適切なページ、ギャラリー、Playを管理者権限で削除できるように
+- Fix: リモートユーザのフォロー・フォロワーの一覧が非公開設定の場合も表示できてしまう問題を修正
### Client
- Enhance: 「自分のPlay」ページにおいてPlayが非公開かどうかが一目でわかるように
+- Enhance: 不適切なページ、ギャラリー、Playを通報できるように
- Fix: Play編集時に公開範囲が「パブリック」にリセットされる問題を修正
- Fix: ページ遷移に失敗することがある問題を修正
- Fix: iOSでユーザー名などがリンクとして誤検知される現象を抑制
- Fix: mCaptchaを使用していてもbotプロテクションに関する警告が消えないのを修正
+- Fix: ユーザーのモデレーションページにおいてユーザー名にドットが入っているとシステムアカウントとして表示されてしまう問題を修正
+- Fix: 特定の条件下でノートの削除ボタンが出ないのを修正
### Server
+- Enhance: 照会時にURLがhtmlかつheadタグ内に`rel="alternate"`, `type="application/activity+json"`の`link`タグがある場合に追ってリンク先を照会できるように
+- Enhance: 凍結されたアカウントのフォローリクエストを表示しないように
- Fix: WSの`readAllNotifications` メッセージが `body` を持たない場合に動作しない問題 #14374
- 通知ページや通知カラム(デッキ)を開いている状態において、新たに発生した通知が既読されない問題が修正されます。
- これにより、プッシュ通知が有効な同条件下の環境において、プッシュ通知が常に発生してしまう問題も修正されます。
@@ -22,6 +41,12 @@
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/679)
- Fix: ActivityPubのエンティティタイプ判定で不明なタイプを受け取った場合でも処理を継続するように
- キュー処理のつまりが改善される可能性があります
+- Fix: リバーシの対局設定の変更が反映されないのを修正
+- Fix: 無制限にストリーミングのチャンネルに接続できる問題を修正
+- Fix: ベースロールのポリシーを変更した際にモデログに記録されないのを修正
+ (Cherry-picked from https://github.com/MisskeyIO/misskey/pull/700)
+- Fix: Prevent memory leak from memory caches (#14310)
+- Fix: More reliable memory cache eviction (#14311)
## 2024.7.0
diff --git a/locales/en-US.yml b/locales/en-US.yml
index fe2bb08074fa..c82ea3c9a27c 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -182,7 +182,7 @@ addAccount: "Add account"
reloadAccountsList: "Reload account list"
loginFailed: "Failed to sign in"
showOnRemote: "View on remote instance"
-continueOnRemote: "リモートで続行"
+continueOnRemote: "Continue on a remote server"
chooseServerOnMisskeyHub: "Choose a server from the Misskey Hub"
specifyServerHost: "Specify a server host directly"
inputHostName: "Enter the domain"
@@ -487,7 +487,7 @@ noMessagesYet: "No messages yet"
newMessageExists: "There are new messages"
onlyOneFileCanBeAttached: "You can only attach one file to a message"
signinRequired: "Please register or sign in before continuing"
-signinOrContinueOnRemote: "To continue, you need to move your server or sign up / log in to this server."
+signinOrContinueOnRemote: "To continue, you need to move your server or sign up / log in to this server."
invitations: "Invites"
invitationCode: "Invitation code"
checking: "Checking..."
@@ -2316,6 +2316,7 @@ _pages:
eyeCatchingImageSet: "Set thumbnail"
eyeCatchingImageRemove: "Delete thumbnail"
chooseBlock: "Add a block"
+ enterSectionTitle: "Enter a section title"
selectType: "Select a type"
contentBlocks: "Content"
inputBlocks: "Input"
@@ -2499,6 +2500,10 @@ _moderationLogTypes:
createAbuseReportNotificationRecipient: "Create a recipient for abuse reports"
updateAbuseReportNotificationRecipient: "Update recipients for abuse reports"
deleteAbuseReportNotificationRecipient: "Delete a recipient for abuse reports"
+ deleteAccount: "Delete the account"
+ deletePage: "Delete the page"
+ deleteFlash: "Delete Play"
+ deleteGalleryPost: "Delete the gallery post"
_fileViewer:
title: "File details"
type: "File type"
diff --git a/locales/es-ES.yml b/locales/es-ES.yml
index ef066a37edd1..2621965d1bf5 100644
--- a/locales/es-ES.yml
+++ b/locales/es-ES.yml
@@ -60,6 +60,7 @@ copyFileId: "Copiar ID del archivo"
copyFolderId: "Copiar ID de carpeta"
copyProfileUrl: "Copiar la URL del perfil"
searchUser: "Buscar un usuario"
+searchThisUsersNotes: ""
reply: "Responder"
loadMore: "Ver más"
showMore: "Ver más"
diff --git a/locales/index.d.ts b/locales/index.d.ts
index a3638d285484..0f7b4bfe1f50 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -2829,7 +2829,7 @@ export interface Locale extends ILocale {
*/
readonly "reportAbuseOf": ParameterizedString<"name">;
/**
- * 通報理由の詳細を記入してください。対象のノートがある場合はそのURLも記入してください。
+ * 通報理由の詳細を記入してください。対象のノートやページなどがある場合はそのURLも記入してください。
*/
readonly "fillAbuseReportDescription": string;
/**
@@ -8985,6 +8985,10 @@ export interface Locale extends ILocale {
* ブロックを追加
*/
readonly "chooseBlock": string;
+ /**
+ * セクションタイトルを入力
+ */
+ readonly "enterSectionTitle": string;
/**
* 種類を選択
*/
@@ -9679,6 +9683,22 @@ export interface Locale extends ILocale {
* 通報の通知先を削除
*/
readonly "deleteAbuseReportNotificationRecipient": string;
+ /**
+ * アカウントを削除
+ */
+ readonly "deleteAccount": string;
+ /**
+ * ページを削除
+ */
+ readonly "deletePage": string;
+ /**
+ * Playを削除
+ */
+ readonly "deleteFlash": string;
+ /**
+ * ギャラリーの投稿を削除
+ */
+ readonly "deleteGalleryPost": string;
};
readonly "_fileViewer": {
/**
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 685f1af27884..cb4947b7a4fc 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -703,7 +703,7 @@ abuseReports: "通報"
reportAbuse: "通報"
reportAbuseRenote: "リノートを通報"
reportAbuseOf: "{name}を通報する"
-fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のノートがある場合はそのURLも記入してください。"
+fillAbuseReportDescription: "通報理由の詳細を記入してください。対象のノートやページなどがある場合はそのURLも記入してください。"
abuseReported: "内容が送信されました。ご報告ありがとうございました。"
reporter: "通報者"
reporteeOrigin: "通報先"
@@ -2371,6 +2371,7 @@ _pages:
eyeCatchingImageSet: "アイキャッチ画像を設定"
eyeCatchingImageRemove: "アイキャッチ画像を削除"
chooseBlock: "ブロックを追加"
+ enterSectionTitle: "セクションタイトルを入力"
selectType: "種類を選択"
contentBlocks: "コンテンツ"
inputBlocks: "入力"
@@ -2567,6 +2568,10 @@ _moderationLogTypes:
createAbuseReportNotificationRecipient: "通報の通知先を作成"
updateAbuseReportNotificationRecipient: "通報の通知先を更新"
deleteAbuseReportNotificationRecipient: "通報の通知先を削除"
+ deleteAccount: "アカウントを削除"
+ deletePage: "ページを削除"
+ deleteFlash: "Playを削除"
+ deleteGalleryPost: "ギャラリーの投稿を削除"
_fileViewer:
title: "ファイルの詳細"
diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml
index d4c07a28c534..87f934201c19 100644
--- a/locales/pt-PT.yml
+++ b/locales/pt-PT.yml
@@ -1675,7 +1675,7 @@ _role:
descriptionOfPermission: "Moderador permite que você execute operações básicas relacionadas à moderação.\nAdministradores podem alterar todas as configurações do servidor."
assignTarget: "Atribuir"
descriptionOfAssignTarget: "Manual para gerenciar manualmente quem está incluído neste cargo.\nCondicional define uma condição e os usuários que corresponderem a ela serão incluídos automaticamente."
- manual: "Documentação"
+ manual: "Manual"
manualRoles: "Cargos manuais"
conditional: "Condicional"
conditionalRoles: "Cargos condicionais"
diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml
index 7b68a5cfdbe6..d422c3afc576 100644
--- a/locales/zh-CN.yml
+++ b/locales/zh-CN.yml
@@ -2316,6 +2316,7 @@ _pages:
eyeCatchingImageSet: "设置封面图片"
eyeCatchingImageRemove: "删除封面图片"
chooseBlock: "添加块"
+ enterSectionTitle: "输入会话标题"
selectType: "选择类型"
contentBlocks: "内容"
inputBlocks: "输入"
@@ -2499,6 +2500,10 @@ _moderationLogTypes:
createAbuseReportNotificationRecipient: "新建了举报通知"
updateAbuseReportNotificationRecipient: "更新了举报通知"
deleteAbuseReportNotificationRecipient: "删除了举报通知"
+ deleteAccount: "删除了账户"
+ deletePage: "删除了页面"
+ deleteFlash: "删除了 Play"
+ deleteGalleryPost: "删除了图库稿件"
_fileViewer:
title: "文件信息"
type: "文件类型"
diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml
index 3f6681866921..57da480d2877 100644
--- a/locales/zh-TW.yml
+++ b/locales/zh-TW.yml
@@ -2316,6 +2316,7 @@ _pages:
eyeCatchingImageSet: "設定封面影像"
eyeCatchingImageRemove: "刪除封面影像"
chooseBlock: "新增方塊"
+ enterSectionTitle: "輸入區段的標題"
selectType: "選擇類型"
contentBlocks: "內容"
inputBlocks: "輸入"
@@ -2499,6 +2500,10 @@ _moderationLogTypes:
createAbuseReportNotificationRecipient: "建立接收檢舉的通知對象"
updateAbuseReportNotificationRecipient: "更新接收檢舉的通知對象"
deleteAbuseReportNotificationRecipient: "刪除接收檢舉的通知對象"
+ deleteAccount: "刪除帳戶"
+ deletePage: "刪除頁面"
+ deleteFlash: "刪除 Play"
+ deleteGalleryPost: "刪除相簿的貼文"
_fileViewer:
title: "檔案詳細資訊"
type: "檔案類型 "
diff --git a/package.json b/package.json
index c0de05257bb2..33d448271940 100644
--- a/package.json
+++ b/package.json
@@ -61,7 +61,7 @@
"glob": "11.0.0"
},
"devDependencies": {
- "@misskey-dev/eslint-plugin": "2.0.2",
+ "@misskey-dev/eslint-plugin": "2.0.3",
"@types/node": "20.14.12",
"@typescript-eslint/eslint-plugin": "7.17.0",
"@typescript-eslint/parser": "7.17.0",
diff --git a/packages/backend/src/core/AvatarDecorationService.ts b/packages/backend/src/core/AvatarDecorationService.ts
index 8b54bbe01241..4efd6122b18b 100644
--- a/packages/backend/src/core/AvatarDecorationService.ts
+++ b/packages/backend/src/core/AvatarDecorationService.ts
@@ -29,7 +29,7 @@ export class AvatarDecorationService implements OnApplicationShutdown {
private moderationLogService: ModerationLogService,
private globalEventService: GlobalEventService,
) {
- this.cache = new MemorySingleCache(1000 * 60 * 30);
+ this.cache = new MemorySingleCache(1000 * 60 * 30); // 30s
this.redisForSub.on('message', this.onMessage);
}
diff --git a/packages/backend/src/core/CacheService.ts b/packages/backend/src/core/CacheService.ts
index d008e7ec52a3..6725ebe75b14 100644
--- a/packages/backend/src/core/CacheService.ts
+++ b/packages/backend/src/core/CacheService.ts
@@ -56,10 +56,10 @@ export class CacheService implements OnApplicationShutdown {
) {
//this.onMessage = this.onMessage.bind(this);
- this.userByIdCache = new MemoryKVCache(Infinity);
- this.localUserByNativeTokenCache = new MemoryKVCache(Infinity);
- this.localUserByIdCache = new MemoryKVCache(Infinity);
- this.uriPersonCache = new MemoryKVCache(Infinity);
+ this.userByIdCache = new MemoryKVCache(1000 * 60 * 5); // 5m
+ this.localUserByNativeTokenCache = new MemoryKVCache(1000 * 60 * 5); // 5m
+ this.localUserByIdCache = new MemoryKVCache(1000 * 60 * 5); // 5m
+ this.uriPersonCache = new MemoryKVCache(1000 * 60 * 5); // 5m
this.userProfileCache = new RedisKVCache(this.redisClient, 'userProfile', {
lifetime: 1000 * 60 * 30, // 30m
@@ -135,14 +135,14 @@ export class CacheService implements OnApplicationShutdown {
if (user == null) {
this.userByIdCache.delete(body.id);
this.localUserByIdCache.delete(body.id);
- for (const [k, v] of this.uriPersonCache.cache.entries()) {
+ for (const [k, v] of this.uriPersonCache.entries) {
if (v.value?.id === body.id) {
this.uriPersonCache.delete(k);
}
}
} else {
this.userByIdCache.set(user.id, user);
- for (const [k, v] of this.uriPersonCache.cache.entries()) {
+ for (const [k, v] of this.uriPersonCache.entries) {
if (v.value?.id === user.id) {
this.uriPersonCache.set(k, user);
}
diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index 7e11b9cdca15..5db3c5b98035 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -24,7 +24,7 @@ const parseEmojiStrRegexp = /^([-\w]+)(?:@([\w.-]+))?$/;
@Injectable()
export class CustomEmojiService implements OnApplicationShutdown {
- private cache: MemoryKVCache;
+ private emojisCache: MemoryKVCache;
public localEmojisCache: RedisSingleCache