import React, { SetStateAction, useState } from "react"; import "./LogChannels.css"; const LOG_TYPES = { "MEMBER_WARN": "Warned", "MEMBER_MUTE": "Muted", "MEMBER_UNMUTE": "Unmuted", "MEMBER_MUTE_EXPIRED": "Mute expired", "MEMBER_KICK": "Kicked", "MEMBER_BAN": "Banned", "MEMBER_UNBAN": "Unbanned", "MEMBER_FORCEBAN": "Forcebanned", "MEMBER_SOFTBAN": "Softbanned", "MEMBER_JOIN": "Member joined", "MEMBER_LEAVE": "Member left", "MEMBER_ROLE_ADD": "Role added to member", "MEMBER_ROLE_REMOVE": "Role removed from member", "MEMBER_NICK_CHANGE": "Nickname changed", "MEMBER_USERNAME_CHANGE": "Username changed", "MEMBER_RESTORE": "Member roles restored", "CHANNEL_CREATE": "Channel created", "CHANNEL_DELETE": "Channel deleted", "ROLE_CREATE": "Role created", "ROLE_DELETE": "Role deleted", "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", "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": "Temporarily muted", "MEMBER_TIMED_UNMUTE": "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": "Added note on member", "CASE_DELETE": "Case deleted", "DM_FAILED": "Failed to DM member", }; type LOG_TYPE = keyof typeof LOG_TYPES; export interface LogChannel { id: string; includeExclude: "include" | "exclude"; logTypes: Set; } interface Props { logChannels: LogChannel[]; setLogChannels: React.Dispatch>; } export function LogChannels({ logChannels, setLogChannels }: Props) { function addLogChannel() { setLogChannels(_logChannels => { return [..._logChannels, { id: "", includeExclude: "include", logTypes: new Set(), }]; }); } function deleteLogChannel(index) { setLogChannels(_logChannels => { const newArr = [..._logChannels]; newArr.splice(index, 1); return newArr; }); } function setId(index: number, id: string) { setLogChannels(_logChannels => { _logChannels[index].id = id; return [..._logChannels]; }); } function setIncludeExclude(index: number, includeExclude: LogChannel["includeExclude"]) { setLogChannels(_logChannels => { _logChannels[index].includeExclude = includeExclude; return [..._logChannels]; }); } function toggleLogType(index: number, logType: LOG_TYPE, enabled: boolean) { setLogChannels(_logChannels => { if (enabled) { _logChannels[index].logTypes.add(logType); } else { _logChannels[index].logTypes.delete(logType); } return [..._logChannels]; }); } return (
{logChannels.map((logChannel, index) => (
{Object.entries(LOG_TYPES).map(([logType, description]) => ( ))}
))}
); }