nyx

The first CODM discrod bot -- cath.exe Template
git clone https://codeberg.org/night0721/nyx
Log | Files | Refs | LICENSE

commit a1efe586216a6f32c4d546f400f64f062e847c5b
parent a84539f12cf014aa9c5e87a4f8de609ab0f46615
Author: night0721 <[email protected]>
Date:   Sun, 20 Mar 2022 00:45:19 +0800

added sensitivity command and added now scam links

Diffstat:
DAPEX/apex.json | 50--------------------------------------------------
DCODM/stats.js | 270-------------------------------------------------------------------------------
Mcommand/APEX/sens.js | 6+++---
Mcommand/Information/avatar.js | 2+-
Mcommand/Information/botinfo.js | 4++--
Mcommand/Information/help.js | 8++++----
Adata/APEX/apex.json | 50++++++++++++++++++++++++++++++++++++++++++++++++++
RCODM/loadout.js -> data/CODM/loadout.js | 0
RCODM/new-stats.js -> data/CODM/new-stats.js | 0
Adata/CODM/stats.js | 297+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mevents/interactionCreate.js | 17+++++++++--------
Mindex.js | 3++-
Mutil/Data/domains.json | 2++
13 files changed, 370 insertions(+), 339 deletions(-)

diff --git a/APEX/apex.json b/APEX/apex.json @@ -1,49 +0,0 @@ -{ - "legends": [ - "Bangalore", - "Bloodhound", - "Caustic", - "Crypto", - "Fuse", - "Gibraltar", - "Horizon", - "LIfeline", - "Loba", - "Mirage", - "Octane", - "Pathfinder", - "Rampart", - "Revenant", - "Valkyrie", - "Watton", - "Wraith" - ], - "guns": [ - "Bocek Bow", - "EVA-8", - "Kraber", - "Peacekeeper", - "Prowler", - "R-301 Carbine", - "R-99", - "Spitfire", - "Charge Rifle", - "Flatline", - "G7 Scout", - "Havoc", - "Mastiff", - "Sentinel", - "Triple Take", - "Volt", - "Wingman", - "Alternator", - "Devotion", - "Hemlok", - "Longbow", - "L-Star", - "RE-45", - "30-30 Repeater", - "Mozambique", - "P2020" - ] -} -\ No newline at end of file diff --git a/CODM/stats.js b/CODM/stats.js @@ -1,270 +0,0 @@ -const common = require("../util/functions/common"); -const data = require("../util/Data/data.json"); -const Discord = require("discord.js"); - -let currGun, - currStats, - currAttachments, - currRecoilArr, - currDRM, - interpretion, - recoilAvailable, - chart, - hasError; -const errMsg = "*Generic placeholder error message*"; -module.exports = { - name: "stats", - description: "Check gun stats", - usage: "(Gun)", - category: "CODM", - /** - * @param {Client} client - * @param {Message} message - * @param {String[]} args - */ - run: async (client, message, args) => { - recoilAvailable = false; - hasError = false; - const repEmb = statsHandler(args.join(" ").replace("\n", " ")); - - if (hasError) { - message.reply({ embeds: [repEmb] }); - } - if (recoilAvailable) { - repEmb.fields.push({ - name: "**Recoil Graph**", - value: - "```\nThe Recoil graph below is dynamic (change based on attachment equipped)```", - }); - const recoilImageLink = await chart.getShortUrl(); - repEmb.image = { url: recoilImageLink }; - } - message.reply({ embeds: [repEmb] }); - }, -}; - -function inpHandler(inpmsg) { - statsHandler(inpmsg.split("+")[0]); -} - -function statsHandler(inpmsg) { - let statsNames = [ - "Pellets", - "Detonation Range", - "Explosion Radius", - "Explosion Damage", - "Firing Mode", - "Rate of Fire", - "Bullet in Burst", - "Time Between Burst", - "Bullet Speed", - "Penetration Level", - "Bullet Spread", - "Idle Sway", - "Hipfire Pellet Spread", - "ADS Pellet Spread", - "ADS Time", - "Sprint-to-Fire Time", - "ADS Zoom", - "Magazine", - "Reserve", - "Reload Type", - "Cancel Reload Time", - "Reload Time", - "Full Reload Time", - "Drop Time", - "Raise Time", - "Sprinting Speed", - "Walking Speed", - "Straifing Speed", - "Damage per Tick", - "Number of Ticks", - "Time Between Ticks", - "Breath Hold Time", - "shouldNeverHappen0", - "shouldNeverHappen1", - "shouldNeverHappen2", - "shouldNeverHappen3", - "shouldNeverHappen4", - ], - out = []; - - currGun = common.weaponIdentifier(inpmsg); - if (typeof currGun == "string") { - hasError = true; - return currGun; - } - currStats = currGun.stats; - currDRM = currGun.drm[0]; - currAttachments = []; - currAttachments = common.attachmentsIdentifier(inpmsg, currGun); - if (typeof currAttachments == "string") { - hasError = true; - return currAttachments; - } - currRecoilArr = [1, 1, currGun.stats[17]]; - if (currAttachments.length != 0) { - const totalEffects = common.totaler(currAttachments); - - currStats = common.updateStatswithEffects(totalEffects, currStats); - currRecoilArr = [totalEffects[2], totalEffects[3], currGun.stats[17]]; // must happen after currStats update - currDRM = currGun.drm[totalEffects[37]]; - currDRM.range = currDRM.range.map(x => - Math.round(x * (1 + totalEffects[13] / 100)) - ); - out = common.attachmentHandler(totalEffects, currStats); - } - function statsWorker() { - if (currStats[19] === 2) { - currStats[21] = - currStats[20] + currStats[21] * currStats[17] + currStats[22]; - currStats[20] = 0; - currStats[22] = 0; - } - currStats[25] = (currStats[25] * currStats[26]) / 100; - - const outReady = currStats.map((x, i) => - x ? statsNames[i].padEnd(24) + ":".padEnd(3) + beautifier(i) : "" - ); - out = [ - ...[ - "Basic Stats", - "ADS Stats", - "Bullet Stats", - "Magazine", - "Handling Stats", - "Mobility Stats", - "Miscellaneous Stats", - ].map((x, i) => - fieldMaker( - x, - [ - [04, 05, 09], - [14, 16, 11, 31], - [00, 06, 07, 08, 10, 12, 13], - [17, 18, 19, 20, 21, 22], - [23, 24], - [25, 26, 27, 15], - [28, 29, 30, 01, 02, 03], - ][i] - ) - ), - ...out, - ]; - function fieldMaker(inpName, inpIndx) { - inpIndx = inpIndx.filter(x => outReady[x]); - return inpIndx.length - ? { - name: "**" + inpName + "**", - value: "```\n" + inpIndx.map(x => outReady[x]).join("\n") + "```", - } - : ""; - } - } - statsWorker(); - - function beautifier(j) { - switch (j) { - case 04: - return data.firingModes[currStats[j] - 1]; - case 09: - return data.penetrationLevels[currStats[j] - 1]; - case 19: - return data.reloadTypes[currStats[j] - 1]; - case 08: - if (currStats[j] == -1) { - return "Infinity"; - } else { - return parseFloat(currStats[j].toFixed(2)).toString() + " m/s"; - } - case 03: - return parseFloat(currStats[j].toFixed(2)) - .toString() - .replace(".", " ~ "); - default: - return parseFloat(currStats[j].toFixed(2)).toString() + addUnit(j); - } - - function addUnit(j) { - switch (j) { - case 07: - case 14: - case 15: - case 23: - case 24: - case 31: - return " ms"; - case 27: - case 28: - case 25: - case 26: - return " m/s"; - case 20: - case 21: - case 22: - return " s"; - case 16: - return "%"; - case 06: - return " Rounds"; - case 05: - return " RPM"; - default: - return ""; - } - } - } - interpretion = currGun.gunname + common.interpretioner(currAttachments); - if (currGun.recoil.hr.length > 2) { - chart = common.recoilHandler( - currGun.recoil.hr, - currGun.recoil.vr, - currRecoilArr[0], - currRecoilArr[1], - currRecoilArr[2] - ); - recoilAvailable = true; - } else { - recoilAvailable = false; - } - if (chart == "none") { - recoilAvailable = false; - } - if (chart == "err" || currAttachments == "err") { - hasError = true; - return "Cocaineeee"; - } - const dmg = - common.damageHandler( - currDRM.damage, - currDRM.range, - 1, - 100, - 60000 / currStats[5], - currStats[7], - currStats[6], - currStats[0] - ) || "```This should never happen```"; - out = [ - currGun.description - ? { - name: "**Description:**", - value: "```\n" + currGun.description + "```", - } - : {}, - { name: "**Damage Profile:**", value: dmg }, - ...out, - ]; - out = out.filter(x => x.value); - return { - title: interpretion, - color: 5814783, - fields: out, - footer: { - text: "All data courtesy of Project Lighthouse and CoDM Research Crew", - icon_url: - "https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638", - }, - }; -} -// console.log(statsHandler("Holger").fields); diff --git a/command/APEX/sens.js b/command/APEX/sens.js @@ -1,9 +1,9 @@ const { MessageEmbed } = require("discord.js"); module.exports = { - name: "class", + name: "sensitivity", description: "Get the perfect sensitivity for APEXM", category: "APEX", - usage: "[Ironsight Sensitivity ]", + usage: "[Ironsight Sensitivity]", type: "CHAT_INPUT", options: [ { @@ -18,7 +18,7 @@ module.exports = { const embed = new MessageEmbed() .setTitle(`The base sensitivity (ironsight or 1x Scope): ${args[0]}`) .setDescription( - `<:nyx_description:897379659665264650> [Video guide](https://rebrand.ly/apexm-sens) by HawksNest on how to set your sensitivity. + `<:nyx_description:897379659665264650> [Video guide](https://rebrand.ly/apexm-sens) by HawksNest on how to set your sensitivity. \n**Basic Sensitivity** \`\`\` \nTPP without ADS ${args[0] * 2.09} \nFPP without ADS ${args[0] * 1.29} diff --git a/command/Information/avatar.js b/command/Information/avatar.js @@ -18,7 +18,7 @@ module.exports = { interaction.guild.members.cache.get(args[0]) || interaction.member; const embed = new MessageEmbed() .setAuthor({ - text: member.user.tag, + name: member.user.tag, iconURL: member.user.displayAvatarURL({ dynamic: true, size: 1024 }), }) .setColor(client.color) diff --git a/command/Information/botinfo.js b/command/Information/botinfo.js @@ -1,5 +1,5 @@ const { MessageEmbed, version: djsversion } = require("discord.js"); -const version = require("../../../package.json").version; +const version = require("../../package.json").version; const { utc } = require("moment"); module.exports = { name: "botinfo", @@ -36,7 +36,7 @@ module.exports = { .reduce((a, b) => a + b.memberCount, 0) .toLocaleString()} Channels ❯ \`${client.channels.cache.size.toLocaleString()}\` - Commands ❯ \`${client.commands.size}\` + Commands ❯ \`${client.slashCommands.size}\` `, inline: true, } diff --git a/command/Information/help.js b/command/Information/help.js @@ -80,10 +80,10 @@ module.exports = { .setThumbnail( "https://media.discordapp.net/attachments/896078559293104128/896392631565828146/nyx_logo_transparent.webp" ) - .setFooter( - `Requested by ${interaction.user.tag}`, - interaction.user.displayAvatarURL({ dynamic: true }) - ); + .setFooter({ + text: `Requested by ${interaction.user.tag}`, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }), + }); const components = state => [ new Discord.MessageActionRow().addComponents( new Discord.MessageSelectMenu() diff --git a/data/APEX/apex.json b/data/APEX/apex.json @@ -0,0 +1,49 @@ +{ + "legends": [ + "Bangalore", + "Bloodhound", + "Caustic", + "Crypto", + "Fuse", + "Gibraltar", + "Horizon", + "LIfeline", + "Loba", + "Mirage", + "Octane", + "Pathfinder", + "Rampart", + "Revenant", + "Valkyrie", + "Watton", + "Wraith" + ], + "guns": [ + "Bocek Bow", + "EVA-8", + "Kraber", + "Peacekeeper", + "Prowler", + "R-301 Carbine", + "R-99", + "Spitfire", + "Charge Rifle", + "Flatline", + "G7 Scout", + "Havoc", + "Mastiff", + "Sentinel", + "Triple Take", + "Volt", + "Wingman", + "Alternator", + "Devotion", + "Hemlok", + "Longbow", + "L-Star", + "RE-45", + "30-30 Repeater", + "Mozambique", + "P2020" + ] +} +\ No newline at end of file diff --git a/CODM/loadout.js b/data/CODM/loadout.js diff --git a/CODM/new-stats.js b/data/CODM/new-stats.js diff --git a/data/CODM/stats.js b/data/CODM/stats.js @@ -0,0 +1,297 @@ +const common = require("../../util/functions/common"); +const data = require("../../util/Data/data.json"); +const { MessageEmbed } = require("discord.js"); + +let currGun, + currStats, + currAttachments, + currRecoilArr, + currDRM, + interpretion, + recoilAvailable, + chart, + hasError; +module.exports = { + name: "stats", + description: "Check gun statistics", + usage: "(Gun)", + category: "CODM", + options: [ + { + type: 3, + name: "gun_name", + description: "Name of the gun", + required: true, + choices: [], + }, + { + type: 3, + name: "1st_attchment", + description: "First attachment", + }, + { + type: 3, + name: "2nd_attchment", + description: "Second attachment", + }, + { + type: 3, + name: "3rd_attchment", + description: "Third attachment", + }, + { + type: 3, + name: "4th_attchment", + description: "Forth attachment", + }, + { + type: 3, + name: "5th_attchment", + description: "Fifth attachment", + }, + ], + run: async (client, interaction, args) => { + repEmb = null; + recoilAvailable = false; + hasError = false; + if (args.length == 1) + repEmb = statsHandler(args.join(" ").replace("\n", " ")); + else repEmb = statsHandler(args.join(" + ").replace("\n", " ")); + if (hasError) { + interaction.followUp({ + content: `**${repEmb || "An error has occured"}**`, + }); + } else { + if (recoilAvailable) { + repEmb.fields.push({ + name: "**Recoil Graph**", + value: + "```\nThe Recoil graph below is dynamic (change based on attachment equipped)```", + }); + const recoilImageLink = await chart.getShortUrl(); + repEmb.image = { url: recoilImageLink }; + } + interaction.followUp({ embeds: [new MessageEmbed(repEmb)] }); + } + }, +}; + +function inpHandler(inpmsg) { + statsHandler(inpmsg.split("+")[0]); +} + +function statsHandler(inpmsg) { + let statsNames = [ + "Pellets", //0 + "Detonation Range", //1 + "Explosion Radius", //2 + "Explosion Damage", //3 + "Firing Mode", //4 + "Rate of Fire", //5 + "Bullet in Burst", //6 + "Time Between Burst", //7 + "Bullet Speed", //8 + "Penetration Level", //9 + "Bullet Spread", //10 + "Idle Sway", //11 + "Hipfire Pellet Spread", //12 + "ADS Pellet Spread", //13 + "ADS Time", //14 + "Sprint-to-Fire Time", //15 + "ADS Zoom", //16 + "Magazine", //17 + "Reserve", //18 + "Reload Type", //19 + "Cancel Reload Time", //20 + "Reload Time", //21 + "Full Reload Time", //22 + "Drop Time", //23 + "Raise Time", //24 + "Sprinting Speed", //25 + "Walking Speed", //26 + "Straifing Speed", //27 + "Damage per Tick", //28 + "Number of Ticks", //29 + "Time Between Ticks", //30 + "Breath Hold Time", //31 + "shouldNeverHappen0", + "shouldNeverHappen1", + "shouldNeverHappen2", + "shouldNeverHappen3", + "shouldNeverHappen4", + ], + out = []; + + currGun = common.weaponIdentifier(inpmsg); + if (typeof currGun == "string") { + hasError = true; + return currGun; + } + currStats = currGun.stats; + currDRM = currGun.drm[0]; // base mag. currGun.drm[1] for more vairents + currAttachments = []; + currAttachments = common.attachmentsIdentifier(inpmsg, currGun); + if (typeof currAttachments == "string") { + hasError = true; + return currAttachments; + } + currRecoilArr = [1, 1, currGun.stats[17]]; + if (currAttachments.length != 0) { + const totalEffects = common.totaler(currAttachments); + + currStats = common.updateStatswithEffects(totalEffects, currStats); + currRecoilArr = [totalEffects[2], totalEffects[3], currGun.stats[17]]; // must happen after currStats update + currDRM = currGun.drm[totalEffects[37]]; + currDRM.range = currDRM.range.map(x => + Math.round(x * (1 + totalEffects[13] / 100)) + ); + out = common.attachmentHandler(totalEffects, currStats); + } + function statsWorker() { + if (currStats[19] === 2) { + currStats[21] = + currStats[20] + currStats[21] * currStats[17] + currStats[22]; + currStats[20] = 0; + currStats[22] = 0; + } + currStats[25] = (currStats[25] * currStats[26]) / 100; + + const outReady = currStats.map((x, i) => + x ? statsNames[i].padEnd(24) + ":".padEnd(3) + beautifier(i) : "" + ); + out = [ + ...[ + "Basic Stats", + "ADS Stats", + "Bullet Stats", + "Magazine", + "Handling Stats", + "Mobility Stats", + "Miscellaneous Stats", + ].map((x, i) => + fieldMaker( + x, + [ + [04, 05, 09], + [14, 16, 11, 31], + [00, 06, 07, 08, 10, 12, 13], + [17, 18, 19, 20, 21, 22], + [23, 24], + [25, 26, 27, 15], + [28, 29, 30, 01, 02, 03], + ][i] + ) + ), + ...out, + ]; + function fieldMaker(inpName, inpIndx) { + inpIndx = inpIndx.filter(x => outReady[x]); + return inpIndx.length + ? { + name: `**${inpName}**`, + value: `\`\`\`\n${inpIndx.map(x => outReady[x]).join("\n")}\`\`\``, + } + : ""; + } + } + statsWorker(); + + function beautifier(j) { + switch (j) { + case 04: + return data.firingModes[currStats[j] - 1]; + case 09: + return data.penetrationLevels[currStats[j] - 1]; + case 19: + return data.reloadTypes[currStats[j] - 1]; + case 08: + if (currStats[j] == -1) { + return "Infinity"; + } else { + return parseFloat(currStats[j].toFixed(2)).toString() + " m/s"; + } + case 03: + return parseFloat(currStats[j].toFixed(2)) + .toString() + .replace(".", " ~ "); + default: + return parseFloat(currStats[j].toFixed(2)).toString() + addUnit(j); + } + + function addUnit(j) { + switch (j) { + case 7: + case 14: + case 15: + case 23: + case 24: + case 31: + return " ms"; + case 25: + case 26: + case 27: + case 28: + return " m/s"; + case 20: + case 21: + case 22: + return " s"; + case 16: + return "%"; + case 6: + return " Rounds"; + case 5: + return " RPM"; + default: + return ""; + } + } + } + interpretion = currGun.gunname + common.interpretioner(currAttachments); + if (currGun.recoil.hr.length > 2) { + chart = common.recoilHandler( + currGun.recoil.hr, + currGun.recoil.vr, + currRecoilArr[0], + currRecoilArr[1], + currRecoilArr[2] + ); + recoilAvailable = true; + } else recoilAvailable = false; + + if (chart == "none") recoilAvailable = false; + if (chart == "err") hasError = true; + + const dmg = + common.damageHandler( + currDRM.damage, + currDRM.range, + 1, + 100, + 60000 / currStats[5], + currStats[7], + currStats[6], + currStats[0] + ) || "```This should never happen```"; + out = [ + currGun.description + ? { + name: "**Description:**", + value: `\`\`\`\n${currGun.description}\`\`\``, + } + : {}, + { name: "**Damage Profile:**", value: dmg }, + ...out, + ]; + out = out.filter(x => x.value); + return { + title: interpretion, + color: 5814783, + fields: out, + footer: { + text: "[OUTDATED] All data courtesy of Project Lighthouse 2.0 and CoDM Research Crew", + icon_url: + "https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png", + }, + }; +} diff --git a/events/interactionCreate.js b/events/interactionCreate.js @@ -63,19 +63,19 @@ client.on("interactionCreate", async interaction => { embeds: [ new MessageEmbed() .setURL(client.web) - .setAuthor( - interaction.user.tag, - interaction.user.displayAvatarURL({ dynamic: true }) - ) + .setAuthor({ + name: interaction.user.tag, + iconURL: interaction.user.displayAvatarURL({ dynamic: true }), + }) .setColor(client.color) .setDescription( `You aren't a premium user. You can either boost support server or subscribe to developer's team [Ko-fi](https://ko-fi.com/cathteam) or gift a nitro to one of the developer team to be premium user` ) .setTimestamp() - .setFooter( - `Made by ${client.author}`, - client.user.displayAvatarURL() - ), + .setFooter({ + text: `Made by ${client.author}`, + iconURL: client.user.displayAvatarURL(), + }), ], }); } @@ -209,5 +209,6 @@ function sendE(e) { .setTimestamp() .setColor(client.color) .setFooter({ text: client.user.username }); + interaction.channel.send({ embeds: [embed] }); client.channels.cache.get(client.config.ErrorLog).send({ embeds: [embed] }); } diff --git a/index.js b/index.js @@ -1,5 +1,6 @@ const NYX = require("./client/NYX"); const client = new NYX(); module.exports = client; -process.on("unhandledRejection", () => {}); +// Add // when need to debug +//process.on("unhandledRejection", () => {}); client.start(); diff --git a/util/Data/domains.json b/util/Data/domains.json @@ -1,5 +1,7 @@ { "scam": [ + "gibthub.com", + "egift-premium.com", "disceord.gift", "discode.gift", "discosb.gift",