diff --git a/.gitignore b/.gitignore
index 92bf048..3cecfb4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,7 @@
 
 .direnv
 out.json
-
+etc
 
 # Logs
 
diff --git a/index.ts b/index.ts
index 09fbb19..85ef717 100644
--- a/index.ts
+++ b/index.ts
@@ -1,8 +1,7 @@
-import { ChannelType, Client, Collection, Guild, GuildChannel, GuildEmoji, GuildInvitableChannelResolvable, IntentsBitField } from 'discord.js';
+import { ChannelType, Client, Collection, Guild, GuildEmoji, GuildInvitableChannelResolvable, IntentsBitField } from 'discord.js';
 import { writeFileSync, readdirSync, readFileSync } from 'fs'
 
 
-
 async function uploadEmoji(guild: Guild, toUpload: {name: string, attachment: Buffer}): Promise<GuildEmoji> {
     const emoji = await guild.emojis.create(toUpload)
 
@@ -36,6 +35,13 @@
 
 client.on('warn', (m) => console.warn(m));
 client.on('error', (m) => console.error(m.message));
+client.rest.on("rateLimited", rateLimitData => {
+    console.table({
+        Global: rateLimitData.global,
+        Limit: rateLimitData.limit,
+        TimeToRetry: `${Math.floor((rateLimitData.retryAfter / 1000) / 60)}M ${Math.floor((rateLimitData.retryAfter / 1000) % 60)}S`
+    });
+});
 
 client.once('ready', async (client) => {
     if (!process.env.EMOJI_DIR) throw new Error("Missing Emoji Directory");
@@ -51,7 +57,7 @@
     const guilds = await propogateGuilds(client);
     console.log('Fetched Guilds');
 
-    for (const [_id, guild] of guilds) {
+    for (const [_gid, guild] of guilds) {
         if (guild.invites.cache.size > 0) {
             console.log(`${guild.name}: ${guild.invites.cache.first()?.url}`);
         } else {
@@ -63,7 +69,7 @@
             console.log(`${guild.name}: ${invite.url}`);
         }
 
-        for (const [_, emoji] of guild.emojis.cache) {
+        for (const [_eid, emoji] of guild.emojis.cache) {
             console.log(`Deleting ${emoji.name}`)
             await emoji.delete();
         }
@@ -75,9 +81,15 @@
             let attachment = readFileSync(`${process.env.EMOJI_DIR}/${emoji.name}`);
             let longName = emoji.name.split('.')[0].split('_').pop()?.replaceAll(/\-/g, "_");
             let name = (longName ?? "_").substring(0, Math.min((longName ?? "_").length, 32));
-            const outEmoji = await uploadEmoji(guild, {name, attachment});
-            console.log(`${name}: ${outEmoji.id}`)
-            emojis.set(name, outEmoji.id);
+            let i = 1;
+            while (emojis.get(name)) {
+                name = name.substring(0,-(i.toString().length)) + i
+                i++
+            }
+            console.log(name)
+            // const outEmoji = await uploadEmoji(guild, {name, attachment});
+            // console.log(`${name}: ${outEmoji.id}`)
+            // emojis.set(name, outEmoji.id);
 
             emojiCount--;
             currentEmojiIndex++;
