Skip to content

Commit

Permalink
Merge pull request #1070 from atsu1125/changemoderatorpriv
Browse files Browse the repository at this point in the history
Change: Moderator Privilege
  • Loading branch information
fs5m8 authored Jan 2, 2023
2 parents 5965173 + 607ad4c commit 4a9c814
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 51 deletions.
6 changes: 3 additions & 3 deletions src/client/app/admin/views/announcements.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
<span>{{ $t('image-url') }}</span>
</ui-input>
<ui-horizon-group class="fit-bottom">
<ui-button @click="save()"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
<ui-button @click="remove(i)"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
<ui-button @click="save()" :disabled="!$store.getters.isAdmin"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
<ui-button @click="remove(i)" :disabled="!$store.getters.isAdmin"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
</ui-horizon-group>
</section>
<section>
<ui-button @click="add"><fa :icon="faPlus"/> {{ $t('add') }}</ui-button>
<ui-button @click="add" :disabled="!$store.getters.isAdmin"><fa :icon="faPlus"/> {{ $t('add') }}</ui-button>
</section>
</ui-card>
</div>
Expand Down
6 changes: 3 additions & 3 deletions src/client/app/admin/views/db.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
<section>
<header><fa :icon="faBroom"/> {{ $t('vacuum') }}</header>
<ui-info>{{ $t('vacuum-info') }}</ui-info>
<ui-switch v-model="fullVacuum">FULL</ui-switch>
<ui-switch v-model="analyzeVacuum">ANALYZE</ui-switch>
<ui-button @click="vacuum()"><fa :icon="faBroom"/> {{ $t('vacuum') }}</ui-button>
<ui-switch v-model="fullVacuum" :disabled="!$store.getters.isAdmin">FULL</ui-switch>
<ui-switch v-model="analyzeVacuum" :disabled="!$store.getters.isAdmin">ANALYZE</ui-switch>
<ui-button @click="vacuum()" :disabled="!$store.getters.isAdmin"><fa :icon="faBroom"/> {{ $t('vacuum') }}</ui-button>
<ui-info warn>{{ $t('vacuum-exclamation') }}</ui-info>
</section>
</ui-card>
Expand Down
2 changes: 1 addition & 1 deletion src/client/app/admin/views/federation.vue
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@
<ui-textarea v-model="blockedHosts">
<template #desc>{{ $t('blocked-hosts-info') }}</template>
</ui-textarea>
<ui-button @click="saveBlockedHosts">{{ $t('save') }}</ui-button>
<ui-button @click="saveBlockedHosts" :disabled="!$store.getters.isAdmin">{{ $t('save') }}</ui-button>
</section>
</ui-card>
</div>
Expand Down
6 changes: 3 additions & 3 deletions src/client/app/admin/views/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@
</div>
<ul>
<li><router-link to="/dashboard" active-class="active"><fa icon="home" fixed-width/>{{ $t('dashboard') }}</router-link></li>
<li><router-link to="/instance" active-class="active"><fa icon="cog" fixed-width/>{{ $t('instance') }}</router-link></li>
<li><router-link to="/instance" active-class="active" v-if="$store.getters.isAdmin"><fa icon="cog" fixed-width/>{{ $t('instance') }}</router-link></li>
<li><router-link to="/queue" active-class="active"><fa :icon="faTasks" fixed-width/>{{ $t('queue') }}</router-link></li>
<li><router-link to="/logs" active-class="active"><fa :icon="faStream" fixed-width/>{{ $t('logs') }}</router-link></li>
<li><router-link to="/db" active-class="active"><fa :icon="faDatabase" fixed-width/>{{ $t('db') }}</router-link></li>
<li><router-link to="/db" active-class="active" v-if="$store.getters.isAdmin"><fa :icon="faDatabase" fixed-width/>{{ $t('db') }}</router-link></li>
<li><router-link to="/moderators" active-class="active" v-if="$store.getters.isAdmin"><fa :icon="faHeadset" fixed-width/>{{ $t('moderators') }}</router-link></li>
<li><router-link to="/users" active-class="active"><fa icon="users" fixed-width/>{{ $t('users') }}</router-link></li>
<li><router-link to="/drive" active-class="active"><fa icon="cloud" fixed-width/>{{ $t('@.drive') }}</router-link></li>
<li><router-link to="/federation" active-class="active"><fa :icon="faGlobe" fixed-width/>{{ $t('federation') }}</router-link></li>
<li><router-link to="/relays" active-class="active"><fa :icon="faProjectDiagram" fixed-width/>{{ $t('relays') }}</router-link></li>
<li><router-link to="/emoji" active-class="active"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</router-link></li>
<li><router-link to="/announcements" active-class="active"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</router-link></li>
<li><router-link to="/announcements" active-class="active" v-if="$store.getters.isAdmin"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</router-link></li>
<li><router-link to="/abuse" active-class="active"><fa :icon="faExclamationCircle" fixed-width/>{{ $t('abuse') }}</router-link></li>
</ul>
<div class="back-to-misskey">
Expand Down
82 changes: 49 additions & 33 deletions src/client/app/admin/views/instance.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@
<ui-input v-model="maintainerEmail" type="email"><template #icon><fa :icon="farEnvelope"/></template>{{ $t('maintainer-email') }}</ui-input>
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
<ui-button v-if="disableRegistration" @click="invite">{{ $t('invite') }}</ui-button>
<ui-switch v-model="disableRegistration" :disabled="!$store.getters.isAdmin">{{ $t('disable-registration') }}</ui-switch>
<ui-button v-if="disableRegistration" @click="invite" :disabled="!$store.getters.isAdmin">{{ $t('invite') }}</ui-button>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

Expand All @@ -38,23 +38,23 @@
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
</section>
<section>
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
<ui-switch v-model="disableGlobalTimeline">{{ $t('disable-global-timeline') }}</ui-switch>
<ui-switch v-model="disableLocalTimeline" :disabled="!$store.getters.isAdmin">{{ $t('disable-local-timeline') }}</ui-switch>
<ui-switch v-model="disableGlobalTimeline" :disabled="!$store.getters.isAdmin">{{ $t('disable-global-timeline') }}</ui-switch>
<ui-info>{{ $t('disabling-timelines-info') }}</ui-info>
</section>
<section>
<ui-switch v-model="enableEmojiReaction">{{ $t('enable-emoji-reaction') }}</ui-switch>
<ui-switch v-model="useStarForReactionFallback">{{ $t('use-star-for-reaction-fallback') }}</ui-switch>
<ui-switch v-model="enableEmojiReaction" :disabled="!$store.getters.isAdmin">{{ $t('enable-emoji-reaction') }}</ui-switch>
<ui-switch v-model="useStarForReactionFallback" :disabled="!$store.getters.isAdmin">{{ $t('use-star-for-reaction-fallback') }}</ui-switch>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

<ui-card>
<template #title><fa icon="cloud"/> {{ $t('drive-config') }}</template>
<section>
<ui-switch v-model="useObjectStorage">{{ $t('use-object-storage') }}</ui-switch>
<ui-switch v-model="useObjectStorage" :disabled="!$store.getters.isAdmin">{{ $t('use-object-storage') }}</ui-switch>
<template v-if="useObjectStorage">
<ui-info>
<i18n path="object-storage-s3-info">
Expand All @@ -76,23 +76,23 @@
<ui-input v-model="objectStorageAccessKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-access-key') }}</ui-input>
<ui-input v-model="objectStorageSecretKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-secret-key') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage">{{ $t('object-storage-use-ssl') }}</ui-switch>
<ui-switch v-model="objectStorageUseProxy" :disabled="!useObjectStorage">{{ $t('objectStorageUseProxy') }}</ui-switch>
<ui-switch v-model="objectStorageSetPublicRead" :disabled="!useObjectStorage">{{ $t('objectStorageSetPublicRead') }}</ui-switch>
<ui-switch v-model="objectStorageS3ForcePathStyle" :disabled="!useObjectStorage">{{ $t('objectStorageS3ForcePathStyle') }}</ui-switch>
<ui-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage || !$store.getters.isAdmin">{{ $t('object-storage-use-ssl') }}</ui-switch>
<ui-switch v-model="objectStorageUseProxy" :disabled="!useObjectStorage || !$store.getters.isAdmin">{{ $t('objectStorageUseProxy') }}</ui-switch>
<ui-switch v-model="objectStorageSetPublicRead" :disabled="!useObjectStorage || !$store.getters.isAdmin">{{ $t('objectStorageSetPublicRead') }}</ui-switch>
<ui-switch v-model="objectStorageS3ForcePathStyle" :disabled="!useObjectStorage || !$store.getters.isAdmin">{{ $t('objectStorageS3ForcePathStyle') }}</ui-switch>
</template>
</section>
<section>
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
<ui-switch v-model="proxyRemoteFiles">{{ $t('proxy-remote-files') }}<template #desc>{{ $t('proxy-remote-files-desc') }}</template></ui-switch>
<ui-switch v-model="cacheRemoteFiles" :disabled="!$store.getters.isAdmin">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
<ui-switch v-model="proxyRemoteFiles" :disabled="!$store.getters.isAdmin">{{ $t('proxy-remote-files') }}<template #desc>{{ $t('proxy-remote-files-desc') }}</template></ui-switch>
</section>
<section class="fit-top fit-bottom">
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
<ui-input v-model="premiumDriveCapacityMb" type="number">{{ $t('premium-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

Expand All @@ -102,7 +102,7 @@
<ui-textarea v-model="pinnedUsers">
<template #desc>{{ $t('pinned-users-info') }}</template>
</ui-textarea>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

Expand All @@ -114,38 +114,38 @@
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

<ui-card>
<template #title><fa :icon="farEnvelope"/> {{ $t('email-config') }}</template>
<section>
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
<ui-switch v-model="enableEmail" :disabled="!$store.getters.isAdmin">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
<template v-if="enableEmail">
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
<ui-input v-model="smtpPort" type="number" :disabled="!enableEmail">{{ $t('smtp-port') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
<ui-switch v-model="smtpAuth" :disabled="!$store.getters.isAdmin">{{ $t('smtp-auth') }}</ui-switch>
<ui-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" type="password" :with-password-toggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
<ui-button @click="testEmail()">{{ $t('test-email') }}</ui-button>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail || !$store.getters.isAdmin">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
<ui-button @click="testEmail()" :disabled="!$store.getters.isAdmin">{{ $t('test-email') }}</ui-button>
</template>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

<ui-card>
<template #title><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</template>
<section>
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
<ui-switch v-model="enableServiceWorker" :disabled="!$store.getters.isAdmin">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
<template v-if="enableServiceWorker">
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
<ui-horizon-group inputs class="fit-bottom">
Expand All @@ -155,14 +155,14 @@
</template>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

<ui-card>
<template #title><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</template>
<section :class="enableRecaptcha ? 'fit-bottom' : ''">
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
<ui-switch v-model="enableRecaptcha" :disabled="!$store.getters.isAdmin">{{ $t('enable-recaptcha') }}</ui-switch>
<template v-if="enableRecaptcha">
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
<ui-info warn>{{ $t('recaptcha-info2') }}</ui-info>
Expand All @@ -177,15 +177,15 @@
<div ref="recaptcha" style="margin: 16px 0 0 0;" :key="recaptchaSiteKey"></div>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

<ui-card>
<template #title><fa :icon="faShieldAlt"/> {{ $t('external-service-integration-config') }}</template>
<section>
<header><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</header>
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
<ui-switch v-model="enableTwitterIntegration" :disabled="!$store.getters.isAdmin">{{ $t('enable-twitter-integration') }}</ui-switch>
<template v-if="enableTwitterIntegration">
<ui-horizon-group>
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
Expand All @@ -196,7 +196,7 @@
</section>
<section>
<header><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</header>
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
<ui-switch v-model="enableGithubIntegration" :disabled="!$store.getters.isAdmin">{{ $t('enable-github-integration') }}</ui-switch>
<template v-if="enableGithubIntegration">
<ui-horizon-group>
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
Expand All @@ -207,7 +207,7 @@
</section>
<section>
<header><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</header>
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
<ui-switch v-model="enableDiscordIntegration" :disabled="!$store.getters.isAdmin">{{ $t('enable-discord-integration') }}</ui-switch>
<template v-if="enableDiscordIntegration">
<ui-horizon-group>
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
Expand All @@ -217,7 +217,7 @@
</template>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

Expand All @@ -230,7 +230,7 @@
<ui-textarea v-model="hiddenTags">
<template #desc>{{ $t('hidden-tags-info') }}</template>
</ui-textarea>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>

Expand All @@ -240,7 +240,7 @@
<ui-input v-model="summalyProxy">URL</ui-input>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
<ui-button @click="updateMeta" :disabled="!$store.getters.isAdmin"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
</details>
Expand All @@ -260,6 +260,7 @@ export default Vue.extend({
data() {
return {
fetched: false,
url,
host: toUnicode(host),
maintainerName: null,
Expand Down Expand Up @@ -394,6 +395,13 @@ export default Vue.extend({
this.objectStorageUseProxy = meta.objectStorageUseProxy;
this.objectStorageSetPublicRead = meta.objectStorageSetPublicRead;
this.objectStorageS3ForcePathStyle = meta.objectStorageS3ForcePathStyle;
this.fetched = true;
}).catch(e => {
this.$root.dialog({
type: 'error',
text: 'meta fetch failed'
});
});
},
Expand Down Expand Up @@ -459,6 +467,14 @@ export default Vue.extend({
},
updateMeta() {
if (!this.fetched) {
this.$root.dialog({
type: 'error',
text: 'Cannot continue because meta fetch has failed'
});
return;
}
this.$root.api('admin/update-meta', {
maintainerName: this.maintainerName,
maintainerEmail: this.maintainerEmail,
Expand Down
4 changes: 2 additions & 2 deletions src/client/app/admin/views/moderators.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<template #prefix>@</template>
</ui-input>
<ui-horizon-group>
<ui-button @click="add" :disabled="changing">{{ $t('add-moderator.add') }}</ui-button>
<ui-button @click="remove" :disabled="changing">{{ $t('add-moderator.remove') }}</ui-button>
<ui-button @click="add" :disabled="changing || !$store.getters.isAdmin">{{ $t('add-moderator.add') }}</ui-button>
<ui-button @click="remove" :disabled="changing || !$store.getters.isAdmin">{{ $t('add-moderator.remove') }}</ui-button>
</ui-horizon-group>
</section>
</ui-card>
Expand Down
7 changes: 4 additions & 3 deletions src/server/api/endpoints/admin/get-table-stats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ import define from '../../define';
import { getConnection } from 'typeorm';

export const meta = {
requireCredential: false,
tags: ['admin'],

requireCredential: true,
requireAdmin: true,

desc: {
'en-US': 'Get table stats'
},

tags: ['meta'],

params: {
},
};
Expand Down
2 changes: 1 addition & 1 deletion src/server/api/endpoints/admin/update-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const meta = {
tags: ['admin'],

requireCredential: true,
requireModerator: true,
requireAdmin: true,

params: {
announcements: {
Expand Down
2 changes: 1 addition & 1 deletion src/server/api/endpoints/admin/vacuum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const meta = {
tags: ['admin'],

requireCredential: true,
requireModerator: true,
requireAdmin: true,

params: {
full: {
Expand Down
2 changes: 1 addition & 1 deletion src/server/api/endpoints/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ export default define(meta, async (ps, me) => {
};
}

if (me && (me.isAdmin || me.isModerator)) {
if (me && (me.isAdmin)) {
response.useStarForReactionFallback = instance.useStarForReactionFallback;
response.pinnedUsers = instance.pinnedUsers;
response.hiddenTags = instance.hiddenTags;
Expand Down

0 comments on commit 4a9c814

Please sign in to comment.