diff --git a/locales/index.d.ts b/locales/index.d.ts
index e5f598a903..e9104d1568 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -10414,6 +10414,14 @@ export interface Locale extends ILocale {
          * 石をアイコンにする
          */
         "useAvatarAsStone": string;
+        /**
+         * 相手のユーザーにはMisskey Gamesをプレイする権限がありません。
+         */
+        "targetUserIsNotAvailable": string;
+        /**
+         * 相手に自分自身を指定することはできません。
+         */
+        "targetIsYourself": string;
     };
     "_offlineScreen": {
         /**
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 4fbdba479e..a83e4a6d9c 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -2769,6 +2769,8 @@ _reversi:
   disallowIrregularRules: "変則なし"
   showBoardLabels: "盤面に行・列番号を表示"
   useAvatarAsStone: "石をアイコンにする"
+  targetUserIsNotAvailable: "相手のユーザーにはMisskey Gamesをプレイする権限がありません。"
+  targetIsYourself: "相手に自分自身を指定することはできません。"
 
 _offlineScreen:
   title: "オフライン - サーバーに接続できません"
diff --git a/packages/frontend/src/pages/reversi/index.vue b/packages/frontend/src/pages/reversi/index.vue
index 2da150018b..ed85babb03 100644
--- a/packages/frontend/src/pages/reversi/index.vue
+++ b/packages/frontend/src/pages/reversi/index.vue
@@ -196,15 +196,33 @@ async function matchHeatbeat() {
 }
 
 function onApiError(err) {
-	if (err.id === '7f86f06f-7e15-4057-8561-f4b6d4ac755a') {
+	if (err.id != null) {
+		let title: string | null = null;
+		let text = i18n.ts.somethingHappened;
+
+		switch (err.id) {
+			case '7f86f06f-7e15-4057-8561-f4b6d4ac755a':
+				title = i18n.ts.permissionDeniedError;
+				text = i18n.ts.permissionDeniedErrorDescription;
+				break;
+			case '3a8a677f-98e5-4c4d-b059-e5874b44bd4f':
+				title = i18n.ts.somethingHappened;
+				text = i18n.ts._reversi.targetUserIsNotAvailable;
+				break;
+			case '96fd7bd6-d2bc-426c-a865-d055dcd2828e':
+				title = i18n.ts.somethingHappened;
+				text = i18n.ts._reversi.targetIsYourself;
+				break;
+		}
+
 		// Role permission error
 		matchingUser.value = null;
 		matchingAny.value = false;
 
 		os.alert({
 			type: 'error',
-			title: i18n.ts.permissionDeniedError,
-			text: i18n.ts.permissionDeniedErrorDescription,
+			title: title ?? undefined,
+			text,
 		});
 	}
 	return null;