mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
Reformat all files with Prettier
This commit is contained in:
parent
0cde0d46d2
commit
ac79eb09f5
206 changed files with 727 additions and 888 deletions
|
@ -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>;
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
.Configurator {
|
||||
|
||||
}
|
||||
|
||||
.Configurator .options {
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -7,7 +7,7 @@ ReactDOM.render(
|
|||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>,
|
||||
document.getElementById("root")
|
||||
document.getElementById("root"),
|
||||
);
|
||||
|
||||
if ((import.meta as any).hot) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue