added migration
diff --git a/.gitignore b/.gitignore
index 6deb598..d73f2ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
 !src/config/format.ts
 !src/config/default.ts
 !src/config/emojis.json
+src/utils/migration/data
 src/config/main.ts
 .vscode/
 .vim/
diff --git a/src/utils/migration/migration.ts b/src/utils/migration/migration.ts
index ad2927b..1edc068 100644
--- a/src/utils/migration/migration.ts
+++ b/src/utils/migration/migration.ts
@@ -1,10 +1,77 @@
 import * as fs from 'fs';
+import client from "../client.js";
+import _ from "lodash";
 
 const dir = './data';
 const files = fs.readdirSync(dir);
 
 for (const file of files) {
-    const rsmData = fs.readFileSync(`${dir}/${file}`, 'utf8');
-    const nucleusData = ""
-
+    let rsmData;
+    try {
+        rsmData = JSON.parse(fs.readFileSync(`${dir}/${file}`, 'utf8'));
+    } catch { continue }
+    if (!rsmData.version || rsmData.version < 3) continue;
+    const nucleusData = await client.database.guilds.read(rsmData.guild_info.id)
+    const rsmToNucleus = {
+        id: rsmData.guild_info.id,
+        version: 1,
+        singleEventNotifications: {},
+        filters: {
+            images: {
+                NSFW: rsmData.images?.nsfw,
+                size: rsmData.images?.toosmall,
+            },
+            malware: null,
+            wordFilter: {
+                enabled: true,
+                words: {
+                    strict: rsmData.wordfilter?.strict,
+                    loose: rsmData.wordfilter?.soft,
+                },
+                allowed: {
+                    users: rsmData.wordfilter?.ignore?.members,
+                    roles: rsmData.wordfilter?.ignore?.roles,
+                    channels: rsmData.wordfilter?.ignore?.channels,
+                },
+            },
+            invite: {
+                enabled: rsmData.invite?.enabled,
+                allowed: {
+                    channels: rsmData.invite?.whitelist?.members,
+                    roles: rsmData.invite?.whitelist?.roles,
+                    users: rsmData.invite?.whitelist?.channels,
+                },
+            }
+        },
+        welcome: {
+            enabled: true,
+            role: rsmData.welcome?.role,
+            channel: rsmData.welcome?.message?.channel,
+            message: rsmData.welcome?.message?.text ?? null,
+        },
+        logging: {
+            logs: {
+                enabled: true,
+                channel: rsmData.log_info?.log_channel,
+            },
+            staff: {
+                channel: rsmData.log_info?.staff,
+            }
+        },
+        verify: {
+            enabled: true,
+            role: rsmData.verify_role,
+        },
+        tickets: {
+            enabled: true,
+            category: rsmData.modmail?.cat,
+            supportRole: rsmData.modmail?.mention,
+            maxTickets: rsmData.modmail?.max,
+        },
+        tags: rsmData.tags
+    } as Partial<ReturnType<typeof client.database.guilds.read>>;
+    // console.log(rsmToNucleus)
+    const merged = _.merge(nucleusData, rsmToNucleus);
+    // console.log(merged)
+    
 }