diff --git a/src/automations/createModActionTicket.ts b/src/automations/createModActionTicket.ts
index a4d549c..4de2924 100644
--- a/src/automations/createModActionTicket.ts
+++ b/src/automations/createModActionTicket.ts
@@ -1,6 +1,7 @@
-import Discord from 'discord.js';
+import Discord, { MessageActionRow, MessageButton } from 'discord.js';
 import readConfig from '../utils/readConfig.js'
-import generateEmojiEmbed from '../utils/generateEmojiEmbed.js'
+import generateEmojiEmbed from '../utils/generateEmojiEmbed.js';
+import getEmojiByName from "../utils/getEmojiByName.js";
 
 export async function create(guild: Discord.Guild, member: Discord.User, client) {
     let config = await readConfig(guild.id);
@@ -52,7 +53,12 @@
             )
             .setStatus("Success")
             .setEmoji("GUILD.TICKET.OPEN")
-        ]})
+        ], components: [new MessageActionRow().addComponents([new MessageButton()
+            .setLabel("Close")
+            .setStyle("DANGER")
+            .setCustomId("closeticket")
+            .setEmoji(getEmojiByName("CONTROL.CROSS", "id"))
+        ])]})
         let data = {
             meta:{
                 type: 'ticketCreate',
diff --git a/src/automations/guide.ts b/src/automations/guide.ts
index 66c9eb0..e3cfa25 100644
--- a/src/automations/guide.ts
+++ b/src/automations/guide.ts
@@ -3,8 +3,8 @@
 import getEmojiByName from "../utils/getEmojiByName.js";
 
 export default async (guild, interaction?) => {
-	let c = guild.publicUpdatesChannel ? guild.publicUpdatesChannel : guild.systemChannel;
-	c = c ? c : guild.channels.cache.find(ch => ch.type === "GUILD_TEXT" && ch.permissionsFor(guild.roles.everyone).has("SEND_MESSAGES") && ch.permissionsFor(guild.me).has("EMBED_LINKS"));
+    let c = guild.publicUpdatesChannel ? guild.publicUpdatesChannel : guild.systemChannel;
+    c = c ? c : guild.channels.cache.find(ch => ch.type === "GUILD_TEXT" && ch.permissionsFor(guild.roles.everyone).has("SEND_MESSAGES") && ch.permissionsFor(guild.me).has("EMBED_LINKS"));
     let pages = [
         new generateEmojiEmbed()
             .setTitle("Welcome to Nucleus")
@@ -73,7 +73,7 @@
             .setEmoji("NUCLEUS.LOGO")
             .setStatus("Danger")
     ]
-	let m;
+    let m;
     if (interaction) {
         m = await interaction.reply({embeds: [
             new generateEmojiEmbed()
@@ -90,7 +90,7 @@
                 .setStatus("Danger")
                 .setEmoji("NUCLEUS.LOADING")
         ], fetchReply: true });
-	}
+    }
     let page = 0;
 
     let f = async (component) => {
diff --git a/src/automations/roleMenu.ts b/src/automations/roleMenu.ts
index 2412c70..c7073c5 100644
--- a/src/automations/roleMenu.ts
+++ b/src/automations/roleMenu.ts
@@ -58,7 +58,7 @@
                 new MessageButton()
                     .setLabel("Online")
                     .setStyle("LINK")
-                    .setURL(`https://clicksminuteper.net/nuclues/rolemenu?code=${code}`),
+                    .setURL(`https://clicks.codes/nuclues/rolemenu?code=${code}`),
                 new MessageButton()
                     .setLabel("Manual")
                     .setStyle("PRIMARY")
diff --git a/src/automations/unscan.ts b/src/automations/unscan.ts
index 743374b..b5c5ffb 100644
--- a/src/automations/unscan.ts
+++ b/src/automations/unscan.ts
@@ -40,11 +40,11 @@
 export async function SizeCheck(element): Promise<boolean> {
     if (element.height == undefined || element.width == undefined) return true
     if (element.height < 20 || element.width < 20) return false
-	return true
+    return true
 }
 
 export async function MalwareCheck(element): Promise<boolean> {
-	try {
+    try {
         //@ts-ignore
         return (await scan.testMalware(element)).safe
     } catch {
diff --git a/src/automations/verify.ts b/src/automations/verify.ts
index 80087a4..a60ed07 100644
--- a/src/automations/verify.ts
+++ b/src/automations/verify.ts
@@ -28,7 +28,7 @@
         .setEmoji("NUCLEUS.LOADING")
     ]});
     try {
-        let status = await fetch(`https://clicksminuteper.net`).then(res => res.status);
+        let status = await fetch(`https://clicks.codes`).then(res => res.status);
         if (status != 200) {
             return await interaction.editReply({embeds: [new generateEmojiEmbed()
                 .setTitle("Verify")
@@ -45,9 +45,9 @@
             .setEmoji("CONTROL.BLOCKCROSS")
         ], components: [new Discord.MessageActionRow().addComponents([
             new Discord.MessageButton()
-                .setLabel("Open webpage")
+                .setLabel("Check webpage")
                 .setStyle("LINK")
-                .setURL("https://clicksminuteper.net/"),
+                .setURL("https://clicks.codes/"),
             new Discord.MessageButton()
                 .setLabel("Support")
                 .setStyle("LINK")
@@ -111,10 +111,12 @@
     verify[code] = {
         uID: interaction.member.user.id,
         gID: interaction.guild.id,
+        rID: config.verify.role,
         rName: (await interaction.guild.roles.fetch(config.verify.role)).name,
         mCount: interaction.guild.memberCount,
         gName: interaction.guild.name,
-        guildIcon: interaction.guild.iconURL({format: "png"})
+        gIcon: interaction.guild.iconURL({format: "png"}),
+        interaction: interaction
     }
     await interaction.editReply({embeds: [new generateEmojiEmbed()
         .setTitle("Verify")
@@ -124,6 +126,7 @@
     ], components: [new Discord.MessageActionRow().addComponents([new Discord.MessageButton()
         .setLabel("Verify")
         .setStyle("LINK")
-        .setURL(`https://clicksminuteper.net/nucleus/verify?code=${code}`)
+        // .setURL(`https://clicks.codes/nucleus/verify?code=${code}`)
+        .setURL(`https://insulation-coin-hoping-nevertheless.trycloudflare.com/nucleus/verify?code=${code}`)
     ])]});
-}
\ No newline at end of file
+}
diff --git a/src/automations/welcome.ts b/src/automations/welcome.ts
index 09e03d3..84a87ec 100644
--- a/src/automations/welcome.ts
+++ b/src/automations/welcome.ts
@@ -3,7 +3,7 @@
 import convertCurlyBracketString from '../utils/convertCurlyBracketString.js'
 
 export async function callback(_, member) {
-	if (member.bot) return
+    if (member.bot) return
     let config = await readConfig(member.guild.id);
     if (!config.welcome.enabled) return
 
