diff --git a/src/components/PluginSettings/components/SettingArrayComponent.tsx b/src/components/PluginSettings/components/SettingArrayComponent.tsx index 058d6d731..6690ed781 100644 --- a/src/components/PluginSettings/components/SettingArrayComponent.tsx +++ b/src/components/PluginSettings/components/SettingArrayComponent.tsx @@ -68,9 +68,26 @@ export function SettingArrayComponent({ id }: ISettingElementProps) { const [error, setError] = useState(null); - const [items, setItems] = useState(pluginSettings[id] || []); + const [items, setItems] = useState(ensureSettingsMigrated() || []); const [text, setText] = useState(""); + function ensureSettingsMigrated(): string[] | undefined { + // in case the settings get manually overridden without a restart of Vencord itself this will prevent crashing + if (pluginSettings[id] == null || Array.isArray(pluginSettings[id])) { + return pluginSettings[id]; + } + let migrated: string[]; + if (typeof option.oldStringSeparator === "string" || option.oldStringSeparator instanceof RegExp) { + migrated = pluginSettings[id]?.split(option.oldStringSeparator); + } else if (typeof option.oldStringSeparator === "function") { + migrated = option.oldStringSeparator(pluginSettings[id]); + } else { + throw new Error(`Invalid oldStringSeparator for in setting ${id} for plugin ${definedSettings?.pluginName || "Unknown plugin"}`); + } + onChange(migrated); + return migrated; + } + useEffect(() => { if (text === "") { setError(null);