Reformat all files with Prettier

This commit is contained in:
Dragory 2021-09-11 19:06:51 +03:00
parent 0cde0d46d2
commit ac79eb09f5
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
206 changed files with 727 additions and 888 deletions

View file

@ -3,9 +3,11 @@ import { Configurator } from "./Configurator";
import "./App.css";
export function App() {
return <div className="App">
<div className="wrapper">
<Configurator />
return (
<div className="App">
<div className="wrapper">
<Configurator />
</div>
</div>
</div>;
);
}

View file

@ -1,5 +1,4 @@
.Configurator {
}
.Configurator .options {

View file

@ -5,7 +5,7 @@ import yaml from "js-yaml";
import "./Configurator.css";
export function Configurator() {
const [prefix, setPrefix] = useState('!');
const [prefix, setPrefix] = useState("!");
const [levels, setLevels] = useState<LevelEntry[]>([]);
const [withModCommands, setWithModCommands] = useState(false);
@ -42,7 +42,7 @@ export function Configurator() {
resultObj.plugins.mutes = {
config: {
mute_role: muteRoleId,
}
},
};
if (dmModActionReasons) {
@ -108,7 +108,7 @@ export function Configurator() {
setCopied(true);
}
const [copyResetTimeout, setCopyResetTimeout] = useState<number|null>(null);
const [copyResetTimeout, setCopyResetTimeout] = useState<number | null>(null);
useEffect(() => {
if (!copied) {
return;
@ -129,8 +129,9 @@ export function Configurator() {
<h2>Prefix</h2>
<div className="control">
<label>
Bot prefix<br />
<input value={prefix} onChange={e => setPrefix(e.target.value)} />
Bot prefix
<br />
<input value={prefix} onChange={(e) => setPrefix(e.target.value)} />
</label>
</div>
@ -142,24 +143,30 @@ export function Configurator() {
<h2>Mod commands</h2>
<div className="control">
<label>
<input type="checkbox" checked={withModCommands} onChange={e => setWithModCommands(e.target.checked)} />
<input type="checkbox" checked={withModCommands} onChange={(e) => setWithModCommands(e.target.checked)} />
Start with a basic mod command setup
</label>
{withModCommands && (
<div>
<label>
Mute role ID<br />
<input value={muteRoleId} onChange={e => setMuteRoleId(e.target.value)} />
Mute role ID
<br />
<input value={muteRoleId} onChange={(e) => setMuteRoleId(e.target.value)} />
</label>
<label>
Case channel ID<br />
<input value={caseChannelId} onChange={e => setCaseChannelId(e.target.value)} />
Case channel ID
<br />
<input value={caseChannelId} onChange={(e) => setCaseChannelId(e.target.value)} />
</label>
<label>
<input type="checkbox" checked={dmModActionReasons} onChange={e => setDmModActionReasons(e.target.checked)} />
<input
type="checkbox"
checked={dmModActionReasons}
onChange={(e) => setDmModActionReasons(e.target.checked)}
/>
DM reason with mod actions
</label>
</div>
@ -169,21 +176,23 @@ export function Configurator() {
<h2>Logs</h2>
<div className="control">
<label>
<input type="checkbox" checked={withLogs} onChange={e => setWithLogs(e.target.checked)} />
<input type="checkbox" checked={withLogs} onChange={(e) => setWithLogs(e.target.checked)} />
Start with a basic logging setup
</label>
{withLogs && (
<LogChannels logChannels={logChannels} setLogChannels={setLogChannels} />
)}
{withLogs && <LogChannels logChannels={logChannels} setLogChannels={setLogChannels} />}
</div>
</div>
{/* Result */}
<textarea className="result" rows={resultRows} readOnly={true} value={formattedResult} onClick={e => copyResultText(e.target as HTMLTextAreaElement)} />
{copied
? <em>Copied!</em>
: <em>Click textarea to copy</em>}
<textarea
className="result"
rows={resultRows}
readOnly={true}
value={formattedResult}
onClick={(e) => copyResultText(e.target as HTMLTextAreaElement)}
/>
{copied ? <em>Copied!</em> : <em>Click textarea to copy</em>}
</div>
);
}

View file

@ -7,23 +7,23 @@ export type LevelEntry = [string, number]; // id, level
export function Levels({ levels, setLevels }) {
function addLevel() {
setLevels(arr => [...arr, ["", LEVEL_MODERATOR]]);
setLevels((arr) => [...arr, ["", LEVEL_MODERATOR]]);
}
function removeLevel(index) {
setLevels(arr => [...arr].splice(index, 1));
setLevels((arr) => [...arr].splice(index, 1));
}
function updateLevelId(index, id) {
const validId = id.replace(/[^0-9]/g, "");
setLevels(arr => {
setLevels((arr) => {
arr[index][0] = validId;
return [...arr];
});
}
function updateLevelLevel(index, level) {
setLevels(arr => {
setLevels((arr) => {
arr[index][1] = parseInt(level, 10);
return [...arr];
});
@ -33,8 +33,8 @@ export function Levels({ levels, setLevels }) {
<div>
{levels.map(([id, level], index) => (
<div key={index}>
<input value={id} onChange={e => updateLevelId(index, e.target.value)} />
<select value={level} onChange={e => updateLevelLevel(index, e.target.value)}>
<input value={id} onChange={(e) => updateLevelId(index, e.target.value)} />
<select value={level} onChange={(e) => updateLevelLevel(index, e.target.value)}>
<option value={LEVEL_ADMIN}>Admin</option>
<option value={LEVEL_MODERATOR}>Moderator</option>
</select>

View file

@ -2,87 +2,86 @@ import React, { SetStateAction, useState } from "react";
import "./LogChannels.css";
const LOG_TYPES = {
"MEMBER_WARN": "Member warned",
"MEMBER_MUTE": "Member muted",
"MEMBER_UNMUTE": "Member unmuted",
"MEMBER_MUTE_EXPIRED": "Mute expired",
"MEMBER_KICK": "Member kicked",
"MEMBER_BAN": "Member banned",
"MEMBER_UNBAN": "Member unbanned",
"MEMBER_FORCEBAN": "Member forcebanned",
"MEMBER_SOFTBAN": "Member softbanned",
"MEMBER_JOIN": "Member joined",
"MEMBER_LEAVE": "Member left",
"MEMBER_ROLE_ADD": "Member, role added",
"MEMBER_ROLE_REMOVE": "Member, role removed",
"MEMBER_NICK_CHANGE": "Member nickname changed",
"MEMBER_USERNAME_CHANGE": "Member username changed",
"MEMBER_RESTORE": "Member roles restored",
"CHANNEL_CREATE": "Channel created",
"CHANNEL_DELETE": "Channel deleted",
"CHANNEL_UPDATE": "Channel updated",
"THREAD_CREATE": "Thread created",
"THREAD_DELETE": "Thread deleted",
"THREAD_UPDATE": "Thread updated",
"ROLE_CREATE": "Role created",
"ROLE_DELETE": "Role deleted",
"ROLE_UPDATE": "Role updated",
"MESSAGE_EDIT": "Message edited",
"MESSAGE_DELETE": "Message deleted",
"MESSAGE_DELETE_BULK": "Messages deleted in bulk",
"MESSAGE_DELETE_BARE": "Message deleted (bare)",
"VOICE_CHANNEL_JOIN": "Voice channel join",
"VOICE_CHANNEL_LEAVE": "Voice channel leave",
"VOICE_CHANNEL_MOVE": "Voice channel move",
"STAGE_INSTANCE_CREATE": "Stage created",
"STAGE_INSTANCE_DELETE": "Stage deleted",
"STAGE_INSTANCE_UPDATE": "Stage updated",
"EMOJI_CREATE": "Emoji created",
"EMOJI_DELETE": "Emoji deleted",
"EMOJI_UPDATE": "Emoji updated",
"STICKER_CREATE": "Sticker created",
"STICKER_DELETE": "Sticker deleted",
"STICKER_UPDATE": "Sticker updated",
"COMMAND": "Command used",
"MESSAGE_SPAM_DETECTED": "Message spam detected",
"CENSOR": "Message censored",
"CLEAN": "Messages cleaned",
"CASE_CREATE": "Case created",
"MASSBAN": "Massbanned",
"MASSMUTE": "Massmuted",
"MEMBER_TIMED_MUTE": "Member temporarily muted",
"MEMBER_TIMED_UNMUTE": "Member, scheduled unmute",
"MEMBER_JOIN_WITH_PRIOR_RECORDS": "Member joined with prior records",
"OTHER_SPAM_DETECTED": "Non-message spam detected",
"MEMBER_ROLE_CHANGES": "Member roles changed",
"VOICE_CHANNEL_FORCE_MOVE": "Force-moved to a voice channel",
"CASE_UPDATE": "Case updated",
"MEMBER_MUTE_REJOIN": "Muted member rejoined",
"SCHEDULED_MESSAGE": "Scheduled message to be posted",
"POSTED_SCHEDULED_MESSAGE": "Posted scheduled message",
"BOT_ALERT": "Bot alert",
"AUTOMOD_ACTION": "Automod action",
"SCHEDULED_REPEATED_MESSAGE": "Scheduled message to be posted repeatedly",
"REPEATED_MESSAGE": "Set a message to be posted repeatedly",
"MESSAGE_DELETE_AUTO": "Message deleted (auto)",
"SET_ANTIRAID_USER": "Set antiraid (user)",
"SET_ANTIRAID_AUTO": "Set antiraid (auto)",
"MASS_ASSIGN_ROLES": "Mass-assigned roles",
"MASS_UNASSIGN_ROLES": "Mass-unassigned roles",
"MEMBER_NOTE": "Member noted",
"CASE_DELETE": "Case deleted",
"DM_FAILED": "Failed to DM member",
MEMBER_WARN: "Member warned",
MEMBER_MUTE: "Member muted",
MEMBER_UNMUTE: "Member unmuted",
MEMBER_MUTE_EXPIRED: "Mute expired",
MEMBER_KICK: "Member kicked",
MEMBER_BAN: "Member banned",
MEMBER_UNBAN: "Member unbanned",
MEMBER_FORCEBAN: "Member forcebanned",
MEMBER_SOFTBAN: "Member softbanned",
MEMBER_JOIN: "Member joined",
MEMBER_LEAVE: "Member left",
MEMBER_ROLE_ADD: "Member, role added",
MEMBER_ROLE_REMOVE: "Member, role removed",
MEMBER_NICK_CHANGE: "Member nickname changed",
MEMBER_USERNAME_CHANGE: "Member username changed",
MEMBER_RESTORE: "Member roles restored",
CHANNEL_CREATE: "Channel created",
CHANNEL_DELETE: "Channel deleted",
CHANNEL_UPDATE: "Channel updated",
THREAD_CREATE: "Thread created",
THREAD_DELETE: "Thread deleted",
THREAD_UPDATE: "Thread updated",
ROLE_CREATE: "Role created",
ROLE_DELETE: "Role deleted",
ROLE_UPDATE: "Role updated",
MESSAGE_EDIT: "Message edited",
MESSAGE_DELETE: "Message deleted",
MESSAGE_DELETE_BULK: "Messages deleted in bulk",
MESSAGE_DELETE_BARE: "Message deleted (bare)",
VOICE_CHANNEL_JOIN: "Voice channel join",
VOICE_CHANNEL_LEAVE: "Voice channel leave",
VOICE_CHANNEL_MOVE: "Voice channel move",
STAGE_INSTANCE_CREATE: "Stage created",
STAGE_INSTANCE_DELETE: "Stage deleted",
STAGE_INSTANCE_UPDATE: "Stage updated",
EMOJI_CREATE: "Emoji created",
EMOJI_DELETE: "Emoji deleted",
EMOJI_UPDATE: "Emoji updated",
STICKER_CREATE: "Sticker created",
STICKER_DELETE: "Sticker deleted",
STICKER_UPDATE: "Sticker updated",
COMMAND: "Command used",
MESSAGE_SPAM_DETECTED: "Message spam detected",
CENSOR: "Message censored",
CLEAN: "Messages cleaned",
CASE_CREATE: "Case created",
MASSBAN: "Massbanned",
MASSMUTE: "Massmuted",
MEMBER_TIMED_MUTE: "Member temporarily muted",
MEMBER_TIMED_UNMUTE: "Member, scheduled unmute",
MEMBER_JOIN_WITH_PRIOR_RECORDS: "Member joined with prior records",
OTHER_SPAM_DETECTED: "Non-message spam detected",
MEMBER_ROLE_CHANGES: "Member roles changed",
VOICE_CHANNEL_FORCE_MOVE: "Force-moved to a voice channel",
CASE_UPDATE: "Case updated",
MEMBER_MUTE_REJOIN: "Muted member rejoined",
SCHEDULED_MESSAGE: "Scheduled message to be posted",
POSTED_SCHEDULED_MESSAGE: "Posted scheduled message",
BOT_ALERT: "Bot alert",
AUTOMOD_ACTION: "Automod action",
SCHEDULED_REPEATED_MESSAGE: "Scheduled message to be posted repeatedly",
REPEATED_MESSAGE: "Set a message to be posted repeatedly",
MESSAGE_DELETE_AUTO: "Message deleted (auto)",
SET_ANTIRAID_USER: "Set antiraid (user)",
SET_ANTIRAID_AUTO: "Set antiraid (auto)",
MASS_ASSIGN_ROLES: "Mass-assigned roles",
MASS_UNASSIGN_ROLES: "Mass-unassigned roles",
MEMBER_NOTE: "Member noted",
CASE_DELETE: "Case deleted",
DM_FAILED: "Failed to DM member",
};
const sortedLogTypes = Object.fromEntries(
Object.entries(LOG_TYPES)
.sort((a, b) => {
if (a[1].toLowerCase() > b[1].toLowerCase()) return 1;
if (a[1].toLowerCase() < b[1].toLowerCase()) return -1;
if (a[0].toLowerCase() > b[0].toLowerCase()) return 1;
if (a[0].toLowerCase() < b[0].toLowerCase()) return -1;
return 0;
})
Object.entries(LOG_TYPES).sort((a, b) => {
if (a[1].toLowerCase() > b[1].toLowerCase()) return 1;
if (a[1].toLowerCase() < b[1].toLowerCase()) return -1;
if (a[0].toLowerCase() > b[0].toLowerCase()) return 1;
if (a[0].toLowerCase() < b[0].toLowerCase()) return -1;
return 0;
}),
) as typeof LOG_TYPES;
type LOG_TYPE = keyof typeof LOG_TYPES;
@ -100,18 +99,21 @@ interface Props {
export function LogChannels({ logChannels, setLogChannels }: Props) {
function addLogChannel(props: Partial<LogChannel> = {}) {
setLogChannels(_logChannels => {
return [..._logChannels, {
id: "",
includeExclude: "include",
logTypes: new Set(),
...props,
}];
setLogChannels((_logChannels) => {
return [
..._logChannels,
{
id: "",
includeExclude: "include",
logTypes: new Set(),
...props,
},
];
});
}
function deleteLogChannel(index) {
setLogChannels(_logChannels => {
setLogChannels((_logChannels) => {
const newArr = [..._logChannels];
newArr.splice(index, 1);
return newArr;
@ -119,7 +121,7 @@ export function LogChannels({ logChannels, setLogChannels }: Props) {
}
function addReverseLogChannel() {
const includedLogTypesInOtherLogChannels = new Set(logChannels.map(l => Array.from(l.logTypes)).flat());
const includedLogTypesInOtherLogChannels = new Set(logChannels.map((l) => Array.from(l.logTypes)).flat());
addLogChannel({
includeExclude: "exclude",
logTypes: includedLogTypesInOtherLogChannels,
@ -127,21 +129,21 @@ export function LogChannels({ logChannels, setLogChannels }: Props) {
}
function setId(index: number, id: string) {
setLogChannels(_logChannels => {
setLogChannels((_logChannels) => {
_logChannels[index].id = id;
return [..._logChannels];
});
}
function setIncludeExclude(index: number, includeExclude: LogChannel["includeExclude"]) {
setLogChannels(_logChannels => {
setLogChannels((_logChannels) => {
_logChannels[index].includeExclude = includeExclude;
return [..._logChannels];
});
}
function toggleLogType(index: number, logType: LOG_TYPE, enabled: boolean) {
setLogChannels(_logChannels => {
setLogChannels((_logChannels) => {
if (enabled) {
_logChannels[index].logTypes.add(logType);
} else {
@ -157,11 +159,14 @@ export function LogChannels({ logChannels, setLogChannels }: Props) {
{logChannels.map((logChannel, index) => (
<div className="log-channel">
<label>
ID: <input value={logChannel.id} onChange={e => setId(index, e.target.value)} />
ID: <input value={logChannel.id} onChange={(e) => setId(index, e.target.value)} />
</label>
<label>
Mode:
<select value={logChannel.includeExclude} onChange={e => setIncludeExclude(index, e.target.value as LogChannel["includeExclude"])}>
<select
value={logChannel.includeExclude}
onChange={(e) => setIncludeExclude(index, e.target.value as LogChannel["includeExclude"])}
>
<option value={"include"}>Include</option>
<option value={"exclude"}>Exclude</option>
</select>
@ -172,7 +177,7 @@ export function LogChannels({ logChannels, setLogChannels }: Props) {
<input
type="checkbox"
checked={logChannel.logTypes.has(logType as LOG_TYPE)}
onChange={e => toggleLogType(index, logType as LOG_TYPE, e.target.checked)}
onChange={(e) => toggleLogType(index, logType as LOG_TYPE, e.target.checked)}
/>
{description}
</label>

View file

@ -1,14 +1,16 @@
<!doctype html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="./index.js"></script>
</body>
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
/>
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="./index.js"></script>
</body>
</html>

View file

@ -7,7 +7,7 @@ ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
document.getElementById("root"),
);
if ((import.meta as any).hot) {