feat(web): меню модерации участника в списке сервера
Банить и исключать нужно того, кто прямо сейчас в сервере, а не только разбирать готовый список банов (AGENT.md 7.17). - `MemberModerationMenu`: тайм-аут (1/10/60/1440 минут и снятие), бан с причиной и исключение; пункты скрыты без прав KICK_MEMBERS/BAN_MEMBERS/TIMEOUT_MEMBERS, себя модерировать нельзя; - после действия обновляются списки участников и банов (без F5); - тесты: бан с причиной, тайм-аут, исключение и скрытие меню без прав.
This commit is contained in:
@@ -158,6 +158,13 @@ function GuildSettingsBody({ guilds }: { guilds: { id: string }[] }) {
|
||||
currentUser.data?.is_instance_admin === true,
|
||||
);
|
||||
|
||||
// Исключение и тайм-аут: владелец, ADMINISTRATOR, право или админ инстанса.
|
||||
const canModerateMembers = (permission: string): boolean =>
|
||||
currentUser.data?.is_instance_admin === true ||
|
||||
guild.owner_id === currentUser.data?.id ||
|
||||
guild.my_permissions.includes('ADMINISTRATOR') ||
|
||||
guild.my_permissions.includes(permission);
|
||||
|
||||
// «Баны» и журнал аудита (AGENT.md 7.17, 7.18).
|
||||
const canBan = canBanMembers(
|
||||
guild.my_permissions,
|
||||
@@ -184,10 +191,15 @@ function GuildSettingsBody({ guilds }: { guilds: { id: string }[] }) {
|
||||
<>
|
||||
<GuildGeneralSection key={guild.id} guild={guild} canEdit={canManage} />
|
||||
<GuildMembersSection
|
||||
guildId={guild.id}
|
||||
members={members.data}
|
||||
isPending={members.isPending}
|
||||
error={members.error}
|
||||
onRetry={() => void members.refetch()}
|
||||
canKick={canModerateMembers('KICK_MEMBERS')}
|
||||
canBan={canBan}
|
||||
canTimeout={canModerateMembers('TIMEOUT_MEMBERS')}
|
||||
currentUserId={currentUser.data?.id}
|
||||
/>
|
||||
<GuildRolesSection key={`${guild.id}-roles`} guildId={guild.id} />
|
||||
{canManageEmojiSet ? (
|
||||
|
||||
Reference in New Issue
Block a user