diff --git a/src/client/components/user-moderate-dialog.vue b/src/client/components/user-moderate-dialog.vue
index 894db5384e..46915b2e9e 100644
--- a/src/client/components/user-moderate-dialog.vue
+++ b/src/client/components/user-moderate-dialog.vue
@@ -3,6 +3,7 @@
 	<template #header><mk-user-name :user="user"/></template>
 	<div class="vrcsvlkm">
 		<mk-button @click="changePassword()">{{ $t('changePassword') }}</mk-button>
+		<mk-switch v-if="$store.state.i.isAdmin" @change="toggleModerator()" v-model="moderator">{{ $t('moderator') }}</mk-switch>
 		<mk-switch @change="toggleSilence()" v-model="silenced">{{ $t('silence') }}</mk-switch>
 		<mk-switch @change="toggleSuspend()" v-model="suspended">{{ $t('suspend') }}</mk-switch>
 	</div>
@@ -34,6 +35,7 @@ export default Vue.extend({
 
 	data() {
 		return {
+			moderator: this.user.isModerator,
 			silenced: this.user.isSilenced,
 			suspended: this.user.isSuspended,
 		};
@@ -94,8 +96,12 @@ export default Vue.extend({
 			if (confirm.canceled) {
 				this.suspended = !this.suspended;
 			} else {
-				this.$root.api(this.silenced ? 'admin/suspend-user' : 'admin/unsuspend-user', { userId: this.user.id });
+				this.$root.api(this.suspended ? 'admin/suspend-user' : 'admin/unsuspend-user', { userId: this.user.id });
 			}
+		},
+
+		async toggleModerator() {
+			this.$root.api(this.moderator ? 'admin/moderators/add' : 'admin/moderators/remove', { userId: this.user.id });
 		}
 	}
 });