Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
|
33d5b3e19d |
75 changed files with 8908 additions and 1861 deletions
|
@ -6,5 +6,5 @@ SPOTIFY_ID =
|
||||||
SPOTIFY_SECRET =
|
SPOTIFY_SECRET =
|
||||||
host = lavalink.darrennathanael.com
|
host = lavalink.darrennathanael.com
|
||||||
port = 2095
|
port = 2095
|
||||||
password = whatwasthelastthingyousaid
|
password = whatwasthelastingyousaid
|
||||||
api = http://api.cath.gq
|
api = http://api.cath.gq
|
46
.github/README.md
vendored
46
.github/README.md
vendored
|
@ -1,4 +1,4 @@
|
||||||
<h1 align="center"> NYX [Cath.exe] </h1>
|
<h1 align="center"> NYX </h1>
|
||||||
<!-- header -->
|
<!-- header -->
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://rebrand.ly/cathSupport" target="_blank"><img alt="NYX_banner" src = "https://media.discordapp.net/attachments/896078559293104128/896091759157858394/nyx_banner_3d.png?width=1341&height=447"></a>
|
<a href="https://rebrand.ly/cathSupport" target="_blank"><img alt="NYX_banner" src = "https://media.discordapp.net/attachments/896078559293104128/896091759157858394/nyx_banner_3d.png?width=1341&height=447"></a>
|
||||||
|
@ -18,20 +18,18 @@
|
||||||
<a href="https://rebrand.ly/cathSupport"><img src="https://discordapp.com/api/guilds/718762019586572341/widget.png?style=banner2" alt="Support Server" /></a>
|
<a href="https://rebrand.ly/cathSupport"><img src="https://discordapp.com/api/guilds/718762019586572341/widget.png?style=banner2" alt="Support Server" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<!-- description -->
|
<!-- description -->
|
||||||
|
|
||||||
**NYX** _(previously known as Cath)_ is a first and only **COD Mobile Statistics & Gunsmith** Bot which also doubles as a multipurpose discord bot with many features that include but are not limited to Moderation, Music and Economy. <br>
|
**NYX** *(previously known as Cath)* is a first and only **COD Mobile Statistics & Gunsmith** Bot which also doubles as a multipurpose discord bot with many features that include but are not limited to Moderation, Music and Economy. <br>
|
||||||
The Call of Duty Stats are courtesy of **Stats on Duty** & **Round Table**<br>
|
The Call of Duty Stats are courtesy of **Round Table** by Cygnoux Familia.<br><br>
|
||||||
🔺 **Apex Legends Commands** will be added soon, the player stats command will be added after the global launch when the API supports it.
|
|
||||||
<br><br>
|
|
||||||
If you like this bot, feel free to :star: **Star** this repository.<br>
|
If you like this bot, feel free to :star: **Star** this repository.<br>
|
||||||
|
|
||||||
> ⚠ The Verifed bot instance is current called Cath.exe, we are working on getting it changed
|
> ⚠ The Verifed bot instance is current called Cath.exe, we are working on getting it changed
|
||||||
> <br>
|
<br>
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
> *This is a Non-Exhaustive list for commands. To access the full list of commands, check out our [Documentation](https://thunder75.gitbook.io/cath-bot/core/commands).*
|
||||||
> _This is a Non-Exhaustive list for commands. To access the full list of commands, check out our [Documentation](https://thunder75.gitbook.io/cath-bot/core/commands)._
|
|
||||||
|
|
||||||
<a href="https://thunder75.gitbook.io/cath-bot/core/commands" ><img src="https://img.shields.io/static/v1?label=List %20OF&message=Commands&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://thunder75.gitbook.io/cath-bot/core/commands" ><img src="https://img.shields.io/static/v1?label=List %20OF&message=Commands&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
|
|
||||||
|
@ -45,23 +43,13 @@ If you like this bot, feel free to :star: **Star** this repository.<br>
|
||||||
|
|
||||||
## <img height="18px" src="../util/assets/images/cod_logo.svg"> **Call of Duty Mobile**
|
## <img height="18px" src="../util/assets/images/cod_logo.svg"> **Call of Duty Mobile**
|
||||||
|
|
||||||
- **Weapon Statistics** courtesy of **Round Table** & **Stats On Duty**
|
- **Weapon Statistics** courtesy of **Round Table** by Cygnoux Familia.
|
||||||
- **Currated Gunsmith Builds** by various content creators like Jokesta, dHitman, Path.exe, Stats On Duty and more comming soon.
|
- **Currated Gunsmith Builds** by various content creators like Jokesta, dHitman, Path.exe and more comming soon.
|
||||||
- **Perks** detailed info about the perks.
|
- **Perks** detailed info about the perks.
|
||||||
- **Scorestreak** detailed info about scorestreak with preview videos.
|
|
||||||
- **Randomly Generated Class** Wanna try something challenging? try our Randomly Generated Gunsmith builds.
|
- **Randomly Generated Class** Wanna try something challenging? try our Randomly Generated Gunsmith builds.
|
||||||
|
|
||||||
> We also provide access to our database that includes In-depth Weapon statistics & Gunsmith Builds from various Content Creators, & other Call of duty related info, please [contact us](https://rebrand.ly/cathSupport) for more info.
|
> We also provide access to our database that includes In-depth Weapon statistics & Gunsmith Builds from various Content Creators, & other Call of duty related info, please [contact us](https://rebrand.ly/cathSupport) for more info.
|
||||||
|
|
||||||
## <img height="16px" src="../util/assets/images/apex/apex-legends-logo-white.svg"> **Apex Legends Mobile**
|
|
||||||
> ⚠ *Coming Soon™*
|
|
||||||
|
|
||||||
- **Player Stats** view your in-game stats. <!-- if they support mobile for the stats api -->
|
|
||||||
- **Legends** detailed info about legends & their abilities.
|
|
||||||
- **Guns** detailed info about guns.
|
|
||||||
- **Random Combos** Wanna try something challenging? try to win a game with a random selected legend & Gun combination
|
|
||||||
- *& many more, coming soon!*
|
|
||||||
|
|
||||||
## More Info
|
## More Info
|
||||||
|
|
||||||
[![Top language](https://img.shields.io/github/languages/top/night0721/cath.exe?labelColor=F7DF1E&color=555555&style=for-the-badge&scale=1.4)](https://github.com/night0721/cath.exe)
|
[![Top language](https://img.shields.io/github/languages/top/night0721/cath.exe?labelColor=F7DF1E&color=555555&style=for-the-badge&scale=1.4)](https://github.com/night0721/cath.exe)
|
||||||
|
@ -70,7 +58,8 @@ If you like this bot, feel free to :star: **Star** this repository.<br>
|
||||||
|
|
||||||
A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cath-bot/deployment).
|
A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cath-bot/deployment).
|
||||||
|
|
||||||
<!-- <details>
|
|
||||||
|
<details>
|
||||||
<summary>Made With</summary>
|
<summary>Made With</summary>
|
||||||
|
|
||||||
[![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
|
[![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
|
||||||
|
@ -80,6 +69,15 @@ A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cat
|
||||||
<img src ="https://forthebadge.com/images/badges/built-with-love.svg" width = "122"><br>
|
<img src ="https://forthebadge.com/images/badges/built-with-love.svg" width = "122"><br>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Issues & PRs</summary>
|
||||||
|
|
||||||
|
[![Open issues](https://img.shields.io/github/issues-raw/night0721/cath.exe?style=for-the-badge)](https://github.com/night0721/cath.exe/issues)
|
||||||
|
[![Closed issues](https://img.shields.io/github/issues-closed-raw/night0721/cath.exe?style=for-the-badge)](https://github.com/night0721/cath.exe/issues)
|
||||||
|
[![Open PRs](https://img.shields.io/github/issues-pr-raw/night0721/cath.exe?style=for-the-badge)](https://github.com/night0721/cath.exe/pulls)
|
||||||
|
[![Closed PRs](https://img.shields.io/github/issues-pr-closed-raw/night0721/cath.exe?style=for-the-badge)](https://github.com/night0721/cath.exe/pulls)
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Github Stats</summary>
|
<summary>Github Stats</summary>
|
||||||
|
|
||||||
|
@ -87,9 +85,9 @@ A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cat
|
||||||
![GitHub Discussions](https://img.shields.io/github/discussions/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
![GitHub Discussions](https://img.shields.io/github/discussions/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
||||||
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/night0721/cath.exe?color=5865F2&logo=github&logoColor=ffffff&style=for-the-badge)
|
||||||
[![Last commit](https://img.shields.io/github/last-commit/night0721/cath.exe?icon=discord&color=5865F2&style=for-the-badge&scale=1.4)](https://github.com/night0721/cath.exe)
|
[![Last commit](https://img.shields.io/github/last-commit/night0721/cath.exe?icon=discord&color=5865F2&style=for-the-badge&scale=1.4)](https://github.com/night0721/cath.exe)
|
||||||
<!-- [![Files](https://tokei.rs/b1/github/night0721/cath.exe?category=files&style=for-the-badge)](https://github.com/night0721/cath.exe)
|
<!-- [![Files](https://tokei.rs/b1/github/night0721/cath.exe?category=files&style=for-the-badge)](https://github.com/night0721/cath.exe) -->
|
||||||
|
|
||||||
</details> -->
|
</details>
|
||||||
|
|
||||||
<h1 align = "center"> Support, Feature Request & Bug Reports </h1>
|
<h1 align = "center"> Support, Feature Request & Bug Reports </h1>
|
||||||
|
|
||||||
|
@ -117,7 +115,5 @@ Contributions are always welcomed, but make sure to read [Contributing.md](/CONT
|
||||||
<p align = "center">
|
<p align = "center">
|
||||||
<a href="https://discord.gg/mjVwkCsWY7" target="_blank"><img src="https://discordapp.com/api/guilds/756525751594909797/widget.png?style=banner1"></a>
|
<a href="https://discord.gg/mjVwkCsWY7" target="_blank"><img src="https://discordapp.com/api/guilds/756525751594909797/widget.png?style=banner1"></a>
|
||||||
</p> -->
|
</p> -->
|
||||||
|
|
||||||
⠀
|
⠀
|
||||||
|
|
||||||
<!-- <img src="https://socialify.git.ci/night0721/cath.exe/image?description=1&descriptionEditable=A%20Discord.js%20v13%20Template%20based%20on%20cath.exe&font=Raleway&forks=1&issues=1&language=1&owner=1&pattern=Circuit%20Board&pulls=1&stargazers=1&theme=Dark"> -->
|
<!-- <img src="https://socialify.git.ci/night0721/cath.exe/image?description=1&descriptionEditable=A%20Discord.js%20v13%20Template%20based%20on%20cath.exe&font=Raleway&forks=1&issues=1&language=1&owner=1&pattern=Circuit%20Board&pulls=1&stargazers=1&theme=Dark"> -->
|
||||||
|
|
110
CODM/builds.js
Normal file
110
CODM/builds.js
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
const builds = require("../util/Data/builds.json");
|
||||||
|
const guns = builds.Main;
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
const nmDt = require("../util/Data/aliases.json");
|
||||||
|
const weaponActualName = nmDt.weaponActualName;
|
||||||
|
const weaponAlliasName = nmDt.weaponAlliasName;
|
||||||
|
module.exports = {
|
||||||
|
name: "build",
|
||||||
|
description: "Check gun builds",
|
||||||
|
usage: "(Gun)",
|
||||||
|
category: "CODM",
|
||||||
|
status: false,
|
||||||
|
Owner: true,
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
const currGun = weaponIdentifier(args.join(" ").replace("\n", " "));
|
||||||
|
if (!currGun) message.reply({ content: "Please specify a gun" });
|
||||||
|
if (typeof currGun == "string") {
|
||||||
|
message.reply({ embeds: [currGun] });
|
||||||
|
} else {
|
||||||
|
const attachNames = currGun.Attachments.map(
|
||||||
|
x => `**${x.Name}** [${builds.AttachmentTypes[x.Type]}]`
|
||||||
|
);
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(
|
||||||
|
`Build for ${currGun.Name} (${builds.WeaponTypes[currGun.Type]})`
|
||||||
|
)
|
||||||
|
.setColor(16580400)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setURL(client.web)
|
||||||
|
.setDescription(
|
||||||
|
attachNames.reduce(
|
||||||
|
(t, x, i, a) => t + (i < a.length - 1 ? "\n" : " \n") + x
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.setImage(currGun.URL);
|
||||||
|
return message.reply({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
function weaponIdentifier(inpWeaponName) {
|
||||||
|
if (inpWeaponName.length < 2) {
|
||||||
|
return "The name `" + inpWeaponName + "` is too short.";
|
||||||
|
}
|
||||||
|
let probableWeapons = [];
|
||||||
|
for (let i = 0; i < guns.length; i++) {
|
||||||
|
if (inpWeaponName.Simplify() == guns[i].Name.Simplify()) {
|
||||||
|
return guns[i];
|
||||||
|
} else if (guns[i].Name.Simplify().includes(inpWeaponName.Simplify())) {
|
||||||
|
probableWeapons.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (probableWeapons.length == 1) {
|
||||||
|
return guns[probableWeapons[0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < weaponAlliasName.length; i++) {
|
||||||
|
for (let j = 0; j < weaponAlliasName[i].length; j++) {
|
||||||
|
if (weaponAlliasName[i][j].Simplify() == inpWeaponName.Simplify()) {
|
||||||
|
for (let i2 = 0; i2 < guns.length; i2++) {
|
||||||
|
if (weaponActualName[i].Simplify() == guns[i2].Name.Simplify()) {
|
||||||
|
return guns[i2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
probableWeapons = [...new Set(probableWeapons)];
|
||||||
|
if (probableWeapons.length == 1) {
|
||||||
|
return guns[probableWeapons[0]];
|
||||||
|
}
|
||||||
|
if (probableWeapons.length > 1) {
|
||||||
|
return (
|
||||||
|
"Did you mean `" +
|
||||||
|
probableWeapons
|
||||||
|
.map(x => guns[x].Name)
|
||||||
|
.reduce((out, x, i) =>
|
||||||
|
[out, x].join(i === probableWeapons.length - 1 ? "` or `" : "`, `")
|
||||||
|
) +
|
||||||
|
"`?"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return "Couldn't identify the weapon: `" + '"' + inpWeaponName + '"`';
|
||||||
|
}
|
||||||
|
// ENABLE AFTER Holloween
|
||||||
|
|
||||||
|
// run: async (client, interaction, args) => {
|
||||||
|
// const embed = new MessageEmbed()
|
||||||
|
// .setTitle(`Prefix commands are now disabled`)
|
||||||
|
// .setDescription(`Please enable **Application commands** in the channel settings to get access to slash commands, we have discontinued prefix commands.`)
|
||||||
|
// .setColor(client.color)
|
||||||
|
// .setThumbnail(interaction.guild.iconURL({ dynamic: true }))
|
||||||
|
// .addFields(
|
||||||
|
// {
|
||||||
|
// name: "Need help ?",
|
||||||
|
// value: `Join our **[Support Server](https://discord.gg/SR7TeNJG67)**`,
|
||||||
|
// inline: true,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: "Support us <a:donate:896985486260846614>",
|
||||||
|
// value: `[KoFi](https://ko-fi.com/cathteam)`,
|
||||||
|
// inline: true,
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// .setThumbnail("https://github.com/night0721/cath.js/blob/master/util/assets/images/nyx_logo_transparent.webp")
|
||||||
|
// .setTimestamp();
|
||||||
|
// interaction.followUp({ embeds: [embed] });
|
||||||
|
// },
|
||||||
|
// };
|
55
CODM/class.js
Normal file
55
CODM/class.js
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const model = require("../../models/weapons");
|
||||||
|
const Attachments = require("../../util/Data/attachments.json");
|
||||||
|
module.exports = {
|
||||||
|
name: "class",
|
||||||
|
description: "Generate random class in CODM",
|
||||||
|
category: "CODM",
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
const data = async () => {
|
||||||
|
const d = await model.findOne({});
|
||||||
|
const types = d.Categories;
|
||||||
|
const names = d.Primary;
|
||||||
|
const category = types[Math.floor(Math.random() * types.length)];
|
||||||
|
const weapons = names[0][category];
|
||||||
|
return `${weapons[Math.floor(Math.random() * weapons.length)]}`;
|
||||||
|
};
|
||||||
|
const primary_weapon = await data();
|
||||||
|
const primary = primary_weapon.replace(/[ -]/g, "_").replace(/\./g, "");
|
||||||
|
const slots = shuffle(Object.keys(Attachments[primary][0]));
|
||||||
|
const slot_1 = slots.next().value,
|
||||||
|
slot_2 = slots.next().value,
|
||||||
|
slot_3 = slots.next().value,
|
||||||
|
slot_4 = slots.next().value,
|
||||||
|
slot_5 = slots.next().value;
|
||||||
|
const result = new MessageEmbed()
|
||||||
|
.setColor(client.color)
|
||||||
|
.setTitle(`🎲Random Class of ${primary_weapon}🎲`)
|
||||||
|
.setDescription(
|
||||||
|
`**Attachments**\n**${getAttachment(
|
||||||
|
primary,
|
||||||
|
slot_1,
|
||||||
|
)}**\n**${getAttachment(primary, slot_2)}**\n**${getAttachment(
|
||||||
|
primary,
|
||||||
|
slot_3,
|
||||||
|
)}**\n**${getAttachment(primary, slot_4)}**\n**${getAttachment(
|
||||||
|
primary,
|
||||||
|
slot_5,
|
||||||
|
)}**`,
|
||||||
|
)
|
||||||
|
.setURL(client.web)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
message.reply({ embeds: [result] });
|
||||||
|
function* shuffle(array) {
|
||||||
|
let i = array.length;
|
||||||
|
while (i--) {
|
||||||
|
yield array.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getAttachment(gun, slot) {
|
||||||
|
const ca = Attachments[gun][0][slot];
|
||||||
|
return ca[Math.floor(Math.random() * ca.length)];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
118
CODM/damage.js
Normal file
118
CODM/damage.js
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
const common = require("../../util/functions/common");
|
||||||
|
let currGun = {},
|
||||||
|
currStats = [],
|
||||||
|
currAttachments = {},
|
||||||
|
currDRM = {},
|
||||||
|
totalEffects = [],
|
||||||
|
interpretion = "",
|
||||||
|
hasError = false;
|
||||||
|
const errMsg = "*Generic placeholder error message*";
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "damage",
|
||||||
|
description: "Check gun damage",
|
||||||
|
usage: "(Gun)",
|
||||||
|
category: "CODM",
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
const repEmb = dmg(args.join(" ").replace("\n", " "));
|
||||||
|
if (hasError) {
|
||||||
|
message.reply({ embeds: [repEmb] });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
message.channel.send({ embeds: [repEmb] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function dmg(inpmsg) {
|
||||||
|
currGun = common.weaponIdentifier(inpmsg);
|
||||||
|
if (typeof currGun == "string") {
|
||||||
|
hasError = true;
|
||||||
|
return currGun;
|
||||||
|
}
|
||||||
|
currDRM = currGun.drm[0];
|
||||||
|
currStats = currGun.stats;
|
||||||
|
currAttachments = common.attachmentsIdentifier(
|
||||||
|
inpmsg,
|
||||||
|
currGun.aments,
|
||||||
|
currStats,
|
||||||
|
);
|
||||||
|
if (typeof currAttachments == "string") {
|
||||||
|
hasError = true;
|
||||||
|
return currAttachments;
|
||||||
|
}
|
||||||
|
if (currAttachments.length) {
|
||||||
|
totalEffects = common.totaler(currAttachments);
|
||||||
|
currDRM = currGun.drm[totalEffects[37]];
|
||||||
|
currDRM.range = currDRM.range.map(
|
||||||
|
x => (x * (totalEffects[13] + 100)) / 100,
|
||||||
|
);
|
||||||
|
currStats = common.updateStatswithEffects(totalEffects, currStats);
|
||||||
|
}
|
||||||
|
const mn = [
|
||||||
|
"Head",
|
||||||
|
"Neck",
|
||||||
|
"Upper Chest",
|
||||||
|
"Lower Chest",
|
||||||
|
"Shoulders",
|
||||||
|
"Upper Arms",
|
||||||
|
"Lower Arms",
|
||||||
|
"Stomach",
|
||||||
|
"Belly Button",
|
||||||
|
"Crotch",
|
||||||
|
"Thighs",
|
||||||
|
"Calf Muscles",
|
||||||
|
"Feet",
|
||||||
|
],
|
||||||
|
m1 = currDRM.bodymultiplier,
|
||||||
|
m2 = [...new Set(m1)], // [1.2, 1, 0.9]
|
||||||
|
m3 = m1.map(x => m2.indexOf(x)), // [0, 1, 1, 1, 1, 1, 2, 2, 2]
|
||||||
|
m4 = m2
|
||||||
|
.map(x =>
|
||||||
|
m3
|
||||||
|
.map((y, i) => {
|
||||||
|
if (x === m2[y]) {
|
||||||
|
return mn[i];
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(y => y),
|
||||||
|
)
|
||||||
|
.map(x =>
|
||||||
|
x.length === m1.length
|
||||||
|
? ["All"]
|
||||||
|
: x.length === m1.length - 1
|
||||||
|
? ["Others"]
|
||||||
|
: x,
|
||||||
|
);
|
||||||
|
interpretion = currGun.gunname + common.interpretioner(currAttachments);
|
||||||
|
return {
|
||||||
|
title: "**" + interpretion + "**",
|
||||||
|
color: 4849497,
|
||||||
|
fields: m4.map((x, i) => {
|
||||||
|
return {
|
||||||
|
name: x.join(", ") + ":",
|
||||||
|
value: common.damageHandler(
|
||||||
|
currDRM.damage,
|
||||||
|
currDRM.range,
|
||||||
|
m2[i],
|
||||||
|
100,
|
||||||
|
60000 / currStats[5],
|
||||||
|
currStats[7],
|
||||||
|
currStats[6],
|
||||||
|
currStats[0],
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
footer: {
|
||||||
|
text: "All the stats courtesy of Project Lighthouse",
|
||||||
|
icon_url:
|
||||||
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// console.log(dmg("47 + mono"));
|
||||||
|
/* console.log(dmg("47"));
|
||||||
|
console.log(dmg("striker + choke"));
|
||||||
|
console.log(dmg("striker + choke"));
|
||||||
|
console.log(dmg("striker"));
|
||||||
|
common.makeError();*/
|
168
CODM/effects.js
vendored
Normal file
168
CODM/effects.js
vendored
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
const common = require("../util/functions/common");
|
||||||
|
const data = require("../util/Data/data.json");
|
||||||
|
|
||||||
|
let currGun, currAttachments, interpretion, hasError;
|
||||||
|
const errMsg = "*Generic placeholder error message*";
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "effects",
|
||||||
|
description: "Check gun effects",
|
||||||
|
usage: "(Gun)",
|
||||||
|
category: "CODM",
|
||||||
|
aliases: ["attachements"],
|
||||||
|
/**
|
||||||
|
* @param {Client} client
|
||||||
|
* @param {Message} message
|
||||||
|
* @param {String[]} args
|
||||||
|
*/
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
const repEmb = attachments(args.join(" ").replace("\n", " "));
|
||||||
|
if (hasError) {
|
||||||
|
message.reply({ embeds: [repEmb] });
|
||||||
|
} else {
|
||||||
|
message.channel.send({ embeds: [repEmb] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function attachments(inpmsg) {
|
||||||
|
const out = "",
|
||||||
|
at = data.attachmentTypes.map(x => (x.slice(-1) === "s" ? x : x + "s"));
|
||||||
|
if (inpmsg.includes("+") && inpmsg.includes(":")) {
|
||||||
|
hasError = true;
|
||||||
|
return "Bro, can u liek, not do that?";
|
||||||
|
}
|
||||||
|
if (inpmsg.includes(":")) {
|
||||||
|
const inpAll = inpmsg
|
||||||
|
.split(":")
|
||||||
|
.map(x => x.trim())
|
||||||
|
.filter(x => x),
|
||||||
|
inpType = inpAll.length === 2 ? inpAll[1] : null;
|
||||||
|
if (!inpType) {
|
||||||
|
hasError = true;
|
||||||
|
return inpAll.length < 2
|
||||||
|
? "Empty " + (inpAll[0] ? "" : "weapon name and ") + "attachment type"
|
||||||
|
: "Multiple `:`s detected";
|
||||||
|
}
|
||||||
|
currGun = common.weaponIdentifier(inpAll[0]);
|
||||||
|
if (typeof currGun == "string") {
|
||||||
|
hasError = true;
|
||||||
|
return currGun;
|
||||||
|
}
|
||||||
|
let currAttachmentsType = at.filter(x => simplify(x) == simplify(inpType));
|
||||||
|
currAttachmentsType = currAttachmentsType.length
|
||||||
|
? currAttachmentsType
|
||||||
|
: at.filter(
|
||||||
|
x => simplify(x.substring(0, x.length - 1)) == simplify(inpType)
|
||||||
|
);
|
||||||
|
currAttachmentsType = currAttachmentsType.length
|
||||||
|
? currAttachmentsType
|
||||||
|
: at.filter(x => simplify(x).includes(simplify(inpType)));
|
||||||
|
if (currAttachmentsType.length === 0) {
|
||||||
|
hasError = true;
|
||||||
|
return "Couldn't identify `" + inpType + "`";
|
||||||
|
} else if (currAttachmentsType.length === 1) {
|
||||||
|
currAttachmentsType = at.indexOf(currAttachmentsType[0]);
|
||||||
|
} else {
|
||||||
|
hasError = true;
|
||||||
|
return (
|
||||||
|
"Did you mean `" +
|
||||||
|
currAttachmentsType.reduce((out, x, i) =>
|
||||||
|
[out, x].join(
|
||||||
|
i === currAttachmentsType.length - 1 ? "` or `" : "`, `"
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
"`"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: currGun.gunname,
|
||||||
|
color: 11348938,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name:
|
||||||
|
"**" +
|
||||||
|
currGun.gunname +
|
||||||
|
"** has the following " +
|
||||||
|
at[currAttachmentsType],
|
||||||
|
value:
|
||||||
|
"```\n" +
|
||||||
|
currGun.aments
|
||||||
|
.filter(x => x.type - 1 === currAttachmentsType)
|
||||||
|
.map(x => x.name)
|
||||||
|
.join("\n") +
|
||||||
|
"```",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
footer: {
|
||||||
|
text: "All the stats courtesy of Project Lighthouse",
|
||||||
|
icon_url:
|
||||||
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
function simplify(v) {
|
||||||
|
return v.toLowerCase().replace(/[^0-9a-z]/g, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currGun = common.weaponIdentifier(inpmsg);
|
||||||
|
if (typeof currGun == "string") {
|
||||||
|
hasError = true;
|
||||||
|
return currGun;
|
||||||
|
}
|
||||||
|
hasAttachments = common.hasAttachments(inpmsg);
|
||||||
|
currAttachments = [];
|
||||||
|
if (hasAttachments) {
|
||||||
|
currAttachments = common.attachmentsIdentifier(
|
||||||
|
inpmsg,
|
||||||
|
currGun.aments,
|
||||||
|
currGun.stats
|
||||||
|
);
|
||||||
|
if (typeof currAttachments == "string") {
|
||||||
|
hasError = true;
|
||||||
|
return currAttachments;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
title: currGun.gunname + common.interpretioner(currAttachments),
|
||||||
|
color: 11348938,
|
||||||
|
fields: common.attachmentHandler(
|
||||||
|
common.totaler(currAttachments),
|
||||||
|
currGun.stats
|
||||||
|
),
|
||||||
|
footer: {
|
||||||
|
text: "All the stats courtesy of Project Lighthouse",
|
||||||
|
icon_url:
|
||||||
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
const availableAttachmentTypes = [
|
||||||
|
...new Set(currGun.aments.map(x => x.type)),
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
title: currGun.gunname,
|
||||||
|
color: 11348938,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name:
|
||||||
|
"**" + currGun.gunname + "** has the following attachment types:",
|
||||||
|
value:
|
||||||
|
"```\n" +
|
||||||
|
availableAttachmentTypes.map(x => at[x - 1]).join(",\n") +
|
||||||
|
"```",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
footer: {
|
||||||
|
text: "All the stats courtesy of Project Lighthouse",
|
||||||
|
icon_url:
|
||||||
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// console.log(attachments("Peacekeeper:muzzle")); //common.makeError();
|
||||||
|
/* console.log(attachments(":")); //common.makeError();
|
||||||
|
console.log(attachments("47:optics")); //common.makeError();
|
||||||
|
console.log(attachments("47")); //common.makeError();
|
||||||
|
console.log(attachments("47 + ")); //common.makeError();
|
||||||
|
console.log(attachments("47 + :")); //common.makeError();
|
||||||
|
console.log(attachments("47 + red dot")); common.makeError();*/
|
111
CODM/sgrelo.js
Normal file
111
CODM/sgrelo.js
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
module.exports = {
|
||||||
|
name: "sgrelo",
|
||||||
|
descriptiom: "Calculate reload time for shotgun",
|
||||||
|
run: async (client, message, args) => {
|
||||||
|
let err = "",
|
||||||
|
wrn = "",
|
||||||
|
interpretedAs = [];
|
||||||
|
function mather(inp) {
|
||||||
|
const inpArr = interpreter(inp),
|
||||||
|
outArr = [];
|
||||||
|
inpArr.map((x, i, a) => {
|
||||||
|
for (let j = i + 1; j < a.length; j++) {
|
||||||
|
outArr.push(worker(x, a[j]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const aArr = outArr.map(x => x.a),
|
||||||
|
iArr = outArr.map(x => x.i);
|
||||||
|
return (
|
||||||
|
"Input: `" +
|
||||||
|
interpretedAs.join("`, `") +
|
||||||
|
"`" +
|
||||||
|
(aArr.length == 1
|
||||||
|
? "\nOpening and Closing Animation Time: " +
|
||||||
|
beautifier(aArr[0]) +
|
||||||
|
"\nReload Time: " +
|
||||||
|
beautifier(iArr[0])
|
||||||
|
: "\nAll Opening and Closing Animation Time: " +
|
||||||
|
aArr.map(x => beautifier(x)).join(", ") +
|
||||||
|
"\nAll Reload Time: " +
|
||||||
|
iArr.map(x => beautifier(x)).join(", ") +
|
||||||
|
"\nAverage Opening and Closing Animation Time: " +
|
||||||
|
beautifier(aArr.reduce((t, x) => t + x, 0) / aArr.length) +
|
||||||
|
"\nAverage Reload Time: " +
|
||||||
|
beautifier(iArr.reduce((t, x) => t + x, 0) / iArr.length))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function interpreter(inp) {
|
||||||
|
let out = [
|
||||||
|
...new Set(
|
||||||
|
inp
|
||||||
|
.split(/\n|, |,/g)
|
||||||
|
.filter(x => x)
|
||||||
|
.map(x => x.toLowerCase().replace(/[^0-9a-z]/g, ""))
|
||||||
|
),
|
||||||
|
];
|
||||||
|
out = out
|
||||||
|
.map(x => {
|
||||||
|
interpretedAs.push(x);
|
||||||
|
const obj = {
|
||||||
|
b: 0,
|
||||||
|
f: 0,
|
||||||
|
};
|
||||||
|
if (
|
||||||
|
x.split(/b/g).length > 2 ||
|
||||||
|
x.split(/f/g).length > 2 ||
|
||||||
|
x.split(/[a-z]/g).length > 3
|
||||||
|
) {
|
||||||
|
err += "Unknown identifier `" + x + "`\n";
|
||||||
|
} else if (x.indexOf("b") === -1 || x.indexOf("f") === -1) {
|
||||||
|
err += "Missing identifier `" + x + "`\n";
|
||||||
|
} else if (x.indexOf("b") === x.length - 1) {
|
||||||
|
obj.b = parseFloat(x.split("f")[1].trim());
|
||||||
|
obj.f = parseFloat(x.split("f")[0].trim());
|
||||||
|
} else if (x.indexOf("f") === x.length - 1) {
|
||||||
|
obj.b = parseFloat(x.split("b")[0].trim());
|
||||||
|
obj.f = parseFloat(x.split("b")[1].trim());
|
||||||
|
} else {
|
||||||
|
err += "Unknown identifier `" + x + "`\n";
|
||||||
|
}
|
||||||
|
if (!obj.b && obj.f) {
|
||||||
|
err += "Couldn't interpret `" + x + "`\n";
|
||||||
|
} else if (!Number.isInteger(obj.b)) {
|
||||||
|
err += "Decimal bullet count found `" + x + "`\n";
|
||||||
|
} else if (!Number.isInteger(obj.f)) {
|
||||||
|
wrn += "Decimal value found `" + x + "`\n";
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
})
|
||||||
|
.filter(x => JSON.stringify(x).length && x);
|
||||||
|
if (out.length === 1) {
|
||||||
|
err += "Single equation found\n";
|
||||||
|
}
|
||||||
|
return err || !out.length ? [] : out;
|
||||||
|
}
|
||||||
|
|
||||||
|
function worker(o1, o2) {
|
||||||
|
const out = {
|
||||||
|
i: 0,
|
||||||
|
a: 0,
|
||||||
|
};
|
||||||
|
out.i = (o1.f - o2.f) / (o1.b - o2.b);
|
||||||
|
out.a = o1.f - out.i * o1.b;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
function beautifier(num) {
|
||||||
|
return parseFloat(num.toFixed(2)).toString() + "s";
|
||||||
|
}
|
||||||
|
|
||||||
|
const msg = mather(args.join(" "));
|
||||||
|
|
||||||
|
if (err !== "") {
|
||||||
|
message.reply(err);
|
||||||
|
} else if (wrn !== "") {
|
||||||
|
message.reply({ content: wrn + "\n" + msg });
|
||||||
|
} else {
|
||||||
|
message.channel.send({ content: msg });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
274
CODM/stats.js
Normal file
274
CODM/stats.js
Normal file
|
@ -0,0 +1,274 @@
|
||||||
|
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.aments,
|
||||||
|
currStats
|
||||||
|
);
|
||||||
|
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);
|
|
@ -1,2 +1,2 @@
|
||||||
const { CODMClient } = require("cath");
|
const { CODMClient } = require("cath");
|
||||||
module.exports = new CODMClient(process.env.CODM_API_KEY);
|
module.exports = new CODMClient("Gae");
|
||||||
|
|
|
@ -14,7 +14,7 @@ class NYX extends Client {
|
||||||
presence: {
|
presence: {
|
||||||
activities: [
|
activities: [
|
||||||
{
|
{
|
||||||
name: `/help`,
|
name: `v${require("../package.json").version} | /help`,
|
||||||
type: "STREAMING",
|
type: "STREAMING",
|
||||||
url: "https://www.youtube.com/watch?v=YSKDu1gKntY",
|
url: "https://www.youtube.com/watch?v=YSKDu1gKntY",
|
||||||
},
|
},
|
||||||
|
@ -22,7 +22,6 @@ class NYX extends Client {
|
||||||
},
|
},
|
||||||
shard: "auto",
|
shard: "auto",
|
||||||
restTimeOffset: 0,
|
restTimeOffset: 0,
|
||||||
restRequestTimeout: 99999,
|
|
||||||
partials: ["MESSAGE", "CHANNEL", "REACTION", "GUILD_MEMBER"],
|
partials: ["MESSAGE", "CHANNEL", "REACTION", "GUILD_MEMBER"],
|
||||||
intents: 24207,
|
intents: 24207,
|
||||||
}
|
}
|
||||||
|
@ -46,12 +45,13 @@ class NYX extends Client {
|
||||||
"556808365574193194", // chunchunmaru
|
"556808365574193194", // chunchunmaru
|
||||||
"746753527338238115", // mightyful
|
"746753527338238115", // mightyful
|
||||||
];
|
];
|
||||||
this.currency = "<:nyx_currency:918584872333893703>";
|
this.currency = "<:cp:840231933933387797>"; // <a:pumpkin:898975476863877170>
|
||||||
this.xp = "<:nyx_xp:900309007472926720>";
|
this.xp = "<:nyx_xp:900309007472926720>";
|
||||||
this.path = [
|
this.path = [
|
||||||
"614423108388126731", // Camper on Duty
|
"614423108388126731", // Camper on Duty
|
||||||
"767173194943168542", // Dark Bonker
|
"767173194943168542", // Dark Bonker
|
||||||
"718762019586572341", // NYX Nation
|
"718762019586572341", // NYX Nation
|
||||||
|
"869583978108157972", // Lighthouse Community
|
||||||
"840225563193114624", // Command Test
|
"840225563193114624", // Command Test
|
||||||
];
|
];
|
||||||
const client = this;
|
const client = this;
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const moment = require("moment");
|
|
||||||
const axios = require("axios");
|
const axios = require("axios");
|
||||||
|
const moment = require("moment");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "build",
|
name: "build",
|
||||||
description: "Get gunsmith builds",
|
description: "Get gunsmith builds",
|
||||||
usage: "[Weapon Name] [Author] [Tag]",
|
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
category: "CODM",
|
category: "CODM",
|
||||||
options: [
|
options: [
|
||||||
|
@ -20,109 +19,101 @@ module.exports = {
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Type 25",
|
name: "AK117",
|
||||||
value: "A01",
|
value: "ak117",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "M16",
|
name: "M16",
|
||||||
value: "A02",
|
value: "m16",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "AK117",
|
name: "Type 25",
|
||||||
value: "A03",
|
value: "type25",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "AK-47",
|
name: "AK-47",
|
||||||
value: "A04",
|
value: "ak47",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ASM10",
|
name: "ASM10",
|
||||||
value: "A05",
|
value: "asm10",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "M4",
|
name: "M4",
|
||||||
value: "A06",
|
value: "m4",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "BK57",
|
name: "BK57",
|
||||||
value: "A07",
|
value: "bk57",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "LK24",
|
name: "LK24",
|
||||||
value: "A08",
|
value: "lk24",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "ICR-1",
|
|
||||||
value: "A09",
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Man-o-War",
|
name: "Man-o-War",
|
||||||
value: "A10",
|
value: "manowar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ICR-1",
|
||||||
|
value: "icr1",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "KN-44",
|
name: "KN-44",
|
||||||
value: "A11",
|
value: "kn44",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "HBRa3",
|
name: "HBRa3",
|
||||||
value: "A12",
|
value: "hbra3",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "HVK-30",
|
name: "HVK-30",
|
||||||
value: "A13",
|
value: "hvk30",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "DR-H",
|
name: "DR-H",
|
||||||
value: "A14",
|
value: "drh",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Peacekeeper MK2",
|
name: "Peacekeeper MK2",
|
||||||
value: "A15",
|
value: "peacekeepermk2",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "FR .556",
|
name: "FR .556",
|
||||||
value: "A16",
|
value: "fr556",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "AS VAL",
|
name: "AS VAL",
|
||||||
value: "A17",
|
value: "asval",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "CR-56 AMAX",
|
name: "CR-56 AMAX",
|
||||||
value: "A18",
|
value: "cr56amax",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "M13",
|
name: "M13",
|
||||||
value: "A19",
|
value: "m13",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Swordfish",
|
name: "Swordfish",
|
||||||
value: "A20",
|
value: "swordfish",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Kilo 141",
|
|
||||||
value: "A21",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Jokesta",
|
name: "Jokesta",
|
||||||
value: "Jokesta",
|
value: "jokesta",
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// name: "Stats On Duty",
|
|
||||||
// value: "Stats On Duty",
|
|
||||||
// },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -133,19 +124,19 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Aggressive",
|
name: "Aggressive",
|
||||||
value: "Aggressive",
|
value: "aggressive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Passive",
|
name: "Passive",
|
||||||
value: "Passive",
|
value: "passive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Search And Destroy",
|
name: "Search & Destroy",
|
||||||
value: "Search And Destroy",
|
value: "snd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -163,88 +154,80 @@ module.exports = {
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "RUS-79U",
|
name: "RUS-79u",
|
||||||
value: "D01",
|
value: "rus79u",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Chicom",
|
|
||||||
value: "D02",
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "PDW-57",
|
name: "PDW-57",
|
||||||
value: "D03",
|
value: "pdw57",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Razorback",
|
name: "Razorback",
|
||||||
value: "D04",
|
value: "razorback",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "MSMC",
|
name: "MSMC",
|
||||||
value: "D05",
|
value: "msmc",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "HG40",
|
name: "HG40",
|
||||||
value: "D06",
|
value: "hg40",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Pharo",
|
name: "Pharo",
|
||||||
value: "D07",
|
value: "pharo",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "GKS",
|
name: "GKS",
|
||||||
value: "D08",
|
value: "gks",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Cordite",
|
name: "Cordite",
|
||||||
value: "D09",
|
value: "cordite",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "QQ9",
|
name: "QQ9",
|
||||||
value: "D10",
|
value: "qq9",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Fennec",
|
name: "Fennec",
|
||||||
value: "D11",
|
value: "fennec",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Chicom",
|
||||||
|
value: "chicom",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "AGR 556",
|
name: "AGR 556",
|
||||||
value: "D12",
|
value: "agr556",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "QXR",
|
name: "QXR",
|
||||||
value: "D13",
|
value: "qxr",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "PP19 Bizon",
|
name: "PP19 Bizon",
|
||||||
value: "D14",
|
value: "pp19bizon",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "MX9",
|
name: "MX9",
|
||||||
value: "D15",
|
value: "mx9",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "CBR4",
|
|
||||||
value: "D16",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "PPSh 41",
|
|
||||||
value: "D17",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Jokesta",
|
name: "Jokesta",
|
||||||
value: "Jokesta",
|
value: "jokesta",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -256,19 +239,19 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Aggressive",
|
name: "Aggressive",
|
||||||
value: "Aggressive",
|
value: "aggressive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Passive",
|
name: "Passive",
|
||||||
value: "Passive",
|
value: "passive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Search And Destroy",
|
name: "Search & Destroy",
|
||||||
value: "Search And Destroy",
|
value: "snd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -285,54 +268,54 @@ module.exports = {
|
||||||
description: "Name of the Gun",
|
description: "Name of the Gun",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
// {
|
|
||||||
// name: "XPR-50",
|
|
||||||
// value: "B01",
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
name: "Arctic .50",
|
name: "Arctic .50",
|
||||||
value: "B02",
|
value: "arctic50",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "M21 EBR",
|
name: "M21 EBR",
|
||||||
value: "B03",
|
value: "m21ebr",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "DL Q33",
|
name: "DL Q33",
|
||||||
value: "B04",
|
value: "dlq33",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Locus",
|
name: "Locus",
|
||||||
value: "B05",
|
value: "locus",
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
|
// name: "XPR-50",
|
||||||
|
// value: "xpr50",
|
||||||
|
// },
|
||||||
|
// {
|
||||||
// name: "NA-45",
|
// name: "NA-45",
|
||||||
// value: "B06",
|
// value: "na45",
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "Outlaw",
|
name: "Outlaw",
|
||||||
value: "B07",
|
value: "outlaw",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Rytec AMR",
|
name: "Rytec AMR",
|
||||||
value: "B08",
|
value: "rytecamr",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "SVD",
|
|
||||||
value: "B09",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// name: "little_b",
|
||||||
|
// value: "littleb",
|
||||||
|
// },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -343,19 +326,19 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Aggressive",
|
name: "Aggressive",
|
||||||
value: "Aggressive",
|
value: "aggressive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Passive",
|
name: "Passive",
|
||||||
value: "Passive",
|
value: "passive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Search And Destroy",
|
name: "Search & Destroy",
|
||||||
value: "Search And Destroy",
|
value: "snd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -374,47 +357,43 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "S36",
|
name: "S36",
|
||||||
value: "C01",
|
value: "s36",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "UL736",
|
name: "UL736",
|
||||||
value: "C02",
|
value: "ul736",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "RPD",
|
name: "RPD",
|
||||||
value: "C03",
|
value: "rpd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "M4 LMG",
|
name: "M4 LMG",
|
||||||
value: "C04",
|
value: "m4lmg",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Chopper",
|
name: "Chopper",
|
||||||
value: "C05",
|
value: "chopper",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Holger 26",
|
name: "Holger 26",
|
||||||
value: "C06",
|
value: "holger26",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Hades",
|
name: "Hades",
|
||||||
value: "C07",
|
value: "hades",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "PKM",
|
|
||||||
value: "C08",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -426,19 +405,19 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Aggressive",
|
name: "Aggressive",
|
||||||
value: "Aggressive",
|
value: "aggressive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Passive",
|
name: "Passive",
|
||||||
value: "Passive",
|
value: "passive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Search And Destroy",
|
name: "Search & Destroy",
|
||||||
value: "Search And Destroy",
|
value: "snd",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -457,47 +436,43 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "HS2126",
|
name: "HS2126",
|
||||||
value: "E01",
|
value: "hs2126",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "BY15",
|
name: "BY15",
|
||||||
value: "E02",
|
value: "by15",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "HS0405",
|
|
||||||
value: "E03",
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Striker",
|
name: "Striker",
|
||||||
value: "E04",
|
value: "striker",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "KRM 262",
|
name: "KRM_262",
|
||||||
value: "E05",
|
value: "krm262",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Echo",
|
name: "Echo",
|
||||||
value: "E06",
|
value: "echo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HS0405",
|
||||||
|
value: "hs0405",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "R9-0",
|
name: "R9-0",
|
||||||
value: "E07",
|
value: "r90",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "JAK-12",
|
|
||||||
value: "E08",
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dHitman",
|
name: "dHitman",
|
||||||
|
@ -513,11 +488,11 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "ADS",
|
name: "ADS",
|
||||||
value: "ADS",
|
value: "ads",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Hipfire",
|
name: "Hipfire",
|
||||||
value: "Hipfire",
|
value: "hipfire",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -536,36 +511,36 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Kilo Bolt-Action",
|
name: "Kilo Bolt-Action",
|
||||||
value: "F01",
|
value: "kiloboltaction",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "SKS",
|
name: "SKS",
|
||||||
value: "F02",
|
value: "sks",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "SP-R 208",
|
name: "SP-R 208",
|
||||||
value: "F03",
|
value: "spr208",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "MK2",
|
name: "MK2",
|
||||||
value: "F04",
|
value: "mk2",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Stats On Duty",
|
|
||||||
value: "Stats On Duty",
|
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// name: "Little_b",
|
||||||
|
// value: "littleb",
|
||||||
|
// },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -576,15 +551,15 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Aggressive",
|
name: "Aggressive",
|
||||||
value: "Aggressive",
|
value: "aggressive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Passive",
|
name: "Passive",
|
||||||
value: "Passive",
|
value: "passive",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -603,44 +578,40 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "J358",
|
name: "J358",
|
||||||
value: "G01",
|
value: "j358",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "MW11",
|
name: "MW11",
|
||||||
value: "G02",
|
value: "mw11",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: ".50 GS",
|
name: ".50 GS",
|
||||||
value: "G03",
|
value: "gs50",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Renetti",
|
name: "Renetti",
|
||||||
value: "G04",
|
value: "renetti",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Shorty",
|
name: "Shorty",
|
||||||
value: "G05",
|
value: "shorty",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Crossbow",
|
name: "Crossbow",
|
||||||
value: "G06",
|
value: "crossbow",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 3,
|
||||||
name: "author",
|
name: "youtuber",
|
||||||
description: "Select a Content Creator",
|
description: "Select a Content Creator",
|
||||||
required: true,
|
required: true,
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "path.exe",
|
name: "Path.exe",
|
||||||
value: "path.exe",
|
value: "path",
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// name: "Stats On Duty",
|
|
||||||
// value: "Stats On Duty",
|
|
||||||
// },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -651,7 +622,7 @@ module.exports = {
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: "Respawn",
|
name: "Respawn",
|
||||||
value: "Respawn",
|
value: "respawn",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -659,43 +630,141 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const cwts = args[1];
|
const allguns = {
|
||||||
|
ak117: "AK117",
|
||||||
|
m16: "M16",
|
||||||
|
type25: "Type 25",
|
||||||
|
ak47: "AK-47",
|
||||||
|
asm10: "ASM10",
|
||||||
|
m4: "M4",
|
||||||
|
bk57: "BK57",
|
||||||
|
lk24: "LK24",
|
||||||
|
manowar: "Man-O-War",
|
||||||
|
icr1: "ICR-1",
|
||||||
|
kn44: "KN-44",
|
||||||
|
hbra3: "HBRa3",
|
||||||
|
hvk30: "HVK-30",
|
||||||
|
drh: "DR-H",
|
||||||
|
peacekeepermk2: "Peacekeeper MK2",
|
||||||
|
fr556: "FR .556",
|
||||||
|
asval: "AS VAL",
|
||||||
|
cr56amax: "CR-56 AMAX",
|
||||||
|
m13: "M13",
|
||||||
|
swordfish: "Swordfish",
|
||||||
|
|
||||||
|
j358: "J358",
|
||||||
|
gs50: ".50 GS",
|
||||||
|
mw11: "MW11",
|
||||||
|
renetti: "Renetti",
|
||||||
|
shorty: "Shorty",
|
||||||
|
crossbow: "Crossbow",
|
||||||
|
|
||||||
|
kiloboltaction: "Kilo Bolt-Action",
|
||||||
|
sks: "SKS",
|
||||||
|
spr208: "SP-R 208",
|
||||||
|
mk2: "mk2",
|
||||||
|
|
||||||
|
s36: "S36",
|
||||||
|
ul736: "UL736",
|
||||||
|
rpd: "RPD",
|
||||||
|
m4lmg: "M4LMG",
|
||||||
|
chopper: "Chopper",
|
||||||
|
holger26: "Holger 26",
|
||||||
|
hades: "Hades",
|
||||||
|
|
||||||
|
arctic50: "Arctic .50",
|
||||||
|
m21ebr: "M21 EBR",
|
||||||
|
dlq33: "DL Q33",
|
||||||
|
locus: "Locus",
|
||||||
|
// na45: "NA 45",
|
||||||
|
// xpr50: "XPR-50",
|
||||||
|
locus: "Locus",
|
||||||
|
outlaw: "Outlaw",
|
||||||
|
rytecamr: "Rytec AMR",
|
||||||
|
|
||||||
|
hs2126: "HS2126",
|
||||||
|
by15: "BY15",
|
||||||
|
striker: "Striker",
|
||||||
|
krm262: "KRM 262",
|
||||||
|
echo: "Echo",
|
||||||
|
hs0405: "HS0405",
|
||||||
|
r90: "R9-0",
|
||||||
|
|
||||||
|
rus79u: "RUS-79U",
|
||||||
|
hg40: "HG-40",
|
||||||
|
pdw57: "PDW-57",
|
||||||
|
chicom: "Chicom",
|
||||||
|
razorback: "Razorback",
|
||||||
|
msmc: "MSMC",
|
||||||
|
pharo: "Pharo",
|
||||||
|
gks: "GKS",
|
||||||
|
cordite: "Cordite",
|
||||||
|
qq9: "QQ9",
|
||||||
|
fennec: "Fennec",
|
||||||
|
agr556: "AGR 556",
|
||||||
|
qxr: "QXR",
|
||||||
|
pp19bizon: "PP19 Bizon",
|
||||||
|
mx9: "MX9",
|
||||||
|
};
|
||||||
|
const all = {
|
||||||
|
assault_rifle: "Assault Rifle",
|
||||||
|
sniper_rifle: "Sniper Rifle",
|
||||||
|
marksman_rifle: "Marksman Rifle",
|
||||||
|
shotgun: "Shotgun",
|
||||||
|
light_machine_gun: "Light Machine Gun",
|
||||||
|
sub_machine_gun: "Sub Machine Gun",
|
||||||
|
|
||||||
|
path: "Path.exe",
|
||||||
|
dhitman: "dHitman",
|
||||||
|
jokesta: "Jokesta",
|
||||||
|
// littleb:"Little B",
|
||||||
|
|
||||||
|
aggressive: "Aggressive",
|
||||||
|
passive: "Passive",
|
||||||
|
snd: "Search And Destroy",
|
||||||
|
respawn: "Respawn",
|
||||||
|
ads: "ADS",
|
||||||
|
hipfire: "Hipfire",
|
||||||
|
};
|
||||||
|
const gun = args[1];
|
||||||
const cc = args[2];
|
const cc = args[2];
|
||||||
const tag = args[3];
|
const tag = args[3];
|
||||||
const data = await axios
|
const data = await axios
|
||||||
.get(
|
.get(
|
||||||
`${process.env.api}/api/v1/codm/build?cwts=${cwts}&cc=${cc}&tag=${tag}`,
|
`${process.env.api}/api/v1/codm/builds?name=${gun}&cc=${cc}&tag=${tag}`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: process.env.CODM_API_KEY,
|
Authorization: "Gae",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.then(res => res.data)
|
.then(res => res.data)
|
||||||
.catch(e => null);
|
.catch();
|
||||||
if (!data?.cwts) {
|
const unavaliable = new MessageEmbed()
|
||||||
const embed = new MessageEmbed()
|
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`<:nyx_not_available:897378400031879188> We don't have a **${tag}** gunsmith build for the gun with **CWTS 🆔 ${cwts}** by **${cc}**, Please try another tag or a differnt content creator`
|
`<:nyx_not_available:897378400031879188> We don't have a ${all[tag]} **${allguns[gun]}** gunsmith build by **${all[cc]}**, Please try another tag or a differnt content creator`
|
||||||
)
|
)
|
||||||
.setColor(client.color);
|
.setColor(client.color);
|
||||||
interaction.followUp({ embeds: [embed] });
|
if (!data) {
|
||||||
|
interaction.followUp({ embeds: [unavaliable] });
|
||||||
} else {
|
} else {
|
||||||
const arr = [];
|
const arr = [];
|
||||||
data.attachments.map((e, i) => {
|
data.attachments.map((e, i) => {
|
||||||
return arr.push(`**${i + 1}:** ${e}`);
|
return arr.push(`**${i + 1}: ${e}**`);
|
||||||
});
|
});
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setTitle(`${tag} build for ${data.weaponName} from ${data.author}`)
|
.setTitle(
|
||||||
|
`${data.weaponName}(${data.weaponType})'s ${all[tag]} build from ${data.author}`
|
||||||
|
)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`<:nyx_description:897379659665264650> **Description** \`\`\`\n${data.notes}\n \`\`\``
|
`<:nyx_description:897379659665264650> Description \`\`\`\n${data.notes}\n\`\`\``
|
||||||
)
|
)
|
||||||
.setColor(16580400)
|
.setColor(16580400)
|
||||||
.setImage(data.imageUrl)
|
.setImage(data.imageUrl)
|
||||||
.setFooter({
|
.setFooter(
|
||||||
text: `Builds Aggregated by ${client.author}`,
|
`Builds Aggregated by ${client.author}`,
|
||||||
iconURL: client.user.displayAvatarURL(),
|
client.user.displayAvatarURL()
|
||||||
})
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.addFields(
|
.addFields(
|
||||||
{
|
{
|
||||||
|
@ -731,3 +800,29 @@ module.exports = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ENABLE AFTER Holloween
|
||||||
|
|
||||||
|
// run: async (client, interaction, args) => {
|
||||||
|
// const embed = new MessageEmbed()
|
||||||
|
// .setTitle(`Prefix commands are now disabled`)
|
||||||
|
// .setDescription(`Please enable **Application commands** in the channel settings to get access to slash commands, we have discontinued prefix commands.`)
|
||||||
|
// .setColor(client.color)
|
||||||
|
// .setThumbnail(interaction.guild.iconURL({ dynamic: true }))
|
||||||
|
// .addFields(
|
||||||
|
// {
|
||||||
|
// name: "Need help ?",
|
||||||
|
// value: `Join our **[Support Server](https://discord.gg/SR7TeNJG67)**`,
|
||||||
|
// inline: true,
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: "Support us <a:donate:896985486260846614>",
|
||||||
|
// value: `[KoFi](https://ko-fi.com/cathteam)`,
|
||||||
|
// inline: true,
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
// .setThumbnail("../../util/assets/images/nyx_logo_transparent.webp")
|
||||||
|
// .setTimestamp();
|
||||||
|
// interaction.followUp({ embeds: [embed] });
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
|
|
@ -8,10 +8,10 @@ module.exports = {
|
||||||
run: async (client, interaction) => {
|
run: async (client, interaction) => {
|
||||||
const data = async () => {
|
const data = async () => {
|
||||||
const d = await model.findOne({});
|
const d = await model.findOne({});
|
||||||
const weapons =
|
const types = d.Categories;
|
||||||
d.Primary[0][
|
const names = d.Primary;
|
||||||
d.Categories[Math.floor(Math.random() * d.Categories.length)]
|
const category = types[Math.floor(Math.random() * types.length)];
|
||||||
];
|
const weapons = names[0][category];
|
||||||
return `${weapons[Math.floor(Math.random() * weapons.length)]}`;
|
return `${weapons[Math.floor(Math.random() * weapons.length)]}`;
|
||||||
};
|
};
|
||||||
const primary_weapon = await data();
|
const primary_weapon = await data();
|
||||||
|
|
|
@ -15,7 +15,7 @@ module.exports = {
|
||||||
category: "CODM",
|
category: "CODM",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: 3,
|
type: 7,
|
||||||
name: "gun",
|
name: "gun",
|
||||||
description: "Gun name",
|
description: "Gun name",
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -39,7 +39,11 @@ function dmg(inpmsg) {
|
||||||
}
|
}
|
||||||
currDRM = currGun.drm[0];
|
currDRM = currGun.drm[0];
|
||||||
currStats = currGun.stats;
|
currStats = currGun.stats;
|
||||||
currAttachments = common.attachmentsIdentifier(inpmsg, currGun);
|
currAttachments = common.attachmentsIdentifier(
|
||||||
|
inpmsg,
|
||||||
|
currGun.aments,
|
||||||
|
currStats
|
||||||
|
);
|
||||||
if (typeof currAttachments == "string") {
|
if (typeof currAttachments == "string") {
|
||||||
hasError = true;
|
hasError = true;
|
||||||
return currAttachments;
|
return currAttachments;
|
||||||
|
|
6
command/CODM/effects.js
vendored
6
command/CODM/effects.js
vendored
|
@ -114,7 +114,11 @@ function attachments(inpmsg) {
|
||||||
hasAttachments = common.hasAttachments(inpmsg);
|
hasAttachments = common.hasAttachments(inpmsg);
|
||||||
currAttachments = [];
|
currAttachments = [];
|
||||||
if (hasAttachments) {
|
if (hasAttachments) {
|
||||||
currAttachments = common.attachmentsIdentifier(inpmsg, currGun);
|
currAttachments = common.attachmentsIdentifier(
|
||||||
|
inpmsg,
|
||||||
|
currGun.aments,
|
||||||
|
currGun.stats
|
||||||
|
);
|
||||||
if (typeof currAttachments == "string") {
|
if (typeof currAttachments == "string") {
|
||||||
hasError = true;
|
hasError = true;
|
||||||
return currAttachments;
|
return currAttachments;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const c = require("../../client/CODMClient");
|
const { CODMClient } = require("cath");
|
||||||
|
const c = new CODMClient("Gae");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "perk",
|
name: "perk",
|
||||||
description: "Get perk stats",
|
description: "Get perk stats",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const common = require("../../util/functions/common");
|
const common = require("../../util/functions/common");
|
||||||
const data = require("../../util/Data/data.json");
|
const data = require("../../util/Data/data.json");
|
||||||
const { MessageEmbed } = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
let currGun,
|
let currGun,
|
||||||
currStats,
|
currStats,
|
||||||
|
@ -11,6 +11,7 @@ let currGun,
|
||||||
recoilAvailable,
|
recoilAvailable,
|
||||||
chart,
|
chart,
|
||||||
hasError;
|
hasError;
|
||||||
|
const errMsg = "*Generic placeholder error message*";
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "stats",
|
name: "stats",
|
||||||
description: "Check gun stats",
|
description: "Check gun stats",
|
||||||
|
@ -51,17 +52,13 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
repEmb = null;
|
|
||||||
recoilAvailable = false;
|
recoilAvailable = false;
|
||||||
hasError = false;
|
hasError = false;
|
||||||
if (args.length == 1)
|
console.log(args);
|
||||||
repEmb = statsHandler(args.join(" ").replace("\n", " "));
|
const repEmb = statsHandler(args.join(" ").replace("\n", " "));
|
||||||
else repEmb = statsHandler(args.join(" + ").replace("\n", " "));
|
|
||||||
if (hasError) {
|
if (hasError) {
|
||||||
interaction.followUp({
|
interaction.followUp({ embeds: [repEmb] });
|
||||||
content: `**${repEmb || "An error has occured"}**`,
|
}
|
||||||
});
|
|
||||||
} else {
|
|
||||||
if (recoilAvailable) {
|
if (recoilAvailable) {
|
||||||
repEmb.fields.push({
|
repEmb.fields.push({
|
||||||
name: "**Recoil Graph**",
|
name: "**Recoil Graph**",
|
||||||
|
@ -71,8 +68,7 @@ module.exports = {
|
||||||
const recoilImageLink = await chart.getShortUrl();
|
const recoilImageLink = await chart.getShortUrl();
|
||||||
repEmb.image = { url: recoilImageLink };
|
repEmb.image = { url: recoilImageLink };
|
||||||
}
|
}
|
||||||
interaction.followUp({ embeds: [new MessageEmbed(repEmb)] });
|
interaction.followUp({ embeds: [repEmb] });
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -82,38 +78,38 @@ function inpHandler(inpmsg) {
|
||||||
|
|
||||||
function statsHandler(inpmsg) {
|
function statsHandler(inpmsg) {
|
||||||
let statsNames = [
|
let statsNames = [
|
||||||
"Pellets", //0
|
"Pellets",
|
||||||
"Detonation Range", //1
|
"Detonation Range",
|
||||||
"Explosion Radius", //2
|
"Explosion Radius",
|
||||||
"Explosion Damage", //3
|
"Explosion Damage",
|
||||||
"Firing Mode", //4
|
"Firing Mode",
|
||||||
"Rate of Fire", //5
|
"Rate of Fire",
|
||||||
"Bullet in Burst", //6
|
"Bullet in Burst",
|
||||||
"Time Between Burst", //7
|
"Time Between Burst",
|
||||||
"Bullet Speed", //8
|
"Bullet Speed",
|
||||||
"Penetration Level", //9
|
"Penetration Level",
|
||||||
"Bullet Spread", //10
|
"Bullet Spread",
|
||||||
"Idle Sway", //11
|
"Idle Sway",
|
||||||
"Hipfire Pellet Spread", //12
|
"Hipfire Pellet Spread",
|
||||||
"ADS Pellet Spread", //13
|
"ADS Pellet Spread",
|
||||||
"ADS Time", //14
|
"ADS Time",
|
||||||
"Sprint-to-Fire Time", //15
|
"Sprint-to-Fire Time",
|
||||||
"ADS Zoom", //16
|
"ADS Zoom",
|
||||||
"Magazine", //17
|
"Magazine",
|
||||||
"Reserve", //18
|
"Reserve",
|
||||||
"Reload Type", //19
|
"Reload Type",
|
||||||
"Cancel Reload Time", //20
|
"Cancel Reload Time",
|
||||||
"Reload Time", //21
|
"Reload Time",
|
||||||
"Full Reload Time", //22
|
"Full Reload Time",
|
||||||
"Drop Time", //23
|
"Drop Time",
|
||||||
"Raise Time", //24
|
"Raise Time",
|
||||||
"Sprinting Speed", //25
|
"Sprinting Speed",
|
||||||
"Walking Speed", //26
|
"Walking Speed",
|
||||||
"Straifing Speed", //27
|
"Straifing Speed",
|
||||||
"Damage per Tick", //28
|
"Damage per Tick",
|
||||||
"Number of Ticks", //29
|
"Number of Ticks",
|
||||||
"Time Between Ticks", //30
|
"Time Between Ticks",
|
||||||
"Breath Hold Time", //31
|
"Breath Hold Time",
|
||||||
"shouldNeverHappen0",
|
"shouldNeverHappen0",
|
||||||
"shouldNeverHappen1",
|
"shouldNeverHappen1",
|
||||||
"shouldNeverHappen2",
|
"shouldNeverHappen2",
|
||||||
|
@ -130,7 +126,11 @@ function statsHandler(inpmsg) {
|
||||||
currStats = currGun.stats;
|
currStats = currGun.stats;
|
||||||
currDRM = currGun.drm[0];
|
currDRM = currGun.drm[0];
|
||||||
currAttachments = [];
|
currAttachments = [];
|
||||||
currAttachments = common.attachmentsIdentifier(inpmsg, currGun);
|
currAttachments = common.attachmentsIdentifier(
|
||||||
|
inpmsg,
|
||||||
|
currGun.aments,
|
||||||
|
currStats
|
||||||
|
);
|
||||||
if (typeof currAttachments == "string") {
|
if (typeof currAttachments == "string") {
|
||||||
hasError = true;
|
hasError = true;
|
||||||
return currAttachments;
|
return currAttachments;
|
||||||
|
@ -188,8 +188,8 @@ function statsHandler(inpmsg) {
|
||||||
inpIndx = inpIndx.filter(x => outReady[x]);
|
inpIndx = inpIndx.filter(x => outReady[x]);
|
||||||
return inpIndx.length
|
return inpIndx.length
|
||||||
? {
|
? {
|
||||||
name: `**${inpName}**`,
|
name: "**" + inpName + "**",
|
||||||
value: `\`\`\`\n${inpIndx.map(x => outReady[x]).join("\n")}\`\`\``,
|
value: "```\n" + inpIndx.map(x => outReady[x]).join("\n") + "```",
|
||||||
}
|
}
|
||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
|
@ -220,17 +220,17 @@ function statsHandler(inpmsg) {
|
||||||
|
|
||||||
function addUnit(j) {
|
function addUnit(j) {
|
||||||
switch (j) {
|
switch (j) {
|
||||||
case 7:
|
case 07:
|
||||||
case 14:
|
case 14:
|
||||||
case 15:
|
case 15:
|
||||||
case 23:
|
case 23:
|
||||||
case 24:
|
case 24:
|
||||||
case 31:
|
case 31:
|
||||||
return " ms";
|
return " ms";
|
||||||
case 25:
|
|
||||||
case 26:
|
|
||||||
case 27:
|
case 27:
|
||||||
case 28:
|
case 28:
|
||||||
|
case 25:
|
||||||
|
case 26:
|
||||||
return " m/s";
|
return " m/s";
|
||||||
case 20:
|
case 20:
|
||||||
case 21:
|
case 21:
|
||||||
|
@ -238,9 +238,9 @@ function statsHandler(inpmsg) {
|
||||||
return " s";
|
return " s";
|
||||||
case 16:
|
case 16:
|
||||||
return "%";
|
return "%";
|
||||||
case 6:
|
case 06:
|
||||||
return " Rounds";
|
return " Rounds";
|
||||||
case 5:
|
case 05:
|
||||||
return " RPM";
|
return " RPM";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
|
@ -257,11 +257,16 @@ function statsHandler(inpmsg) {
|
||||||
currRecoilArr[2]
|
currRecoilArr[2]
|
||||||
);
|
);
|
||||||
recoilAvailable = true;
|
recoilAvailable = true;
|
||||||
} else recoilAvailable = false;
|
} else {
|
||||||
|
recoilAvailable = false;
|
||||||
if (chart == "none") recoilAvailable = false;
|
}
|
||||||
if (chart == "err") hasError = true;
|
if (chart == "none") {
|
||||||
|
recoilAvailable = false;
|
||||||
|
}
|
||||||
|
if (chart == "err" || currAttachments == "err") {
|
||||||
|
hasError = true;
|
||||||
|
return "Cocaineeee";
|
||||||
|
}
|
||||||
const dmg =
|
const dmg =
|
||||||
common.damageHandler(
|
common.damageHandler(
|
||||||
currDRM.damage,
|
currDRM.damage,
|
||||||
|
@ -277,7 +282,7 @@ function statsHandler(inpmsg) {
|
||||||
currGun.description
|
currGun.description
|
||||||
? {
|
? {
|
||||||
name: "**Description:**",
|
name: "**Description:**",
|
||||||
value: `\`\`\`\n${currGun.description}\`\`\``,
|
value: "```\n" + currGun.description + "```",
|
||||||
}
|
}
|
||||||
: {},
|
: {},
|
||||||
{ name: "**Damage Profile:**", value: dmg },
|
{ name: "**Damage Profile:**", value: dmg },
|
||||||
|
@ -291,7 +296,7 @@ function statsHandler(inpmsg) {
|
||||||
footer: {
|
footer: {
|
||||||
text: "[OUTDATED] All data courtesy of Project Lighthouse 2.0 and CoDM Research Crew",
|
text: "[OUTDATED] All data courtesy of Project Lighthouse 2.0 and CoDM Research Crew",
|
||||||
icon_url:
|
icon_url:
|
||||||
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png",
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ module.exports = {
|
||||||
category: "Config",
|
category: "Config",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "muterole",
|
name: "muterole",
|
||||||
description: "Configure mute role settings for the server",
|
description: "Configure mute role settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -21,7 +21,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "prefix",
|
name: "prefix",
|
||||||
description: "Configure prefix settings for the server",
|
description: "Configure prefix settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -35,7 +35,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "welcome",
|
name: "welcome",
|
||||||
description: "Configure welcome channel settings for the server",
|
description: "Configure welcome channel settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -49,7 +49,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "goodbye",
|
name: "goodbye",
|
||||||
description: "Configure goodbye channel settings for the server",
|
description: "Configure goodbye channel settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -63,7 +63,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "starboard",
|
name: "starboard",
|
||||||
description: "Configure starboard channel settings for the server",
|
description: "Configure starboard channel settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -83,7 +83,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "chatbot",
|
name: "chatbot",
|
||||||
description: "Configure chatbot channel settings for the server",
|
description: "Configure chatbot channel settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -97,7 +97,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "log",
|
name: "log",
|
||||||
description: "Configure log channel settings for the server",
|
description: "Configure log channel settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -116,7 +116,7 @@ module.exports = {
|
||||||
description: "Enable commands/category for the server",
|
description: "Enable commands/category for the server",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "command",
|
name: "command",
|
||||||
description: "To enable commands",
|
description: "To enable commands",
|
||||||
options: [
|
options: [
|
||||||
|
@ -129,7 +129,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "category",
|
name: "category",
|
||||||
description: "To enable categories",
|
description: "To enable categories",
|
||||||
options: [
|
options: [
|
||||||
|
@ -179,7 +179,7 @@ module.exports = {
|
||||||
description: "Disable commands/category for the server",
|
description: "Disable commands/category for the server",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "command",
|
name: "command",
|
||||||
description: "To disable commands",
|
description: "To disable commands",
|
||||||
options: [
|
options: [
|
||||||
|
@ -192,7 +192,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "category",
|
name: "category",
|
||||||
description: "To disable categories",
|
description: "To disable categories",
|
||||||
options: [
|
options: [
|
||||||
|
@ -237,7 +237,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "level",
|
name: "level",
|
||||||
description: "Configure level settings for the server",
|
description: "Configure level settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -250,7 +250,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "nsfw",
|
name: "nsfw",
|
||||||
description: "Configure nsfw settings for the server",
|
description: "Configure nsfw settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -263,7 +263,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "tips",
|
name: "tips",
|
||||||
description: "Configure tips settings for the server",
|
description: "Configure tips settings for the server",
|
||||||
options: [
|
options: [
|
||||||
|
@ -276,7 +276,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "overall",
|
name: "overall",
|
||||||
description: "See overall settings for the server",
|
description: "See overall settings for the server",
|
||||||
options: [],
|
options: [],
|
||||||
|
|
|
@ -6,7 +6,7 @@ module.exports = {
|
||||||
description: "Configure Weapon Master System settings",
|
description: "Configure Weapon Master System settings",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "select",
|
name: "select",
|
||||||
description: "Select the gun for the game",
|
description: "Select the gun for the game",
|
||||||
options: [
|
options: [
|
||||||
|
@ -29,13 +29,13 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "list",
|
name: "list",
|
||||||
description: "See the information for the guns",
|
description: "See the information for the guns",
|
||||||
options: [],
|
options: [],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "info",
|
name: "info",
|
||||||
description: "See the stats of your gun",
|
description: "See the stats of your gun",
|
||||||
},
|
},
|
||||||
|
|
73
command/Fun/choose.js
Normal file
73
command/Fun/choose.js
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
module.exports = {
|
||||||
|
name: "choose",
|
||||||
|
description: "Choose random things",
|
||||||
|
usage: "(Choices)",
|
||||||
|
category: "Fun",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "first",
|
||||||
|
description: "The first choice",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "second",
|
||||||
|
description: "The second choice",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "third",
|
||||||
|
description: "The third choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "forth",
|
||||||
|
description: "The forth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "fifth",
|
||||||
|
description: "The fifth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "sixth",
|
||||||
|
description: "The sixth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "seventh",
|
||||||
|
description: "The seventh choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "eighth",
|
||||||
|
description: "The eighth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "ninth",
|
||||||
|
description: "The ninth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tenth",
|
||||||
|
description: "The tenth choice",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const choices = args[Math.floor(Math.random() * args.length)];
|
||||||
|
interaction.followUp(`I will choose - \`${choices}\``);
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,20 +1,18 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const tnd = require("../../util/Data/tnd.json");
|
const dares = require("../../util/Data/dares.json");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "dare",
|
name: "dare",
|
||||||
description: "The maturity level of the topics the question can relate to",
|
description: "The maturity level of the topics the question can relate to",
|
||||||
run: async (client, interaction) => {
|
run: async (client, interaction) => {
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: interaction.user.tag,
|
interaction.user.tag,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dyamic: true }),
|
interaction.user.displayAvatarURL({ dyamic: true })
|
||||||
})
|
)
|
||||||
.setTitle(tnd.dare[Math.round(Math.random() * tnd.dare.length - 1)])
|
.setTitle(dares[Math.round(Math.random() * (dares.length - 1))])
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
|
|
130
command/Fun/fun.js
Normal file
130
command/Fun/fun.js
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
const { MessageEmbed, MessageAttachment } = require("discord.js");
|
||||||
|
const { random8ball } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "fun",
|
||||||
|
description: "Fun commands",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "8ball",
|
||||||
|
description: "8ball an answer",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "question",
|
||||||
|
description: "The question you want to ask",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "rickroll",
|
||||||
|
description: "Rickroll?",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "emojify",
|
||||||
|
description: "Emojify a sentence",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "text",
|
||||||
|
description: "The text you want to convert",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "pp",
|
||||||
|
description: "Check how long is the user",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to see",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
if (args[0] == "8ball") {
|
||||||
|
const data = await random8ball();
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setAuthor(
|
||||||
|
`🎱 ${interaction.user.tag} asks`,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setDescription(
|
||||||
|
`**🎱Question:** \n${args[1]} \n**🎱Answer:** \n ${data}`
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setTimestamp()
|
||||||
|
.setURL(client.web)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else if (args[0] === "rickroll") {
|
||||||
|
const roll = [
|
||||||
|
"Never gonna give you up",
|
||||||
|
"Never gonna let you down",
|
||||||
|
"Never gonna run around and desert you",
|
||||||
|
"Never gonna make you cry",
|
||||||
|
"Never gonna say goodbye",
|
||||||
|
"Never gonna tell a lie and hurt you",
|
||||||
|
];
|
||||||
|
const rick = roll[Math.floor(Math.random() * roll.length)];
|
||||||
|
interaction.followUp({
|
||||||
|
content: `**${rick}**`,
|
||||||
|
files: [
|
||||||
|
new MessageAttachment(
|
||||||
|
"https://i.pinimg.com/originals/88/82/bc/8882bcf327896ab79fb97e85ae63a002.gif"
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} else if (args[0] === "emojify") {
|
||||||
|
const mapping = {
|
||||||
|
" ": " ",
|
||||||
|
0: ":zero:",
|
||||||
|
1: ":one:",
|
||||||
|
2: ":two:",
|
||||||
|
3: ":three:",
|
||||||
|
4: ":four:",
|
||||||
|
5: ":five:",
|
||||||
|
6: ":six:",
|
||||||
|
7: ":seven:",
|
||||||
|
8: ":eight:",
|
||||||
|
9: ":nine:",
|
||||||
|
"!": ":grey_exclamation:",
|
||||||
|
"?": ":grey_question:",
|
||||||
|
"#": ":hash:",
|
||||||
|
"*": ":asterisk:",
|
||||||
|
};
|
||||||
|
"abcdefghijklmnopqrstuvwxyz".split("").forEach(c => {
|
||||||
|
mapping[c] = mapping[c.toUpperCase()] = ` :regional_indicator_${c}:`;
|
||||||
|
});
|
||||||
|
interaction.followUp(
|
||||||
|
args[1]
|
||||||
|
.split("")
|
||||||
|
.map(c => mapping[c] || c)
|
||||||
|
.join("")
|
||||||
|
);
|
||||||
|
} else if (args[0] === "pp") {
|
||||||
|
const { user } =
|
||||||
|
interaction.guild.members.cache.get(args[1]) || interaction.member;
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.addField(
|
||||||
|
`${user.username}'s peepee`,
|
||||||
|
`8${"=".repeat(Math.floor(Math.random() * 20))}D`
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setTitle("Peepee size machine")
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [embed],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
138
command/Fun/hack.js
Normal file
138
command/Fun/hack.js
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "hack",
|
||||||
|
description: "Hack a user",
|
||||||
|
usage: "(User)",
|
||||||
|
category: "Fun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to hack",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
run: async (client, interaction, args, utils) => {
|
||||||
|
const answers = [
|
||||||
|
"@yousuck.noob",
|
||||||
|
"@hesnoob.haha",
|
||||||
|
"@thisguy.suck",
|
||||||
|
"@paypal.removed",
|
||||||
|
"@noob.haha",
|
||||||
|
"@hacked.xyz",
|
||||||
|
"@susmate.com",
|
||||||
|
"@gmail.sus",
|
||||||
|
"@why-im.withyou",
|
||||||
|
"@someone-end.me",
|
||||||
|
"@isnoob.io",
|
||||||
|
"@username-is.noob",
|
||||||
|
"@hahaget.lost",
|
||||||
|
"@yahoo.sus",
|
||||||
|
"@botmail.zip",
|
||||||
|
"@gmail.com",
|
||||||
|
"@yahoo.com",
|
||||||
|
];
|
||||||
|
const passwords = [
|
||||||
|
"Disb****",
|
||||||
|
"disc******",
|
||||||
|
"pass**********",
|
||||||
|
"get****",
|
||||||
|
"mails***",
|
||||||
|
"endm****",
|
||||||
|
"gamer***********",
|
||||||
|
"asegeio*********",
|
||||||
|
"whys*******",
|
||||||
|
"Brot******",
|
||||||
|
"imwith*******",
|
||||||
|
"luckyyougotthispasswordlolnocencor",
|
||||||
|
"starb*******",
|
||||||
|
"egghunt2***",
|
||||||
|
"secr*****",
|
||||||
|
];
|
||||||
|
const ips = [
|
||||||
|
"10.313.523.502.00.1",
|
||||||
|
"25.537.753.462.29.2",
|
||||||
|
"21.175.866.974.07.08",
|
||||||
|
"32.653.587.825.35.5",
|
||||||
|
"12.172.764.781.22.8",
|
||||||
|
"91.723.242.452.09.3",
|
||||||
|
"92.743.116.896.85.6",
|
||||||
|
"84.091.000.853.54.7",
|
||||||
|
"51.071.124.129.12.0",
|
||||||
|
];
|
||||||
|
const answer = answers[Math.floor(Math.random() * answers.length)];
|
||||||
|
const passwrd = passwords[Math.floor(Math.random() * passwords.length)];
|
||||||
|
const ip = ips[Math.floor(Math.random() * ips.length)];
|
||||||
|
const taggedUser = interaction.guild.members.cache.get(args[0]);
|
||||||
|
await interaction.deleteReply();
|
||||||
|
interaction.channel
|
||||||
|
.send(`Hacking ${taggedUser.user.username}...`)
|
||||||
|
.then(async msg => {
|
||||||
|
utils.sleep(100);
|
||||||
|
msg.edit("Status: ■□□□□□□□□□□ 0%");
|
||||||
|
utils.sleep(100);
|
||||||
|
msg.edit("Status: ■■□□□□□□□□□ 7%: Hacking Email...");
|
||||||
|
utils.sleep(600);
|
||||||
|
msg.edit(
|
||||||
|
`Status: ■■■□□□□□□□□ 8%:\n \`Email: ${taggedUser.user.username}@yousuck.noob\`\n \`Password: ${passwrd}\` `
|
||||||
|
);
|
||||||
|
utils.sleep(600);
|
||||||
|
msg.edit("Status: ■■□□□□□□□□□ 9%: Logging in to the Email...");
|
||||||
|
utils.sleep(2000);
|
||||||
|
msg.edit("Status: ■■■□□□□□□□□ 12%: Turning off the antivirus");
|
||||||
|
utils.sleep(1000);
|
||||||
|
msg.edit("Status: ■■■■□□□□□□ 14%: Downloading SYNAPSE X");
|
||||||
|
utils.sleep(100);
|
||||||
|
msg.edit("Status: ■■■□□□□□□□□ 17%: Deleting Captcha...");
|
||||||
|
utils.sleep(100);
|
||||||
|
msg.edit("Status: ■■□□□□□□□□□ 20%: Deleting Paypal account...");
|
||||||
|
utils.sleep(10);
|
||||||
|
msg.edit("Status: ■■■□□□□□□□□ 21%");
|
||||||
|
utils.sleep(12);
|
||||||
|
msg.edit("Status: ■■■■□□□□□□□ 22%");
|
||||||
|
utils.sleep(100);
|
||||||
|
msg.edit("Status: ■■■■■□□□□□□ 24%: Paypal account deleted");
|
||||||
|
utils.sleep(1000);
|
||||||
|
msg.edit("Status: ■■■■□□□□□□ 29%: Hacking is almost ready...");
|
||||||
|
utils.sleep(80);
|
||||||
|
msg.edit("Status: ■■■□□□□□□□□ 31%");
|
||||||
|
utils.sleep(80);
|
||||||
|
msg.edit("Status: ■■■■□□□□□□□ 36%");
|
||||||
|
utils.sleep(40);
|
||||||
|
msg.edit("Status: ■■■■■□□□□□□ 41%");
|
||||||
|
utils.sleep(60);
|
||||||
|
msg.edit("Status: ■■■■□□□□□□□ 47%");
|
||||||
|
utils.sleep(50);
|
||||||
|
msg.edit("Status: ■■■■■■□□□□□ 53%");
|
||||||
|
utils.sleep(3000);
|
||||||
|
msg.edit(
|
||||||
|
`Status: ■■■■■■■□□□□ 58%: Email password changed so ${taggedUser.user.username} can not login`
|
||||||
|
);
|
||||||
|
utils.sleep(500);
|
||||||
|
msg.edit("Status: ■■■■■■□□□□□ 66%");
|
||||||
|
utils.sleep(60);
|
||||||
|
msg.edit("Status: ■■■■■□□□□□□ 74%");
|
||||||
|
utils.sleep(20);
|
||||||
|
msg.edit(`Status: ■■■■■□□□□□□ 79%: IP address found: ${ip}`);
|
||||||
|
utils.sleep(83);
|
||||||
|
msg.edit("Status: ■■■■■■□□□□ 80%");
|
||||||
|
utils.sleep(50);
|
||||||
|
msg.edit("Status: ■■■■■■■□□□ 85%");
|
||||||
|
utils.sleep(14);
|
||||||
|
msg.edit("Status: ■■■■■■■■■□□ 93%");
|
||||||
|
utils.sleep(70);
|
||||||
|
msg.edit("Status: ■■■■■■■■■■□ 97%");
|
||||||
|
utils.sleep(90);
|
||||||
|
msg.edit("Status: ■■■■■■■■■■■ 100%");
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setDescription(`${taggedUser} has been hacked!`)
|
||||||
|
.addField("Email", `${taggedUser.user.username}${answer}`)
|
||||||
|
.addField("Password", `${passwrd}`)
|
||||||
|
.addField("IP address", `${ip}`)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setColor(client.color);
|
||||||
|
await msg.edit({ embeds: [embed] });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
63
command/Fun/image.js
Normal file
63
command/Fun/image.js
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "image",
|
||||||
|
description: "Generate images",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "meme",
|
||||||
|
description: "Get a meme from reddit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "cat",
|
||||||
|
description: "Get a cat from reddit",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
if (args[0] == "meme") {
|
||||||
|
const subreddits = ["comedyheaven", "dank", "meme", "memes"];
|
||||||
|
const subreddit =
|
||||||
|
subreddits[Math.floor(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(subreddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} else if (args[0] === "cat") {
|
||||||
|
const subreddits = ["cat", "cats"];
|
||||||
|
const subreddit =
|
||||||
|
subreddits[Math.floor(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(subreddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
43
command/Fun/kiss.js
Normal file
43
command/Fun/kiss.js
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "kiss",
|
||||||
|
description: "Kiss someone",
|
||||||
|
category: "Fun",
|
||||||
|
usage: "(User)",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to kiss",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "words",
|
||||||
|
description: "The words you want to say",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
words = args[1];
|
||||||
|
if (user.id === interaction.user.id) {
|
||||||
|
return interaction.followUp("You can't kiss yourself");
|
||||||
|
}
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setDescription(`${interaction.user} **kisses** ${user}`)
|
||||||
|
.setImage(
|
||||||
|
`https://media.discordapp.net/attachments/814310468906123274/817656819416825896/image0.gif`
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
if (words) {
|
||||||
|
embed.addField("Words:", words);
|
||||||
|
}
|
||||||
|
await interaction
|
||||||
|
.followUp({ embeds: [embed] })
|
||||||
|
.then(msg => msg.react("💕"));
|
||||||
|
},
|
||||||
|
};
|
223
command/Fun/rps.js
Normal file
223
command/Fun/rps.js
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "rockpaperscissors",
|
||||||
|
description: "Play RPS with someone",
|
||||||
|
usage: "(User)",
|
||||||
|
category: "Fun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to play with",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
run: async (client, interaction, args, utils) => {
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
if (user.user.id == interaction.user.id) {
|
||||||
|
return interaction.followUp("You can't play with yourself");
|
||||||
|
}
|
||||||
|
if (user.user.bot) return interaction.followUp("You can't play with bots");
|
||||||
|
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setDescription(`Wait for **${user.user.username}** to accept your game`)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
|
||||||
|
const confirm = new Discord.MessageActionRow().addComponents(
|
||||||
|
new Discord.MessageButton()
|
||||||
|
.setLabel("Accept")
|
||||||
|
.setStyle("SUCCESS")
|
||||||
|
.setCustomId("accept")
|
||||||
|
.setEmoji("808683134786863124"),
|
||||||
|
new Discord.MessageButton()
|
||||||
|
.setLabel("Decline")
|
||||||
|
.setStyle("DANGER")
|
||||||
|
.setCustomId("decline")
|
||||||
|
.setEmoji("808683573544353792")
|
||||||
|
);
|
||||||
|
await interaction
|
||||||
|
.followUp({
|
||||||
|
content: `<@!${user.user.id}>`,
|
||||||
|
embeds: [embed],
|
||||||
|
components: [confirm],
|
||||||
|
})
|
||||||
|
.then(async m => {
|
||||||
|
const filter = button => button.user.id == user.user.id;
|
||||||
|
const collector = m.createMessageComponentCollector({
|
||||||
|
filter,
|
||||||
|
type: "BUTTON",
|
||||||
|
time: 60000,
|
||||||
|
});
|
||||||
|
collector.on("collect", button => {
|
||||||
|
if (button.customId == "decline") {
|
||||||
|
button.deferUpdate();
|
||||||
|
return collector.stop("decline");
|
||||||
|
}
|
||||||
|
button.deferUpdate();
|
||||||
|
const pick = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`${interaction.user.username} VS ${user.user.username}`)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setDescription("Choose either 🪨, 📄, or ✂️")
|
||||||
|
.setTimestamp();
|
||||||
|
const choices = new Discord.MessageActionRow().addComponents(
|
||||||
|
new Discord.MessageButton()
|
||||||
|
.setCustomId("rock")
|
||||||
|
.setStyle("SECONDARY")
|
||||||
|
.setEmoji("🪨"),
|
||||||
|
new Discord.MessageButton()
|
||||||
|
.setCustomId("paper")
|
||||||
|
.setStyle("SECONDARY")
|
||||||
|
.setEmoji("📄"),
|
||||||
|
new Discord.MessageButton()
|
||||||
|
.setCustomId("scissors")
|
||||||
|
.setStyle("SECONDARY")
|
||||||
|
.setEmoji("✂️")
|
||||||
|
);
|
||||||
|
m.edit({
|
||||||
|
embeds: [pick],
|
||||||
|
components: [choices],
|
||||||
|
});
|
||||||
|
collector.stop();
|
||||||
|
const users = new Set();
|
||||||
|
users.add(interaction.user.id);
|
||||||
|
users.add(user.user.id);
|
||||||
|
let ping, pong;
|
||||||
|
const filter = b => users.has(b.user.id);
|
||||||
|
const collect = m.createMessageComponentCollector({
|
||||||
|
filter,
|
||||||
|
type: "BUTTON",
|
||||||
|
time: 60000,
|
||||||
|
});
|
||||||
|
collect.on("collect", async b => {
|
||||||
|
users.delete(b.user.id);
|
||||||
|
if (b.user.id == user.user.id) {
|
||||||
|
ping = b.customId;
|
||||||
|
await b.reply({
|
||||||
|
content: `You have choosen **${utils.format(ping)}**`,
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (b.user.id == interaction.user.id) {
|
||||||
|
pong = b.customId;
|
||||||
|
await b.reply({
|
||||||
|
content: `You have choosen **${utils.format(pong)}**`,
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (users.size == 0) return collect.stop();
|
||||||
|
});
|
||||||
|
collect.on("end", (c, reason) => {
|
||||||
|
if (reason == "time") {
|
||||||
|
const timeout = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Timeout")
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
"Game cancelled since a player didn't react in time"
|
||||||
|
);
|
||||||
|
m.edit({
|
||||||
|
embeds: [timeout],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const sit1 = ping == "rock" && pong == "scissors";
|
||||||
|
const sit2 = ping == "scissors" && pong == "rock";
|
||||||
|
const sit3 = ping == "scissors" && pong == "paper";
|
||||||
|
const sit4 = ping == "paper" && pong == "scissors";
|
||||||
|
const sit5 = ping == "paper" && pong == "rock";
|
||||||
|
const sit6 = ping == "rock" && pong == "paper";
|
||||||
|
if (sit1 || sit3 || sit5) {
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`${user.user.username} wins!`)
|
||||||
|
.setColor("GREEN")
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${user.user.username} choice`,
|
||||||
|
`${utils.format(ping)}`
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${interaction.user.username} choice`,
|
||||||
|
`${utils.format(pong)}`
|
||||||
|
)
|
||||||
|
.setTimestamp();
|
||||||
|
m.edit({
|
||||||
|
embeds: [embed],
|
||||||
|
components: [],
|
||||||
|
});
|
||||||
|
} else if (sit2 || sit4 || sit6) {
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`${interaction.user.username} wins!`)
|
||||||
|
.setColor("GREEN")
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${interaction.user.username} choice`,
|
||||||
|
`${utils.format(pong)}`
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${user.user.username} choice`,
|
||||||
|
`${utils.format(ping)}`
|
||||||
|
)
|
||||||
|
.setTimestamp();
|
||||||
|
m.edit({
|
||||||
|
embeds: [embed],
|
||||||
|
components: [],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle(`Tie!`)
|
||||||
|
.setColor("GREY")
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${interaction.user.username} choice`,
|
||||||
|
`${utils.format(pong)}`
|
||||||
|
)
|
||||||
|
.addField(
|
||||||
|
`${user.user.username} choice`,
|
||||||
|
`${utils.format(ping)}`
|
||||||
|
)
|
||||||
|
.setTimestamp();
|
||||||
|
m.edit({ embeds: [embed], components: [] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
collector.on("end", (collected, reason) => {
|
||||||
|
if (reason == "time") {
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Timeout")
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
`**${user.user.username}** did not confirm before 60 seconds of time`
|
||||||
|
);
|
||||||
|
m.edit({
|
||||||
|
embeds: [embed],
|
||||||
|
components: [],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (reason == "decline") {
|
||||||
|
const embed = new Discord.MessageEmbed()
|
||||||
|
.setTitle("Declined")
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
`**${user.user.username}** has declined your game of RPS`
|
||||||
|
);
|
||||||
|
m.edit({
|
||||||
|
embeds: [embed],
|
||||||
|
components: [],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
|
@ -27,7 +27,7 @@ module.exports = {
|
||||||
const user2 = interaction.guild.members.cache.get(args[1]).user.username;
|
const user2 = interaction.guild.members.cache.get(args[1]).user.username;
|
||||||
const loveEmbed = new MessageEmbed()
|
const loveEmbed = new MessageEmbed()
|
||||||
.setColor("dd2e44")
|
.setColor("dd2e44")
|
||||||
.setFooter({ text: `Shipped by ${interaction.user.tag}` })
|
.setFooter(`Shipped by ${interaction.user.tag}`)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setTitle(`💘 | Shipping ${user1} and ${user2} | 💘`)
|
.setTitle(`💘 | Shipping ${user1} and ${user2} | 💘`)
|
||||||
.setDescription(`🔻 | ${user1} \n${ship()}\n🔺 | ${user2}`);
|
.setDescription(`🔻 | ${user1} \n${ship()}\n🔺 | ${user2}`);
|
||||||
|
|
|
@ -22,10 +22,7 @@ module.exports = {
|
||||||
.setTitle(`${user.user.username}'s simp rate`)
|
.setTitle(`${user.user.username}'s simp rate`)
|
||||||
.setDescription(`${user.user.username} is a ${simp}% simp`)
|
.setDescription(`${user.user.username} is a ${simp}% simp`)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setTimestamp(),
|
.setTimestamp(),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,20 +1,18 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const tnd = require("../../util/Data/tnd.json");
|
const truth = require("../../util/Data/truth.json");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "truth",
|
name: "truth",
|
||||||
description: "Gives a random question that has to be answered truthfully",
|
description: "Gives a random question that has to be answered truthfully",
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: interaction.user.tag,
|
interaction.user.tag,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dyamic: true }),
|
interaction.user.displayAvatarURL({ dyamic: true })
|
||||||
})
|
)
|
||||||
.setTitle(tnd.truth[Math.round(Math.random() * tnd.truth.length - 1)])
|
.setTitle(truth[Math.round(Math.random() * truth.length)])
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const questions = require("../../util/Data/wyr.json");
|
const questions = require("../../util/Data/wyr.json");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "wyr",
|
name: "wyr",
|
||||||
description: "Send some would-you rather questions",
|
description: "Send some would-you rather questions",
|
||||||
|
@ -14,15 +15,12 @@ module.exports = {
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`🇦 ${Option1} \n\n **OR** \n\n :regional_indicator_b: ${Option2}`
|
`🇦 ${Option1} \n\n **OR** \n\n :regional_indicator_b: ${Option2}`
|
||||||
)
|
)
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: interaction.user.tag,
|
interaction.user.tag,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dyamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
})
|
)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
wyrmessage = await interaction.followUp({ embeds: [embed] });
|
wyrmessage = await interaction.followUp({ embeds: [embed] });
|
||||||
wyrmessage.react("🇦");
|
wyrmessage.react("🇦");
|
||||||
|
|
144
command/Giveaway/giveaway.js
Normal file
144
command/Giveaway/giveaway.js
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
const GiveawaysClient = require("../../client/GiveawaysClient");
|
||||||
|
module.exports = {
|
||||||
|
name: "giveaway",
|
||||||
|
description: "Giveaway",
|
||||||
|
UserPerms: ["MANAGE_MESSAGES"],
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "start",
|
||||||
|
description: "Start a giveaway",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "prize",
|
||||||
|
description: "The prize of the giveaway",
|
||||||
|
required: true,
|
||||||
|
choices: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "winners",
|
||||||
|
description: "The amount of winners of the giveaway",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "time",
|
||||||
|
description: "The amount of time of the giveaway",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel of the giveaway",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 8,
|
||||||
|
name: "role1",
|
||||||
|
description: "The required role to join the giveaway",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 8,
|
||||||
|
name: "role2",
|
||||||
|
description: "The required role to join the giveaway",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 8,
|
||||||
|
name: "role3",
|
||||||
|
description: "The required role to join the giveaway",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "reroll",
|
||||||
|
description: "Reroll a giveaway",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "message",
|
||||||
|
description: "The message ID of the giveaway",
|
||||||
|
required: true,
|
||||||
|
choices: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "end",
|
||||||
|
description: "End a giveaway",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "message",
|
||||||
|
description: "The message ID of the giveaway",
|
||||||
|
required: true,
|
||||||
|
choices: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils) => {
|
||||||
|
if (args[0] == "start") {
|
||||||
|
const [, prize, winners, time, channel, roles1, roles2, roles3] = args;
|
||||||
|
if (!utils.ms(time)) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: "Time must be a valid time to parse (Example: 10m, 100s)",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
await GiveawaysClient.create(client, {
|
||||||
|
prize,
|
||||||
|
host: interaction.user.id,
|
||||||
|
winners,
|
||||||
|
endAfter: time,
|
||||||
|
requirements: roles1
|
||||||
|
? {
|
||||||
|
Enabled: true,
|
||||||
|
Roles: [roles1],
|
||||||
|
}
|
||||||
|
: roles2 && roles1
|
||||||
|
? {
|
||||||
|
Enabled: true,
|
||||||
|
Roles: [roles1, roles2],
|
||||||
|
}
|
||||||
|
: roles1 && roles2 && roles3
|
||||||
|
? {
|
||||||
|
Enabled: true,
|
||||||
|
Roles: [roles1, roles2, roles3],
|
||||||
|
}
|
||||||
|
: { Enabled: false },
|
||||||
|
Channel: channel,
|
||||||
|
});
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Giveaway is started in ${interaction.guild.channels.cache.get(
|
||||||
|
channel
|
||||||
|
)}`,
|
||||||
|
});
|
||||||
|
} else if (args[0] == "reroll") {
|
||||||
|
const giveaway = await GiveawaysClient.getByMessage(args[1]);
|
||||||
|
const m = await client.guilds.cache
|
||||||
|
.get(giveaway.Guild)
|
||||||
|
.channels.cache.get(giveaway.Channel)
|
||||||
|
.messages.fetch(args[1]);
|
||||||
|
if (!m) {
|
||||||
|
interaction.followUp({ content: "Unable to find the giveaway ⚠" });
|
||||||
|
} else {
|
||||||
|
await GiveawaysClient.end(m, giveaway, m);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const giveaway = await GiveawaysClient.getByMessage(args[1]);
|
||||||
|
const m = await client.guilds.cache
|
||||||
|
.get(giveaway.Guild)
|
||||||
|
.channels.cache.get(giveaway.Channel)
|
||||||
|
.messages.fetch(args[1]);
|
||||||
|
if (!m) {
|
||||||
|
interaction.followUp({ content: "Unable to find the giveaway ⚠" });
|
||||||
|
} else {
|
||||||
|
await GiveawaysClient.end(m, giveaway, m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -17,10 +17,10 @@ module.exports = {
|
||||||
const member =
|
const member =
|
||||||
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: member.user.tag,
|
member.user.tag,
|
||||||
iconURL: member.user.displayAvatarURL({ dynamic: true, size: 1024 }),
|
member.user.displayAvatarURL({ dynamic: true, size: 1024 })
|
||||||
})
|
)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTitle(`${member.user.username}'s Avatar`)
|
.setTitle(`${member.user.username}'s Avatar`)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
@ -41,10 +41,7 @@ module.exports = {
|
||||||
.setImage(
|
.setImage(
|
||||||
member.user.avatarURL({ size: 2048, dynamic: true, format: "png" })
|
member.user.avatarURL({ size: 2048, dynamic: true, format: "png" })
|
||||||
)
|
)
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
|
52
command/Information/banner.js
Normal file
52
command/Information/banner.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "banner",
|
||||||
|
description: "Show user's banner",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
usage: "{User}",
|
||||||
|
category: "Information",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to see",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const { user } =
|
||||||
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
|
const data = await user.fetch();
|
||||||
|
if (data?.banner) {
|
||||||
|
const extension = data.banner.startsWith("a_") ? ".gif" : ".png";
|
||||||
|
const url = `https://cdn.discordapp.com/banners/${user.id}/${data.banner}${extension}?size=2048`;
|
||||||
|
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setDescription(`[Link to Banner](${url})`)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setTitle(`${user.tag}'s Banner`)
|
||||||
|
.setImage(url)
|
||||||
|
.setColor(data?.hexAccentColor || client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else if (data?.hexAccentColor) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(
|
||||||
|
`**${user.tag}** does not have a banner but they have an accent color`
|
||||||
|
)
|
||||||
|
.setColor(data?.hexAccentColor);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(
|
||||||
|
`Seems like **${user.username}** doesn't have a banner or an accent color.`
|
||||||
|
)
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,12 +1,14 @@
|
||||||
const { MessageEmbed, version: djsversion } = require("discord.js");
|
const { MessageEmbed, version: djsversion } = require("discord.js");
|
||||||
const version = require("../../package.json").version;
|
const version = require("../../package.json").version;
|
||||||
const { utc } = require("moment");
|
const { utc } = require("moment");
|
||||||
|
const os = require("os");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "botinfo",
|
name: "botinfo",
|
||||||
description: "Check the info of the bot",
|
description: "Check the info of the bot",
|
||||||
category: "Information",
|
category: "Information",
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
run: async (client, interaction) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
|
const core = os.cpus()[0];
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setTitle(`NYX - CODM Gunsmith Bot`)
|
.setTitle(`NYX - CODM Gunsmith Bot`)
|
||||||
.setURL(
|
.setURL(
|
||||||
|
@ -36,28 +38,39 @@ module.exports = {
|
||||||
.reduce((a, b) => a + b.memberCount, 0)
|
.reduce((a, b) => a + b.memberCount, 0)
|
||||||
.toLocaleString()}
|
.toLocaleString()}
|
||||||
Channels ❯ \`${client.channels.cache.size.toLocaleString()}\`
|
Channels ❯ \`${client.channels.cache.size.toLocaleString()}\`
|
||||||
Commands ❯ \`${client.slashCommands.size}\`
|
Commands ❯ \`${client.commands.size}\`
|
||||||
`,
|
`,
|
||||||
inline: true,
|
inline: true,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.addFields({
|
.addFields(
|
||||||
|
{
|
||||||
name: `Platform`,
|
name: `Platform`,
|
||||||
value: `
|
value: `
|
||||||
NYX ❯ \`v${version}\`
|
NYX ❯ \`v${version}\`
|
||||||
Discord.js ❯ \`v${djsversion}\`
|
Discord.js ❯ \`v${djsversion}\`
|
||||||
Node.js ❯ \`${process.version}\``,
|
Node.js ❯ \`${process.version}\``,
|
||||||
})
|
},
|
||||||
|
{
|
||||||
|
name: `Hardware`,
|
||||||
|
value: `
|
||||||
|
Uptime:** ${utils.timer(os.uptime() * 1000, { long: true })}
|
||||||
|
Platform:** ${process.platform}
|
||||||
|
CPU:**
|
||||||
|
\u3000 Cores: ${os.cpus().length}
|
||||||
|
\u3000 Model: ${core.model}
|
||||||
|
\u3000 Speed: ${core.speed}MHz
|
||||||
|
**`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
.addFields({
|
.addFields({
|
||||||
name: `**${client.author}**`,
|
name: `**${client.author}**`,
|
||||||
value: `**Development Management**\n\u3000Ń1ght#0001\n\u3000Cat drinking a cat#0795\n\u3000mightyful#6536\n\u3000Thunder#2128\n\u3000mobo#9277\n
|
value: `**Development Management**\n\u3000Ń1ght#0001\n\u3000Cat drinking a cat#0795\n\u3000mightyful#6536\n\u3000Thunder#2128\n\u3000mobo#9277\n
|
||||||
**Research & Documentation**\n\u3000𝔔𝓻𝔦ค𝔁𝔖ค𝔦ӄø#0690\n\u3000Thunder#2128\n
|
**Research & Documentation**\n\u3000𝔔𝓻𝔦ค𝔁𝔖ค𝔦ӄø#0690\n\u3000Thunder#2128\n
|
||||||
**Website**\n\u3000Chunchunmaru#8570`,
|
**Website**\n\u3000Chunchunmaru#8570`,
|
||||||
})
|
})
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
|
|
|
@ -80,10 +80,10 @@ module.exports = {
|
||||||
.setThumbnail(
|
.setThumbnail(
|
||||||
"https://media.discordapp.net/attachments/896078559293104128/896392631565828146/nyx_logo_transparent.webp"
|
"https://media.discordapp.net/attachments/896078559293104128/896392631565828146/nyx_logo_transparent.webp"
|
||||||
)
|
)
|
||||||
.setFooter({
|
.setFooter(
|
||||||
text: `Requested by ${interaction.user.tag}`,
|
`Requested by ${interaction.user.tag}`,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
});
|
);
|
||||||
const components = state => [
|
const components = state => [
|
||||||
new Discord.MessageActionRow().addComponents(
|
new Discord.MessageActionRow().addComponents(
|
||||||
new Discord.MessageSelectMenu()
|
new Discord.MessageSelectMenu()
|
||||||
|
@ -122,9 +122,7 @@ module.exports = {
|
||||||
)
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter({
|
.setFooter(`Please use /help (Command Name) for more details`)
|
||||||
text: `Please use /help (Command Name) for more details`,
|
|
||||||
})
|
|
||||||
.setDescription(
|
.setDescription(
|
||||||
category.commands
|
category.commands
|
||||||
.map(cmd => {
|
.map(cmd => {
|
||||||
|
@ -170,26 +168,28 @@ module.exports = {
|
||||||
"**Command**:",
|
"**Command**:",
|
||||||
command.name ? `\`${command.name}\`` : "N/A"
|
command.name ? `\`${command.name}\`` : "N/A"
|
||||||
);
|
);
|
||||||
if (command.usage)
|
if (command.usage) {
|
||||||
embed.addField("**Usage**:", `\`/${command.name} ${command.usage}\``);
|
embed.addField("**Usage**:", `\`/${command.name} ${command.usage}\``);
|
||||||
else embed.addField("**Usage**:", `\`/${command.name}\``);
|
} else {
|
||||||
|
embed.addField("**Usage**:", `\`/${command.name}\``);
|
||||||
if (command.description)
|
}
|
||||||
|
if (command.description) {
|
||||||
embed.addField("**Description**:", command.description);
|
embed.addField("**Description**:", command.description);
|
||||||
|
}
|
||||||
if (command.timeout)
|
if (command.timeout) {
|
||||||
embed.addField("**Cooldown**:", utils.timer(command.timeout));
|
embed.addField("**Cooldown**:", utils.timer(command.timeout));
|
||||||
|
}
|
||||||
if (command.UserPerms)
|
if (command.UserPerms) {
|
||||||
embed.addField("**Required User Permission**:", UserPerms);
|
embed.addField("**Required User Permission**:", UserPerms);
|
||||||
|
}
|
||||||
if (command.BotPerms)
|
if (command.BotPerms) {
|
||||||
embed.addField("**Required Bot Permission**:", BotPerms);
|
embed.addField("**Required Bot Permission**:", BotPerms);
|
||||||
|
}
|
||||||
embed
|
embed
|
||||||
.setFooter({
|
.setFooter(
|
||||||
text: `Requested by ${interaction.user.tag}`,
|
`Requested by ${interaction.user.tag}`,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
})
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setColor(client.color);
|
.setColor(client.color);
|
||||||
|
|
185
command/Information/serverinfo.js
Normal file
185
command/Information/serverinfo.js
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const moment = require("moment");
|
||||||
|
const filterLevels = {
|
||||||
|
DISABLED: "Off",
|
||||||
|
MEMBERS_WITHOUT_ROLES: "No Role",
|
||||||
|
ALL_MEMBERS: "Everyone",
|
||||||
|
};
|
||||||
|
|
||||||
|
const verificationLevels = {
|
||||||
|
NONE: "None",
|
||||||
|
LOW: "Low",
|
||||||
|
MEDIUM: "Medium",
|
||||||
|
HIGH: "High",
|
||||||
|
VERY_HIGH: "Very High",
|
||||||
|
};
|
||||||
|
|
||||||
|
const regions = {
|
||||||
|
brazil: "Brazil",
|
||||||
|
europe: "Europe",
|
||||||
|
hongkong: "Hong Kong",
|
||||||
|
india: "India",
|
||||||
|
japan: "Japan",
|
||||||
|
russia: "Russia",
|
||||||
|
singapore: "Singapore",
|
||||||
|
southafrica: "South Africa",
|
||||||
|
sydeny: "Sydeny",
|
||||||
|
"us-central": "US Central",
|
||||||
|
"us-east": "US East",
|
||||||
|
"us-west": "US West",
|
||||||
|
"us-south": "US South",
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "serverinfo",
|
||||||
|
description: "Check the info of the server",
|
||||||
|
category: "Information",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "server",
|
||||||
|
description: "The server you want to see (Paste Server ID)",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils) => {
|
||||||
|
try {
|
||||||
|
const g = client.guilds.cache.get(args[0]) || interaction.guild;
|
||||||
|
const vanityCode = g.vanityURLCode;
|
||||||
|
let vanityInvite = `https://discord.gg/${vanityCode}`;
|
||||||
|
if (vanityCode === null) vanityInvite = "No custom URL";
|
||||||
|
const members = g.members.cache;
|
||||||
|
const roles = g.roles.cache
|
||||||
|
.sort((a, b) => b.position - a.position)
|
||||||
|
.map(role => role.toString());
|
||||||
|
const owner = await g.fetchOwner();
|
||||||
|
const voiceChannel = g.channels.cache.filter(
|
||||||
|
ch => ch.type === "GUILD_VOICE"
|
||||||
|
).size;
|
||||||
|
const textChannel = g.channels.cache.filter(
|
||||||
|
ch => ch.type === "GUILD_TEXT"
|
||||||
|
).size;
|
||||||
|
const categoryChannel = g.channels.cache.filter(
|
||||||
|
ch => ch.type === "GUILD_CATEGORY"
|
||||||
|
).size;
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTimestamp()
|
||||||
|
.setTitle("**Server Information**")
|
||||||
|
.setAuthor(`${g.name}`, g.iconURL({ dynamic: true }))
|
||||||
|
.setColor(client.color)
|
||||||
|
.setDescription(g.description || "No Description")
|
||||||
|
.setThumbnail(g.iconURL({ dynamic: true, size: 1024 }))
|
||||||
|
.addFields(
|
||||||
|
{
|
||||||
|
name: `<:nyx_owner:897418259433943120> Owner Info`,
|
||||||
|
value: `
|
||||||
|
**Owner ❯** ${owner}
|
||||||
|
🆔 **Owner ID ❯** \`${owner.id}\`
|
||||||
|
`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `Misc Info`,
|
||||||
|
value: `
|
||||||
|
**🆔 Server ID ❯** \`${g.id}\`
|
||||||
|
**🌐 Region ❯** ${regions[g.regions]}
|
||||||
|
**🔗 Vanity Link ❯** [${vanityCode}](${vanityInvite})
|
||||||
|
`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `<a:nyx_last_update:897381474330873887> Creation Date`,
|
||||||
|
value: `
|
||||||
|
${moment(g.createdTimestamp).format("LL")} ${moment(
|
||||||
|
g.createdTimestamp
|
||||||
|
).format("LTS")} (${moment(g.createdTimestamp).fromNow()})`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
// Row 2
|
||||||
|
{
|
||||||
|
name: `<:4chanluv:836623612689121320> Emojies ${g.emojis.cache}`,
|
||||||
|
value: `
|
||||||
|
**Static ❯** ${g.emojis.cache.size.toString()}
|
||||||
|
**Animated ❯** ${g.emojis.cache
|
||||||
|
.filter(emoji => emoji.animated)
|
||||||
|
.size.toString()}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `Member Statistics`,
|
||||||
|
value: `
|
||||||
|
👥 **Total❯** ${g.memberCount.toString()}
|
||||||
|
🚶 **Users❯** ${members
|
||||||
|
.filter(member => !member.user.bot)
|
||||||
|
.size.toString()}
|
||||||
|
🤖 **Bots❯** ${members
|
||||||
|
.filter(member => member.user.bot)
|
||||||
|
.size.toString()}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `Channel Info`,
|
||||||
|
value: `
|
||||||
|
📁 **Categories ❯** ${categoryChannel}
|
||||||
|
#️⃣ **Text❯** ${textChannel}
|
||||||
|
🔊 **Voice❯** ${voiceChannel}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
// Row 3
|
||||||
|
{
|
||||||
|
name: `Server Specification`,
|
||||||
|
value: `
|
||||||
|
**<:partner:840231939944480829> Partnered ❯** ${
|
||||||
|
g.partnered
|
||||||
|
? "<a:nyx_checkmark:897240322411724841>"
|
||||||
|
: "<a:nyx_cross:897244999211696198>"
|
||||||
|
}
|
||||||
|
**<:verifiedserver:897410018234728449> Verified ❯** ${
|
||||||
|
g.verified
|
||||||
|
? "<a:nyx_checkmark:897240322411724841>"
|
||||||
|
: "<a:nyx_cross:897244999211696198>"
|
||||||
|
}
|
||||||
|
**🚥 Verification Level ❯** ${verificationLevels[g.verificationLevel]}
|
||||||
|
**💢 Explicit Filter ❯** ${filterLevels[g.explicitContentFilter]}
|
||||||
|
**Tier ❯** ${
|
||||||
|
g.premiumTier == "TIER_3"
|
||||||
|
? "3 <:nyx_tier3:897406181511946261>"
|
||||||
|
: g.premiumTier == "TIER_2"
|
||||||
|
? "2 <:nyx_tier2:897406181541281792>"
|
||||||
|
: g.premiumTier == "TIER_1"
|
||||||
|
? "1 <:nyx_tier1:897406181558067210>"
|
||||||
|
: "0"
|
||||||
|
}
|
||||||
|
**Count ❯** ${g.premiumSubscriptionCount || "0"}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `<a:nyx_community:897419330478825512> Community Features`,
|
||||||
|
value: `${
|
||||||
|
utils.fixFeatures(g.features) || "No Community Features"
|
||||||
|
}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `👔 Role Info [${roles.length}]`,
|
||||||
|
value: `${
|
||||||
|
roles.length < 10
|
||||||
|
? roles.join(" **|** ")
|
||||||
|
: roles.length > 10
|
||||||
|
? `${roles.slice(0, 10).join(" **|** ")}\n+${
|
||||||
|
roles.length - 10
|
||||||
|
} roles...`
|
||||||
|
: "None"
|
||||||
|
}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setURL(vanityCode ? vanityInvite : "https://cath.gq/")
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -3,7 +3,7 @@ module.exports = {
|
||||||
name: "kick",
|
name: "kick",
|
||||||
description: "Kick an user",
|
description: "Kick an user",
|
||||||
UserPerms: ["KICK_MEMBERS"],
|
UserPerms: ["KICK_MEMBERS"],
|
||||||
BotPerms: ["KICK_MEMBERS"],
|
BotPems: ["KICK_MEMBERS"],
|
||||||
usage: "(User) {Reason}",
|
usage: "(User) {Reason}",
|
||||||
category: "Moderation",
|
category: "Moderation",
|
||||||
options: [
|
options: [
|
||||||
|
|
|
@ -8,7 +8,7 @@ module.exports = {
|
||||||
category: "Moderation",
|
category: "Moderation",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "add",
|
name: "add",
|
||||||
description: "Warn a user",
|
description: "Warn a user",
|
||||||
options: [
|
options: [
|
||||||
|
@ -27,7 +27,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "list",
|
name: "list",
|
||||||
description: "Show a list of warnings of an user",
|
description: "Show a list of warnings of an user",
|
||||||
options: [
|
options: [
|
||||||
|
@ -40,7 +40,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "remove",
|
name: "remove",
|
||||||
description: "Remove a latest warn for an user",
|
description: "Remove a latest warn for an user",
|
||||||
options: [
|
options: [
|
||||||
|
@ -59,7 +59,7 @@ module.exports = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "clear",
|
name: "clear",
|
||||||
description: "Clear an user's warns",
|
description: "Clear an user's warns",
|
||||||
options: [
|
options: [
|
||||||
|
|
|
@ -4,13 +4,13 @@ module.exports = {
|
||||||
category: "Music",
|
category: "Music",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "track",
|
name: "track",
|
||||||
description: "Loop the track",
|
description: "Loop the track",
|
||||||
options: [],
|
options: [],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "SUB_COMMAND",
|
type: 1,
|
||||||
name: "queue",
|
name: "queue",
|
||||||
description: "Loop the whole queue",
|
description: "Loop the whole queue",
|
||||||
options: [],
|
options: [],
|
||||||
|
|
40
command/NSFW/ass.js
Normal file
40
command/NSFW/ass.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "ass",
|
||||||
|
description: "Get some ass images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const subreddits = ["ass", "BestBooties", "BootyGIFs", "booty_queens"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
48
command/NSFW/blowjob.js
Normal file
48
command/NSFW/blowjob.js
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "blowjob",
|
||||||
|
description: "Get some blowjob images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const subreddits = [
|
||||||
|
"BlowJob",
|
||||||
|
"blowjobs",
|
||||||
|
"blowjobgifs",
|
||||||
|
"OralSex",
|
||||||
|
"PushHerHead",
|
||||||
|
"ThroatFuck",
|
||||||
|
];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
40
command/NSFW/boobs.js
Normal file
40
command/NSFW/boobs.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "boobs",
|
||||||
|
description: "Get some boobie images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const subreddits = ["boobs", "GrabHerTitties", "titfuck"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
40
command/NSFW/hentai.js
Normal file
40
command/NSFW/hentai.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "hentai",
|
||||||
|
description: "Get some hentai images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const subreddits = ["hentai", "HentaiAnime", "nekogirls"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
40
command/NSFW/milf.js
Normal file
40
command/NSFW/milf.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "milf",
|
||||||
|
description: "Get some milf images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
const subreddits = ["milf", "OnlyHotMilfs", "realmoms"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
42
command/NSFW/pussy.js
Normal file
42
command/NSFW/pussy.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "pussy",
|
||||||
|
description: "Get some vagina images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
const subreddits = ["vagina", "GodPussy", "peachlips"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
42
command/NSFW/thighs.js
Normal file
42
command/NSFW/thighs.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { getreddit } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "thighs",
|
||||||
|
description: "Get some thighs images",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
if (!interaction.channel.nsfw) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`AYO Calm Yo Cheeks`)
|
||||||
|
.setDescription("This command only works in NSFW Channels!")
|
||||||
|
.setImage(
|
||||||
|
"https://media.discordapp.net/attachments/851761493815853060/893777701599584266/warning.gif"
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
const subreddits = ["thighs", "PerfectThighs", "thickthighs"];
|
||||||
|
const reddit = subreddits[Math.round(Math.random() * subreddits.length)];
|
||||||
|
const data = await getreddit(reddit);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed({
|
||||||
|
title: data.title,
|
||||||
|
url: data.url,
|
||||||
|
image: { url: data.image },
|
||||||
|
timestamp: Date.now(),
|
||||||
|
footer: { text: data.footer },
|
||||||
|
color: client.color,
|
||||||
|
author: {
|
||||||
|
name: interaction.user.tag,
|
||||||
|
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,13 +1,9 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "economy",
|
|
||||||
category: "Owner",
|
|
||||||
description: "Add/Remove coins from someone",
|
|
||||||
Owner: true,
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: "SUB_COMMAND",
|
|
||||||
name: "add",
|
name: "add",
|
||||||
description: "Remove coins from someone",
|
category: "Owner",
|
||||||
|
usage: "(Number)",
|
||||||
|
description: "Add coins from someone",
|
||||||
|
Owner: true,
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: 6,
|
type: 6,
|
||||||
|
@ -22,29 +18,7 @@ module.exports = {
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "SUB_COMMAND",
|
|
||||||
name: "rmv",
|
|
||||||
description: "Remove coins from someone",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 6,
|
|
||||||
name: "user",
|
|
||||||
description: "The user you want to remove",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 4,
|
|
||||||
name: "cp",
|
|
||||||
description: "The amount of CP you want to remove",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
if (args[0] === "add") {
|
|
||||||
await client.add(args[0], args[1], interaction);
|
await client.add(args[0], args[1], interaction);
|
||||||
interaction.followUp({
|
interaction.followUp({
|
||||||
content: `<a:nyx_checkmark:897240322411724841> Successfully added **${interaction.options.getInteger(
|
content: `<a:nyx_checkmark:897240322411724841> Successfully added **${interaction.options.getInteger(
|
||||||
|
@ -53,16 +27,5 @@ module.exports = {
|
||||||
interaction.options.getUser("user").username
|
interaction.options.getUser("user").username
|
||||||
}**'s balance`,
|
}**'s balance`,
|
||||||
});
|
});
|
||||||
}
|
|
||||||
if (args[0] === "rmv") {
|
|
||||||
await client.rmv(args[0], args[1]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `<a:nyx_checkmark:897240322411724841> Successfully removed **${interaction.options.getInteger(
|
|
||||||
"cp"
|
|
||||||
)}** ${client.currency} from **${
|
|
||||||
interaction.options.getUser("user").username
|
|
||||||
}**'s balance`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,7 @@ module.exports = {
|
||||||
name: "blacklist",
|
name: "blacklist",
|
||||||
category: "Owner",
|
category: "Owner",
|
||||||
usage: "(User) (Toggle) (Reason)",
|
usage: "(User) (Toggle) (Reason)",
|
||||||
description: "Manage Blacklisted Users",
|
description: "Blacklist someone from the bot",
|
||||||
Owner: true,
|
Owner: true,
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
|
@ -13,8 +13,8 @@ module.exports = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 5,
|
type: 5,
|
||||||
name: "blacklist",
|
name: "yesno",
|
||||||
description: "Whether to blacklist or whitelist",
|
description: "Whether blacklist or whitelist",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -26,34 +26,18 @@ module.exports = {
|
||||||
],
|
],
|
||||||
run: async (client, interaction) => {
|
run: async (client, interaction) => {
|
||||||
const user = interaction.options.getUser("user");
|
const user = interaction.options.getUser("user");
|
||||||
const toggle = interaction.options.getBoolean("blacklist");
|
const toggle = interaction.options.getBoolean("yesno");
|
||||||
const reason = interaction.options.getString("reason");
|
const reason = interaction.options.getString("reason");
|
||||||
if (toggle === true) {
|
if (toggle === true) {
|
||||||
await client.data.BK(user.id, toggle, reason);
|
await client.data.BK(user.id, toggle, reason);
|
||||||
const embed = new MessageEmbed()
|
interaction.followUp({
|
||||||
.setTitle(
|
content: `**Blacklisted** ${user.username}.\n**Reason: **${reason}`,
|
||||||
"<a:nyx_checkmark:897240322411724841> Successfully Blacklisted"
|
});
|
||||||
)
|
|
||||||
.setDescription(
|
|
||||||
`**User:** ${user.user.tag} \`(${user.id})\`\n**Reason:** ${reason} \n**Blacklisted by:** ${interaction.member}`
|
|
||||||
)
|
|
||||||
.setURL(client.web)
|
|
||||||
.setColor(client.color)
|
|
||||||
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
|
||||||
.setTimestamp();
|
|
||||||
interaction.followUp({ embeds: [embed] });
|
|
||||||
} else {
|
} else {
|
||||||
await client.data.BK(user.id, toggle, reason);
|
await client.data.BK(user.id, toggle, reason);
|
||||||
const embed = new MessageEmbed()
|
interaction.followUp({
|
||||||
.setTitle("<a:nyx_checkmark:897240322411724841> Removed From Blacklist")
|
content: `Removed blacklist from ${user.username}`,
|
||||||
.setDescription(
|
});
|
||||||
`**User:** ${user.user.tag} \`(${user.id})\`\n**Reason:** ${reason} \n**Whitelisted by:** ${interaction.member}`
|
|
||||||
)
|
|
||||||
.setURL(client.web)
|
|
||||||
.setColor(client.color)
|
|
||||||
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
|
||||||
.setTimestamp();
|
|
||||||
interaction.followUp({ embeds: [embed] });
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -47,22 +47,19 @@ module.exports = {
|
||||||
evaled = err;
|
evaled = err;
|
||||||
}
|
}
|
||||||
if (typeof evaled !== "string") evaled = require("util").inspect(evaled);
|
if (typeof evaled !== "string") evaled = require("util").inspect(evaled);
|
||||||
console.log(evaled);
|
evaled = utils.chunk(evaled, 750);
|
||||||
evaled = chunk([evaled], 750);
|
|
||||||
console.log(evaled);
|
|
||||||
let reactions = ["❌", "⏪", "◀️", "⏹️", "▶️", "⏩"],
|
let reactions = ["❌", "⏪", "◀️", "⏹️", "▶️", "⏩"],
|
||||||
page = 0,
|
page = 0,
|
||||||
evaledEmbed = new Discord.MessageEmbed()
|
evaledEmbed = new Discord.MessageEmbed()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setDescription(`\`\`\`js\n${evaled[0]}\n\`\`\``)
|
.setDescription(`\`\`\`js\n${evaled[0]}\n\`\`\``)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: `Evaled by ${interaction.user.tag}`,
|
`Evaled by ${interaction.user.tag}`,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
});
|
)
|
||||||
const mainMessage = await interaction.channel.send({
|
.addField(`Type of`, `\`\`\`js\n${typeof evaled[0]}\n\`\`\``);
|
||||||
embeds: [evaledEmbed],
|
const mainMessage = await interaction.channel.send({ embeds: [evaledEmbed] });
|
||||||
});
|
|
||||||
Discord.TextChannel.prototype.send = oldSend;
|
Discord.TextChannel.prototype.send = oldSend;
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
(evaled.length === 1 ? ["❌", "⏹️"] : reactions).map(r =>
|
(evaled.length === 1 ? ["❌", "⏹️"] : reactions).map(r =>
|
||||||
|
@ -115,17 +112,12 @@ module.exports = {
|
||||||
}
|
}
|
||||||
evaledEmbed = new Discord.MessageEmbed()
|
evaledEmbed = new Discord.MessageEmbed()
|
||||||
.setColor(interaction.guild.me.displayColor)
|
.setColor(interaction.guild.me.displayColor)
|
||||||
.setDescription(`\`\`\`js\n${evaled[page]}\n\`\`\``);
|
.setDescription(`\`\`\`js\n${evaled[page]}\n\`\`\``)
|
||||||
|
.addField(`Type of`, `\`\`\`js\n${typeof evaled[page]}\n\`\`\``);
|
||||||
|
|
||||||
await mainMessage.edit({
|
await mainMessage.edit({
|
||||||
embeds: [evaledEmbed],
|
embeds: [evaledEmbed],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
function chunk(arr, size) {
|
|
||||||
let c;
|
|
||||||
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) => {
|
|
||||||
c = arr.slice(i * size, i * size + size);
|
|
||||||
});
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
|
@ -19,18 +19,6 @@ module.exports = {
|
||||||
.setTitle("Guilds")
|
.setTitle("Guilds")
|
||||||
.setDescription(description)
|
.setDescription(description)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.addFields(
|
|
||||||
{
|
|
||||||
name: `Total Guilds`,
|
|
||||||
value: client.guilds.cache.size,
|
|
||||||
inline: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: `Total Members`,
|
|
||||||
value: client.users.cache.size,
|
|
||||||
inline: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
|
31
command/Owner/rmv.js
Normal file
31
command/Owner/rmv.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module.exports = {
|
||||||
|
name: "rmv",
|
||||||
|
category: "Owner",
|
||||||
|
usage: "(Number)",
|
||||||
|
description: "Remove coins from someone",
|
||||||
|
Owner: true,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to remove",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "cp",
|
||||||
|
description: "The amount of CP you want to remove",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
await client.rmv(args[0], args[1]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `<a:nyx_checkmark:897240322411724841> Successfully removed **${interaction.options.getInteger(
|
||||||
|
"cp"
|
||||||
|
)}** ${client.currency} from **${
|
||||||
|
interaction.options.getUser("user").username
|
||||||
|
}**'s balance`,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
|
@ -23,15 +23,12 @@ module.exports = {
|
||||||
`${interaction.user.username} is set into AFK.\nStatus : ${content}`
|
`${interaction.user.username} is set into AFK.\nStatus : ${content}`
|
||||||
)
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setFooter({
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
text: `Made by ${client.author}`,
|
|
||||||
iconURL: client.user.displayAvatarURL(),
|
|
||||||
})
|
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
text: interaction.user.username,
|
interaction.user.username,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
})
|
)
|
||||||
.setURL(client.web);
|
.setURL(client.web);
|
||||||
interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
|
|
17
command/Utilities/codebin.js
Normal file
17
command/Utilities/codebin.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
const CodeClient = require("../../client/CodeClient");
|
||||||
|
module.exports = {
|
||||||
|
name: "Create Code Bin",
|
||||||
|
type: "MESSAGE",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
const msg = await interaction.channel.messages.fetch(interaction.targetId);
|
||||||
|
if (!msg.content) {
|
||||||
|
interaction.followUp({ content: "The message must have a content" });
|
||||||
|
} else {
|
||||||
|
const title = "Code";
|
||||||
|
const description = msg.author.tag;
|
||||||
|
const code = msg.content;
|
||||||
|
const link = await CodeClient.createBin(title, description, code);
|
||||||
|
interaction.followUp({ content: link });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
27
command/Utilities/docs.js
Normal file
27
command/Utilities/docs.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
const axios = require("axios");
|
||||||
|
module.exports = {
|
||||||
|
name: "docs",
|
||||||
|
usage: "(Query)",
|
||||||
|
description: "Search the discord.js docs for something!",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "query",
|
||||||
|
description: "The query you want to search",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const query = args.join(" ");
|
||||||
|
await axios
|
||||||
|
.get(
|
||||||
|
`https://djsdocs.sorta.moe/v2/embed?src=stable&q=${encodeURIComponent(
|
||||||
|
query
|
||||||
|
)}`
|
||||||
|
)
|
||||||
|
.then(async data => {
|
||||||
|
interaction.followUp({ embeds: [data.data] });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
|
@ -10,10 +10,10 @@ module.exports = {
|
||||||
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
text: interaction.user.tag,
|
interaction.user.tag,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
})
|
)
|
||||||
.setTitle(`Support/Invite`)
|
.setTitle(`Support/Invite`)
|
||||||
.setThumbnail(
|
.setThumbnail(
|
||||||
"https://github.com/night0721/cath.js/blob/master/util/assets/images/nyx_logo_transparent.webp"
|
"https://github.com/night0721/cath.js/blob/master/util/assets/images/nyx_logo_transparent.webp"
|
||||||
|
|
35
command/Utilities/shorturl.js
Normal file
35
command/Utilities/shorturl.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
const URLClient = require("../../client/URLClient");
|
||||||
|
module.exports = {
|
||||||
|
name: "shorten-url",
|
||||||
|
description: "Shorten a URL",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "short-name",
|
||||||
|
description:
|
||||||
|
"The short name that for the shorten-url (For example, https://url.cath.gq/youtube)",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "link",
|
||||||
|
description:
|
||||||
|
"The link for the shorten-url (For example, https://youtube.com)",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
if (!args[1].includes("https://")) {
|
||||||
|
interaction.followUp({ content: "The link must contain 'https://'" });
|
||||||
|
} else {
|
||||||
|
const shortName = args[0];
|
||||||
|
const targetURL = args[1];
|
||||||
|
const cc = await URLClient.createShortURL(shortName, targetURL);
|
||||||
|
if (!cc) {
|
||||||
|
interaction.followUp({ content: `URL already exist` });
|
||||||
|
} else {
|
||||||
|
interaction.followUp({ content: `https://url.cath.gq/${cc}` });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -7,11 +7,11 @@ module.exports = {
|
||||||
Welcome: "837913442228371456",
|
Welcome: "837913442228371456",
|
||||||
DMLog: "900549765534736394",
|
DMLog: "900549765534736394",
|
||||||
CMDLog: "848613827226239046",
|
CMDLog: "848613827226239046",
|
||||||
ErrorLog: "938538311537012796",
|
ErrorLog: "900509758786773022",
|
||||||
ServerLog: "848613714537873518",
|
ServerLog: "848613714537873518",
|
||||||
Lavalink: {
|
Lavalink: {
|
||||||
Host: "lavalink-repl.thunderemperor.repl.co",
|
Host: "lavalink.darrennathanael.com",
|
||||||
Port: 443,
|
Port: 2095,
|
||||||
Password: "0638xxtXRH887UQQ",
|
Password: "whatwasthelastingyousaid",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,9 +10,9 @@ client.on("messageCreate", async message => {
|
||||||
nothahaa.setNickname(`${message.author.username}`).catch();
|
nothahaa.setNickname(`${message.author.username}`).catch();
|
||||||
await client.data.DelAFK(message.author.id);
|
await client.data.DelAFK(message.author.id);
|
||||||
}
|
}
|
||||||
if (message.mentions.users.first()?.id) {
|
if (message.mentions.users.first()) {
|
||||||
const data1 = await client.data.getUser(
|
const data1 = await client.data.getUser(
|
||||||
message.mentions.members.first()?.id
|
message.mentions.members.first().id
|
||||||
);
|
);
|
||||||
if (data1?.AFK) {
|
if (data1?.AFK) {
|
||||||
message.reply({
|
message.reply({
|
||||||
|
|
|
@ -12,7 +12,7 @@ client.on("interactionCreate", async interaction => {
|
||||||
if (option.type === "SUB_COMMAND_GROUP") {
|
if (option.type === "SUB_COMMAND_GROUP") {
|
||||||
if (option.name) args.push(option.name);
|
if (option.name) args.push(option.name);
|
||||||
option.options?.forEach(x => {
|
option.options?.forEach(x => {
|
||||||
if (x.type === 1) {
|
if (x.type === "SUB_COMMAND") {
|
||||||
if (x.name) args.push(x.name);
|
if (x.name) args.push(x.name);
|
||||||
x.options?.forEach(y => {
|
x.options?.forEach(y => {
|
||||||
if (y.value) args.push(y.value);
|
if (y.value) args.push(y.value);
|
||||||
|
@ -63,19 +63,19 @@ client.on("interactionCreate", async interaction => {
|
||||||
embeds: [
|
embeds: [
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setAuthor({
|
.setAuthor(
|
||||||
name: interaction.user.tag,
|
interaction.user.tag,
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
})
|
)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setDescription(
|
.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`
|
`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()
|
.setTimestamp()
|
||||||
.setFooter({
|
.setFooter(
|
||||||
text: `Made by ${client.author}`,
|
`Made by ${client.author}`,
|
||||||
iconURL: client.user.displayAvatarURL(),
|
client.user.displayAvatarURL()
|
||||||
}),
|
),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,11 @@ client.on("interactionCreate", async interaction => {
|
||||||
if (cmd.Level) {
|
if (cmd.Level) {
|
||||||
if (!data.Guild.Level) return;
|
if (!data.Guild.Level) return;
|
||||||
}
|
}
|
||||||
|
if (cmd.directory == "NSFW" && !data.Guild?.NSFW) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: "NSFW commands have been disabled in this server",
|
||||||
|
});
|
||||||
|
}
|
||||||
if (!interaction.guild.me.permissions.has(cmd.BotPerms || [])) {
|
if (!interaction.guild.me.permissions.has(cmd.BotPerms || [])) {
|
||||||
return interaction.followUp({
|
return interaction.followUp({
|
||||||
content: `You can't use this command. I need to have ${cmd.BotPerms} permission to use this command.`,
|
content: `You can't use this command. I need to have ${cmd.BotPerms} permission to use this command.`,
|
||||||
|
@ -111,12 +115,7 @@ client.on("interactionCreate", async interaction => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const random = utils.rndint(3, 6);
|
const random = utils.rndint(3, 6);
|
||||||
if (cmd.name == "nsfw" && !data.Guild?.NSFW) {
|
try {
|
||||||
interaction.followUp({
|
|
||||||
content: "NSFW commands have been disabled in this server",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (cmd.timeout) {
|
if (cmd.timeout) {
|
||||||
const current_time = Date.now();
|
const current_time = Date.now();
|
||||||
const cooldown_amount = cmd.timeout;
|
const cooldown_amount = cmd.timeout;
|
||||||
|
@ -134,9 +133,7 @@ client.on("interactionCreate", async interaction => {
|
||||||
{ User: interaction.user.id, CMD: cmd.name },
|
{ User: interaction.user.id, CMD: cmd.name },
|
||||||
{ Time: current_time }
|
{ Time: current_time }
|
||||||
);
|
);
|
||||||
cmd
|
cmd.run(client, interaction, args, utils, data);
|
||||||
.run(client, interaction, args, utils, data)
|
|
||||||
.catch(e => sendE(e));
|
|
||||||
client.addcmdsused(interaction.user.id);
|
client.addcmdsused(interaction.user.id);
|
||||||
client.channels.cache.get(client.config.CMDLog).send({
|
client.channels.cache.get(client.config.CMDLog).send({
|
||||||
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
||||||
|
@ -145,9 +142,7 @@ client.on("interactionCreate", async interaction => {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (data.Guild.Tips) utils.tips(interaction, client);
|
if (data.Guild.Tips) utils.tips(interaction, client);
|
||||||
cmd
|
cmd.run(client, interaction, args, utils, data);
|
||||||
.run(client, interaction, args, utils, data)
|
|
||||||
.catch(e => sendE(e));
|
|
||||||
client.channels.cache.get(client.config.CMDLog).send({
|
client.channels.cache.get(client.config.CMDLog).send({
|
||||||
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
||||||
});
|
});
|
||||||
|
@ -164,13 +159,25 @@ client.on("interactionCreate", async interaction => {
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (data.Guild.Tips) utils.tips(interaction, client);
|
if (data.Guild.Tips) utils.tips(interaction, client);
|
||||||
cmd.run(client, interaction, args, utils, data).catch(e => sendE(e));
|
cmd.run(client, interaction, args, utils, data);
|
||||||
client.channels.cache.get(client.config.CMDLog).send({
|
client.channels.cache.get(client.config.CMDLog).send({
|
||||||
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${cmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
||||||
});
|
});
|
||||||
client.addcmdsused(interaction.user.id);
|
client.addcmdsused(interaction.user.id);
|
||||||
// await client.addXP(interaction.user.id, random, interaction);
|
// await client.addXP(interaction.user.id, random, interaction);
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Command Error")
|
||||||
|
.setDescription(`\`\`\`ini\n${e.stack}\`\`\``)
|
||||||
|
.setTimestamp()
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(client.user.username);
|
||||||
|
client.channels.cache
|
||||||
|
.get(client.config.ErrorLog)
|
||||||
|
.send({ embeds: [embed] });
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (interaction.isContextMenu()) {
|
if (interaction.isContextMenu()) {
|
||||||
await interaction.deferReply({ ephemeral: false });
|
await interaction.deferReply({ ephemeral: false });
|
||||||
|
@ -185,7 +192,7 @@ client.on("interactionCreate", async interaction => {
|
||||||
if (!ownercmd) return;
|
if (!ownercmd) return;
|
||||||
const args = [];
|
const args = [];
|
||||||
for (const option of interaction.options.data) {
|
for (const option of interaction.options.data) {
|
||||||
if (option.type === 1) {
|
if (option.type === "SUB_COMMAND") {
|
||||||
if (option.name) args.push(option.name);
|
if (option.name) args.push(option.name);
|
||||||
option.options?.forEach(x => {
|
option.options?.forEach(x => {
|
||||||
if (x.value) args.push(x.value);
|
if (x.value) args.push(x.value);
|
||||||
|
@ -197,20 +204,14 @@ client.on("interactionCreate", async interaction => {
|
||||||
interaction.member = interaction.guild.members.cache.get(
|
interaction.member = interaction.guild.members.cache.get(
|
||||||
interaction.user.id
|
interaction.user.id
|
||||||
);
|
);
|
||||||
ownercmd.run(client, interaction, args, utils).catch(e => sendE(e));
|
try {
|
||||||
|
ownercmd.run(client, interaction, args, utils);
|
||||||
client.channels.cache.get(client.config.CMDLog).send({
|
client.channels.cache.get(client.config.CMDLog).send({
|
||||||
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${ownercmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
content: `\`${interaction.user.tag}(${interaction.user.id})\`\n has used \n**${ownercmd.name}**\n command in \n\`${interaction.guild.name}(${interaction.guild.id})\``,
|
||||||
});
|
});
|
||||||
client.addcmdsused(interaction.user.id);
|
client.addcmdsused(interaction.user.id);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
function sendE(e) {
|
|
||||||
const embed = new MessageEmbed()
|
|
||||||
.setTitle("Command Error")
|
|
||||||
.setDescription(`\`\`\`yaml\n${e.stack}\`\`\``)
|
|
||||||
.setTimestamp()
|
|
||||||
.setColor(client.color)
|
|
||||||
.setFooter({ text: client.user.username });
|
|
||||||
interaction.channel.send({ embeds: [embed] });
|
|
||||||
client.channels.cache.get(client.config.ErrorLog).send({ embeds: [embed] });
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
const client = require("..");
|
const client = require("..");
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const utils = require("../util/functions/function");
|
const utils = require("../util/functions/function");
|
||||||
const domains = require("../util/Data/domains.json");
|
const scams = require("../util/Data/scam.json");
|
||||||
client.on("messageCreate", async message => {
|
client.on("messageCreate", async message => {
|
||||||
if (message.author.bot || !message.guild) return;
|
if (message.author.bot || !message.guild) return;
|
||||||
const data = {};
|
const data = {};
|
||||||
|
@ -47,7 +47,7 @@ client.on("messageCreate", async message => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "<a:booster:896527475063025704> **Premium**",
|
name: "<a:booster:896527475063025704> **Premium**",
|
||||||
value: `You can either boost the support server or subscribe to developer's team [Ko-Fi](https://ko-fi.com/cathteam).\n Another option would be to gift a nitro subscription to one of the developers.`,
|
value: `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.`,
|
||||||
inline: false,
|
inline: false,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -66,27 +66,7 @@ client.on("messageCreate", async message => {
|
||||||
}
|
}
|
||||||
if (data.User?.Blacklist) return;
|
if (data.User?.Blacklist) return;
|
||||||
if (
|
if (
|
||||||
domains.iplogger.includes(
|
scams.includes(
|
||||||
message.content
|
|
||||||
.toLowerCase()
|
|
||||||
.match(
|
|
||||||
/(https|http):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+~-]*[\w.,@?^=%&:/~+~-])+/g
|
|
||||||
)?.[0]
|
|
||||||
.replace(/(https|http):\/\/+/g, "")
|
|
||||||
.match(/\s*([^)]+?)\s*\/+/g, "")[0]
|
|
||||||
.slice(0, -1)
|
|
||||||
) ||
|
|
||||||
domains.scam.includes(
|
|
||||||
message.content
|
|
||||||
.toLowerCase()
|
|
||||||
.match(
|
|
||||||
/(https|http):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+~-]*[\w.,@?^=%&:/~+~-])+/g
|
|
||||||
)?.[0]
|
|
||||||
.replace(/(https|http):\/\/+/g, "")
|
|
||||||
.match(/\s*([^)]+?)\s*\/+/g, "")[0]
|
|
||||||
.slice(0, -1)
|
|
||||||
) ||
|
|
||||||
domains.ngrok.includes(
|
|
||||||
message.content
|
message.content
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.match(
|
.match(
|
||||||
|
@ -97,59 +77,14 @@ client.on("messageCreate", async message => {
|
||||||
.slice(0, -1)
|
.slice(0, -1)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
const _ = new MessageEmbed()
|
message.delete();
|
||||||
.setTitle(`Scam/IP Grabber detected`)
|
|
||||||
.setTimestamp()
|
|
||||||
.setColor(client.color)
|
|
||||||
.addFields(
|
|
||||||
{
|
|
||||||
name: "User",
|
|
||||||
value: `${message.author.tag} (${message.author.id})`,
|
|
||||||
inline: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Scam/IP Logger URL",
|
|
||||||
value: `||https://${message.content
|
|
||||||
.toLowerCase()
|
|
||||||
.match(
|
|
||||||
/(https|http):\/\/([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+~-]*[\w.,@?^=%&:/~+~-])+/g
|
|
||||||
)?.[0]
|
|
||||||
.replace(/(https|http):\/\/+/g, "")
|
|
||||||
.match(/\s*([^)]+?)\s*\/+/g, "")[0]
|
|
||||||
.slice(0, -1)}||`,
|
|
||||||
inline: true,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.setFooter({
|
|
||||||
text: `Tactical Protection by ${client.author}`,
|
|
||||||
icon_url: client.user.displayAvatarURL(),
|
|
||||||
});
|
|
||||||
message.channel.send({
|
message.channel.send({
|
||||||
embeds: [_],
|
content: `**${message.author.tag}** has sent a scam link and I have deleted it to prevent spread`,
|
||||||
});
|
});
|
||||||
client.channels.cache.get("936986641585799178").send({
|
|
||||||
embeds: [
|
|
||||||
_.addFields(
|
|
||||||
{
|
|
||||||
name: "Message",
|
|
||||||
value: message.content,
|
|
||||||
inline: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Guild",
|
|
||||||
value: message.guild ? message.guild.name : "None",
|
|
||||||
inline: true,
|
|
||||||
}
|
}
|
||||||
),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
message.delete().catch(() => {});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
message?.content.startsWith(data.Guild.Prefix) ||
|
message?.content.startsWith(data.Guild.Prefix) ||
|
||||||
message?.content.startsWith("C.") ||
|
message?.content.startsWith("C.")
|
||||||
message?.content.startsWith("c.")
|
|
||||||
) {
|
) {
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setTitle(`Message commands are now disabled`)
|
.setTitle(`Message commands are now disabled`)
|
||||||
|
@ -222,15 +157,7 @@ client.on("messageCreate", async message => {
|
||||||
}
|
}
|
||||||
if (message.content) {
|
if (message.content) {
|
||||||
client.channels.cache.get(client.config.DMLog).send({
|
client.channels.cache.get(client.config.DMLog).send({
|
||||||
embeds: [
|
content: `\`${message.author.tag}(${message.author.id})\`: ${message.content}`,
|
||||||
new MessageEmbed()
|
|
||||||
.setDescription(message.content)
|
|
||||||
.setColor(client.color)
|
|
||||||
.setAuthor({
|
|
||||||
name: message.author.tag,
|
|
||||||
iconURL: message.author.displayAvatarURL({ dynamic: true }),
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,5 +13,5 @@ client.on("ready", async () => {
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
console.log(`${client.user.username} ✅`);
|
console.log(`${client.user.username} ✅\nVersion: v${version}`);
|
||||||
});
|
});
|
||||||
|
|
4
index.js
4
index.js
|
@ -1,5 +1,7 @@
|
||||||
const NYX = require("./client/NYX");
|
const NYX = require("./client/NYX");
|
||||||
const client = new NYX();
|
const client = new NYX();
|
||||||
module.exports = client;
|
module.exports = client;
|
||||||
process.on("unhandledRejection", () => {}); // add // when need to debug
|
process.on("unhandledRejection", err => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
client.start();
|
client.start();
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// Do we still need this ?
|
|
||||||
|
|
||||||
const mongoose = require("mongoose");
|
const mongoose = require("mongoose");
|
||||||
module.exports = mongoose.model(
|
module.exports = mongoose.model(
|
||||||
"weapons",
|
"weapons",
|
||||||
|
|
20
package.json
20
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "cath.exe",
|
"name": "cath.exe",
|
||||||
"version": "0.0.1",
|
"version": "3.4.0",
|
||||||
"description": "NYX bot created by Team NYX",
|
"description": "NYX bot created by Team NYX",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "*",
|
"node": "*",
|
||||||
|
@ -11,7 +11,7 @@
|
||||||
"dev": "nodemon .",
|
"dev": "nodemon .",
|
||||||
"start": "node .",
|
"start": "node .",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"node-update": "npm i --save-dev node@17 && npm config set prefix=$(pwd)/node_modules/node && export PATH=$(pwd)/node_modules/node/bin:$PATH",
|
"node-update": "npm i --save-dev node@16 && npm config set prefix=$(pwd)/node_modules/node && export PATH=$(pwd)/node_modules/node/bin:$PATH",
|
||||||
"node-clean": "rm -rf node_modules && rm package-lock.json && npm cache clear --force && npm cache clean --force && npm i",
|
"node-clean": "rm -rf node_modules && rm package-lock.json && npm cache clear --force && npm cache clean --force && npm i",
|
||||||
"all": "npm run node-update && npm run node-clean"
|
"all": "npm run node-update && npm run node-clean"
|
||||||
},
|
},
|
||||||
|
@ -37,18 +37,18 @@
|
||||||
"url": "https://ko-fi.com/cathteam"
|
"url": "https://ko-fi.com/cathteam"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"node": "^18.7.0"
|
"node": "^19.3.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.27.2",
|
"axios": "^1.2.2",
|
||||||
"cath": "^1.4.7",
|
"cath": "^1.4.6",
|
||||||
"discord.js": "^13.6.0",
|
"discord.js": "^14.7.1",
|
||||||
"dotenv": "^16.0.0",
|
"dotenv": "^16.0.1",
|
||||||
"erela.js": "^2.3.3",
|
"erela.js": "^2.3.3",
|
||||||
"erela.js-spotify": "^1.2.0",
|
"erela.js-spotify": "^1.2.0",
|
||||||
"goosecache": "^9.0.14",
|
"goosecache": "^10.0.0",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
"mongoose": "^5.13.14",
|
"mongoose": "^5.13.13",
|
||||||
"quickchart-js": "^3.0.0"
|
"quickchart-js": "^3.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
306
stats2.js
Normal file
306
stats2.js
Normal file
|
@ -0,0 +1,306 @@
|
||||||
|
// const common = require("../../util/functions/common");
|
||||||
|
// const data = require("../../util/Data/data.json");
|
||||||
|
// const Discord = require("discord.js");
|
||||||
|
|
||||||
|
// // Ignore this for now, it's just a outline of what needs to be changed to fit the new data from Mongo
|
||||||
|
|
||||||
|
// var currGun,
|
||||||
|
// currStats,
|
||||||
|
// currAttachments,
|
||||||
|
// currRecoilArr,
|
||||||
|
// currDRM,
|
||||||
|
// interpretion,
|
||||||
|
// recoilAvailable,
|
||||||
|
// chart,
|
||||||
|
// hasError;
|
||||||
|
// var errMsg = "*Generic placeholder error message*";
|
||||||
|
// module.exports = {
|
||||||
|
// name: "stats",
|
||||||
|
// description: "Check gun stats",
|
||||||
|
// 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) => {
|
||||||
|
// recoilAvailable = false;
|
||||||
|
// hasError = false;
|
||||||
|
// console.log(args);
|
||||||
|
// var repEmb = statsHandler(args.join(" ").replace("\n", " "));
|
||||||
|
// if (hasError) {
|
||||||
|
// interaction.followUp({ embeds: [repEmb] });
|
||||||
|
// }
|
||||||
|
// if (recoilAvailable) { //we will use the old recoil graphs untill we can find someone to help update it.
|
||||||
|
// 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: [repEmb] });
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
|
||||||
|
// // Don't need (use: to split the input by + (which was used to add attachments before slash commands))
|
||||||
|
// function inpHandler(inpmsg) {
|
||||||
|
// statsHandler(inpmsg.split("+")[0]);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// function statsHandler(inpmsg) {
|
||||||
|
// // Don't need here, use from json (will be easier to add stuff in future)
|
||||||
|
// var 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 = []; // This stores all the feilds
|
||||||
|
|
||||||
|
// currGun = common.weaponIdentifier(inpmsg); // inpMsg should be replaced by args[0] (i.e the gun name)
|
||||||
|
// if (typeof currGun == "string") {
|
||||||
|
// hasError = true;
|
||||||
|
// return currGun;
|
||||||
|
// }
|
||||||
|
// currStats = currGun.stats; // access stats using mongo
|
||||||
|
// currDRM = currGun.drm[0]; // Same ^
|
||||||
|
// currAttachments = [];
|
||||||
|
// currAttachments = common.attachmentsIdentifier(
|
||||||
|
// inpmsg, // this was supposed to be the full input msg, but we need to madify it so it just gets a attachment name and uses it so no need for isolator
|
||||||
|
// currGun.aments, //Sends the stats for all the attachment of that gun
|
||||||
|
// currStats //sends the base stat of the gun for calculation
|
||||||
|
// );
|
||||||
|
// if (typeof currAttachments == "string") {
|
||||||
|
// hasError = true;
|
||||||
|
// return currAttachments;
|
||||||
|
// }
|
||||||
|
// currRecoilArr = [1, 1, currGun.stats[17]];
|
||||||
|
// if (currAttachments.length != 0) {
|
||||||
|
// var 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;
|
||||||
|
|
||||||
|
// var 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) { //Needs modification to match the new layout
|
||||||
|
// 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";
|
||||||
|
// }
|
||||||
|
// var 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 Round Table",
|
||||||
|
// icon_url:
|
||||||
|
// "", //update the icon later
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// }
|
|
@ -26,10 +26,7 @@
|
||||||
"CR-56 AMAX",
|
"CR-56 AMAX",
|
||||||
"Shorty",
|
"Shorty",
|
||||||
"Crossbow",
|
"Crossbow",
|
||||||
"R9-0",
|
"R9-0"
|
||||||
"PPSh-41",
|
|
||||||
"CBR4",
|
|
||||||
"SVD"
|
|
||||||
],
|
],
|
||||||
"weaponAlliasName": [
|
"weaponAlliasName": [
|
||||||
["MoW"],
|
["MoW"],
|
||||||
|
@ -51,17 +48,14 @@
|
||||||
["Slow Outlaw", "Slower Outlaw"],
|
["Slow Outlaw", "Slower Outlaw"],
|
||||||
["bae"],
|
["bae"],
|
||||||
["Reneti", "Renneti", "Rennetti", "Burst Pistol"],
|
["Reneti", "Renneti", "Rennetti", "Burst Pistol"],
|
||||||
["pp bizon", "pp19"],
|
["pp bizon", "pp"],
|
||||||
["AUG"],
|
["AUG"],
|
||||||
["AKBP", "Vepr"],
|
["AKBP", "Vepr"],
|
||||||
["AN94"],
|
["AN94"],
|
||||||
["CR56", "AMAX"],
|
["CR56", "AMAX"],
|
||||||
["725"],
|
["725"],
|
||||||
["cb", "bow"],
|
["cb", "bow"],
|
||||||
["r9", "R9-O"],
|
["r9", "R9-O"]
|
||||||
["ppsh", "pp41"],
|
|
||||||
["p90"],
|
|
||||||
["Dragonov"]
|
|
||||||
],
|
],
|
||||||
"attachmentActualName": [
|
"attachmentActualName": [
|
||||||
["akimbo", "Stopping Power"],
|
["akimbo", "Stopping Power"],
|
||||||
|
|
|
@ -179,8 +179,7 @@
|
||||||
"MIP Light Barrel (Short)",
|
"MIP Light Barrel (Short)",
|
||||||
"MIP Extended Light Barrel",
|
"MIP Extended Light Barrel",
|
||||||
"OWC Ranger",
|
"OWC Ranger",
|
||||||
"OWC Marksman",
|
"OWC Marksman"
|
||||||
"GRU Combo Grip"
|
|
||||||
],
|
],
|
||||||
"optic": [
|
"optic": [
|
||||||
"Red Dot Sight",
|
"Red Dot Sight",
|
||||||
|
@ -608,8 +607,7 @@
|
||||||
"YKM Light Stock",
|
"YKM Light Stock",
|
||||||
"RTC Steady Stock",
|
"RTC Steady Stock",
|
||||||
"OWC Skeleton Stock",
|
"OWC Skeleton Stock",
|
||||||
"No Stock",
|
"No Stock"
|
||||||
"Thunderbolt Sling"
|
|
||||||
],
|
],
|
||||||
"perk": [
|
"perk": [
|
||||||
"Tough",
|
"Tough",
|
||||||
|
@ -999,157 +997,6 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Swordfish": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["MIP Light", "MIP Extended Light Barrel", "OWC Ranger"],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"3x Tactical Scope",
|
|
||||||
"4x Tactical Scope",
|
|
||||||
"4.4x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": ["YKM Light Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Tough",
|
|
||||||
"Long Shot",
|
|
||||||
"Melee Master"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
|
||||||
"underbarrel": [
|
|
||||||
"Strike Foregrip",
|
|
||||||
"Merc Foregrip",
|
|
||||||
"Operator Foregrip",
|
|
||||||
"Ranger Foregrip",
|
|
||||||
"Tactical Foregrip A",
|
|
||||||
"Bipod"
|
|
||||||
],
|
|
||||||
"ammo": ["Extended Mag A", "Fast Reload", "Halberd Mag"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape",
|
|
||||||
"Stippled Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Kilo_141": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": [
|
|
||||||
"YKM Integral Suppressor Light",
|
|
||||||
"MIP Light Extended Barrel",
|
|
||||||
"OWC Marksman"
|
|
||||||
],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"3x Tactical Scope",
|
|
||||||
"4x Tactical Scope",
|
|
||||||
"4.4x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": [
|
|
||||||
"No Stock",
|
|
||||||
"YKM Combat Stock",
|
|
||||||
"OWC Skeleton Stock",
|
|
||||||
"RTC Steady Stock"
|
|
||||||
],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Tough",
|
|
||||||
"Long Shot",
|
|
||||||
"Melee Master"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
|
||||||
"underbarrel": [
|
|
||||||
"Strike Foregrip",
|
|
||||||
"Merc Foregrip",
|
|
||||||
"Operator Foregrip",
|
|
||||||
"Ranger Foregrip",
|
|
||||||
"Tactical Foregrip A",
|
|
||||||
"Bipod"
|
|
||||||
],
|
|
||||||
"ammo": [
|
|
||||||
"Extended Mag A",
|
|
||||||
"Large Extended Mag B",
|
|
||||||
"100 round LMG Drum Mag"
|
|
||||||
],
|
|
||||||
"rear_grip": [
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape",
|
|
||||||
"Stippled Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Oden": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"RTC Huge Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["MIP Light Barrel (Short)", "OWC Marksman", "OWC Ranger"],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"3x Tactical Scope",
|
|
||||||
"4x Tactical Scope",
|
|
||||||
"4.4x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": ["YKM Light Stock", "YKM Combat Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"Tough",
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Long Shot",
|
|
||||||
"Melee Master",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
|
||||||
"underbarrel": [
|
|
||||||
"Strike Foregrip",
|
|
||||||
"Merc Foregrip",
|
|
||||||
"Operator Foregrip",
|
|
||||||
"Ranger Foregrip",
|
|
||||||
"Tactical Foregrip A"
|
|
||||||
],
|
|
||||||
"ammo": ["Extended Mag A", "Large Extended Mag B", "Damage Mag", "12.7 mm Duplex Rounds"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Stippled Grip Tape",
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"XPR_50": [
|
"XPR_50": [
|
||||||
{
|
{
|
||||||
"muzzle": [
|
"muzzle": [
|
||||||
|
@ -1494,64 +1341,6 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"SVD": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"RTC Compensator",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["RTC 510mm Light", "RTC 600mm Heavy"],
|
|
||||||
"optic": ["3x Tactical Scope", "4x Tactical Scope", "6x Tactical Scope"],
|
|
||||||
"stock": ["YKM Light Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Bullet Return",
|
|
||||||
"Headshot Slow"
|
|
||||||
],
|
|
||||||
"laser": ["OWC Laser - Tactical"],
|
|
||||||
"underbarrel": ["Bipod"],
|
|
||||||
"ammo": ["15 Round Extended Mag", "20 Round Extended Mag"]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Koshka": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["Enhanced Barrel", "MIP Light Barrel (Short)"],
|
|
||||||
"optic": ["3x Tactical Scope", "4x Tactical Scope", "6x Tactical Scope"],
|
|
||||||
"stock": ["Mobility Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Bullet Return",
|
|
||||||
"Headshot Slow"
|
|
||||||
],
|
|
||||||
"laser": ["OWC Laser - Tactical", "Fast Aim Laser"],
|
|
||||||
"underbarrel": ["Bipod"],
|
|
||||||
"ammo": ["10 Round Extended Mag", "8 Round Fast Mag", "Armour Piercer Mag"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Stippled Grip Tape",
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"S36": [
|
"S36": [
|
||||||
{
|
{
|
||||||
"muzzle": [
|
"muzzle": [
|
||||||
|
@ -1910,54 +1699,6 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"PKM": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Agency Suppressor",
|
|
||||||
"Infantry Compensator",
|
|
||||||
"MIP Flashguard",
|
|
||||||
"OWC Eliminator",
|
|
||||||
"RTC Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": [
|
|
||||||
"Rapid Fire Barrel",
|
|
||||||
"Long-Range Barrel",
|
|
||||||
"MIP Extended Light Barrel"
|
|
||||||
],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"3x Tactical Scope",
|
|
||||||
"4x Tactical Scope",
|
|
||||||
"4.4x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": [
|
|
||||||
"Light Weight Stock",
|
|
||||||
"Marathon Stock",
|
|
||||||
"No Stock",
|
|
||||||
"Agile Stock"
|
|
||||||
],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Headshot XP",
|
|
||||||
"Empty Reload"
|
|
||||||
],
|
|
||||||
"laser": ["1mW Steady Aim Laser", "5mW Combat Laser", "Aim Assist Laser"],
|
|
||||||
"underbarrel": ["Crossbar"],
|
|
||||||
"ammo": ["84 Round Hybrid Mag"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Sturdy Grip Tape",
|
|
||||||
"Rustle Grip Tape",
|
|
||||||
"Firm Grip Tape",
|
|
||||||
"Non-Slip Foregrip"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"RUS_79U": [
|
"RUS_79U": [
|
||||||
{
|
{
|
||||||
"muzzle": [
|
"muzzle": [
|
||||||
|
@ -2692,142 +2433,6 @@
|
||||||
"rear_grip": ["Rustle Grip Tape", "Sturdy Grip Tape", "Firm Grip Tape"]
|
"rear_grip": ["Rustle Grip Tape", "Sturdy Grip Tape", "Firm Grip Tape"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"CBR4": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["MIP Extended Light Barrel", "OWC Marksman"],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"Tactical Scope",
|
|
||||||
"3x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": ["YKM Light Stock", "YKM Combat Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Wild Hip Fire",
|
|
||||||
"Double Kill",
|
|
||||||
"Fast Reload Kill"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape",
|
|
||||||
"Stippled Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"PPSh_41": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"MIP Light FLash Guard",
|
|
||||||
"RTC Light Muzzle Brake"
|
|
||||||
],
|
|
||||||
"barrel": ["Gurrilla Light Short", "Last Stand Light", "Banner Heavy"],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"Tactical Scope",
|
|
||||||
"3x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": ["No Stock", "OWC Skeleton Stock", "RTC Steady Stock"],
|
|
||||||
"perk": [
|
|
||||||
"FMJ",
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable",
|
|
||||||
"Wild Hip Fire",
|
|
||||||
"Double Kill",
|
|
||||||
"Fast Reload Kill"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "MIP Laser 5mW", "OWC Laser - Tactical"],
|
|
||||||
"underbarrel": [
|
|
||||||
"Focused Foregrip",
|
|
||||||
"Tough Foregrip",
|
|
||||||
"Resilient Foregrip",
|
|
||||||
"Tactical Foregrip A",
|
|
||||||
"Operator Foregrip"
|
|
||||||
],
|
|
||||||
"ammo": ["35 Round Fast Reload", "55 Round Light Reload"],
|
|
||||||
"rear_grip": [
|
|
||||||
"Sturdy Grip Tape",
|
|
||||||
"Ruberized Grip Tape",
|
|
||||||
"Rustle Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"MAC_10": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"RTC Muzzle Brake",
|
|
||||||
"MIP Flashguard",
|
|
||||||
"OWC Light Suppressor",
|
|
||||||
"Infantry Compensator",
|
|
||||||
"OWC Eliminator",
|
|
||||||
"Agency Suppressor"
|
|
||||||
],
|
|
||||||
"barrel": [
|
|
||||||
"6.5\" Rifling Barrel",
|
|
||||||
"6.1\" Reinforced Heavy",
|
|
||||||
"Taskforce Barrel",
|
|
||||||
"5.5\" Extended Barrel",
|
|
||||||
"6.2\" Cavalry Barrel"
|
|
||||||
],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"3x Tactical Scope",
|
|
||||||
"4x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": [
|
|
||||||
"Steel Stock",
|
|
||||||
"Swift Stock",
|
|
||||||
"No Stock",
|
|
||||||
"SAS Combat Stock"
|
|
||||||
],
|
|
||||||
"perk": [
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Wild Hip Fire",
|
|
||||||
"Double Kill",
|
|
||||||
"Fast Reload Kill",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable"
|
|
||||||
],
|
|
||||||
"laser": ["1mW Steady Aim Laser", "5mW Combat Laser", "Aim Assist Laser"],
|
|
||||||
"underbarrel": [
|
|
||||||
"BD Foregrip",
|
|
||||||
"Red Cell Foregrip",
|
|
||||||
"Striker Foregrip",
|
|
||||||
"Patrol Foregrip",
|
|
||||||
"Field Agent Foregrip",
|
|
||||||
"SFDD Fast Foregrip"
|
|
||||||
],
|
|
||||||
"ammo": [
|
|
||||||
"Fast Reload",
|
|
||||||
"43 Round Fast Reload",
|
|
||||||
"43 Fast Reload",
|
|
||||||
"STANAG 53 Round Extended Reload"
|
|
||||||
],
|
|
||||||
"rear_grip": ["Rustle Grip Tape", "Sturdy Grip Tape", "Firm Grip Tape"]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"HS2126": [
|
"HS2126": [
|
||||||
{
|
{
|
||||||
"muzzle": [
|
"muzzle": [
|
||||||
|
@ -3145,58 +2750,6 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"JAK_12": [
|
|
||||||
{
|
|
||||||
"muzzle": [
|
|
||||||
"Tactical Suppressor",
|
|
||||||
"Monolithic Suppressor",
|
|
||||||
"OWC Light Compensator",
|
|
||||||
"Choke",
|
|
||||||
"RTC Light Muzzle Brake",
|
|
||||||
"Flash Guard",
|
|
||||||
"Marauder Suppressor"
|
|
||||||
],
|
|
||||||
"barrel": ["MIP Extended Light Barrel", "MIP Light Barrel (Short)", "OWC Marksman"],
|
|
||||||
"optic": [
|
|
||||||
"Red Dot Sight",
|
|
||||||
"Holographic Sight",
|
|
||||||
"Tactical Scope",
|
|
||||||
"3x Tactical Scope"
|
|
||||||
],
|
|
||||||
"stock": [
|
|
||||||
"YKM Light Stock",
|
|
||||||
"YKM Combat Stock",
|
|
||||||
"MIP Stalker Stock"
|
|
||||||
],
|
|
||||||
"ammo": [
|
|
||||||
"FRAG-12 Explosive Mag",
|
|
||||||
"Extended Mag C",
|
|
||||||
"Large Extended Mag D",
|
|
||||||
"Slug Reload"
|
|
||||||
],
|
|
||||||
"perk": [
|
|
||||||
"Sleight of Hand",
|
|
||||||
"Speed Up Kill",
|
|
||||||
"Slide Flak Jacket",
|
|
||||||
"Wounding",
|
|
||||||
"Full Ammo",
|
|
||||||
"Disable"
|
|
||||||
],
|
|
||||||
"laser": ["RTC Laser 1mW", "OWC Laser - Tactical", "MIP Laser 5mW"],
|
|
||||||
"underbarrel": [
|
|
||||||
"Ranger Foregrip",
|
|
||||||
"Operator Foregrip",
|
|
||||||
"Merc Foregrip",
|
|
||||||
"Strike Foregrip",
|
|
||||||
"Tactical Foregrip A"
|
|
||||||
],
|
|
||||||
"rear_grip": [
|
|
||||||
"Stippled Grip Tape",
|
|
||||||
"Granulated Grip Tape",
|
|
||||||
"Ruberized Grip Tape"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Kilo_Bolt_Action": [
|
"Kilo_Bolt_Action": [
|
||||||
{
|
{
|
||||||
"muzzle": [
|
"muzzle": [
|
||||||
|
|
772
util/Data/builds.json
Normal file
772
util/Data/builds.json
Normal file
|
@ -0,0 +1,772 @@
|
||||||
|
{
|
||||||
|
"Main": [
|
||||||
|
{
|
||||||
|
"Name": "AK-47",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "5.45 Large Caliber", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174280823308308/image3.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AK117",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Supprssor", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip B", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ASM10",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Flash Guard", "Type": 4 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Slight of Hand", "Type": 8 },
|
||||||
|
{ "Name": "40 Round Extended Mag", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861887618820472842/Screenshot_20210706-1353282.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "BK57",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "40 Round Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174279287668776/image0.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DR-H",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 3 },
|
||||||
|
{ "Name": "25 Round OTM Mag", "Type": 7 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174261193965648/image3.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HBRa3",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174262041346128/image5.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HVK-30",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Monolithic Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Large Caliber Ammo", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174261705146458/image4.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ICR-1",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Supprssor Light", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174263286661140/image8.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "KN-44",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Muzzle Brake", "Type": 4 },
|
||||||
|
{ "Name": "MIP Light Barrel(Short)", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174262397075516/image6.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "LK24",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Suppressor Light", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174263684857907/image9.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "M4",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Suppressor Light", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174279689928714/image1.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "M16",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Compensator", "Type": 4 },
|
||||||
|
{ "Name": "MIP Strike Stock", "Type": 6 },
|
||||||
|
{ "Name": "Rubberized Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Operator Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174281255190568/image4.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Man-O-War",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Barrel(Short)", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Tactical Foregrip A", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174262841540658/image7.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Peacekeeper MK2",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Taskforce Barrel", "Type": 5 },
|
||||||
|
{ "Name": "Agile Stock", "Type": 6 },
|
||||||
|
{ "Name": "Firm Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Extended Mag A", "Type": 7 },
|
||||||
|
{ "Name": "Field Agent Foregrip", "Type": 1 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174260522090516/image2.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Type 25",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Barrel(Short)", "Type": 5 },
|
||||||
|
{ "Name": "YKM Light Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stopping Power Reload", "Type": 7 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174281698738216/image5.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ASVAL",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Quick Response Barrel", "Type": 5 },
|
||||||
|
{ "Name": "OWC Skeleton Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Large Extended Mag B", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174259708657695/image0.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "FR .556",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Barrel(Short)", "Type": 5 },
|
||||||
|
{ "Name": "RTC Steady Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Long Shot", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/772099026195316746/847174260052459540/image1.png?width=937&height=562"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "CR-56 AMAX",
|
||||||
|
"Type": 0,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Gunner Stock", "Type": 6 },
|
||||||
|
{ "Name": "Red Dot Sight", "Type": 0 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "M67 Ammo", "Type": 7 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861891137254326272/brave_8pS8PhHl4P.png?width=1128&height=634"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AGR 556",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Compensator", "Type": 4 },
|
||||||
|
{ "Name": "MIP Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "YKM Light Stock", "Type": 6 },
|
||||||
|
{ "Name": "30 Round 5.56mm Mag", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861887638419931176/Screenshot_20210706-1402032.png?width=881&height=495"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Chicom",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Strike Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Cordite",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Fennec",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Monolithic Supprssor", "Type": 4 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Extended Mag A", "Type": 7 },
|
||||||
|
{ "Name": "Operator Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/767456294981992488/862753085985914930/image0.png?width=1104&height=630"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GKS",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Supprssor", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "32 Round Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "Strike Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HG 40",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Integral Supprssor", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Rubberized Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "40 Round Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MSMC",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "36 Round Extended Mag", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MX9",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "Agile Stock", "Type": 6 },
|
||||||
|
{ "Name": "5mW Combat Laser", "Type": 2 },
|
||||||
|
{ "Name": "Strike Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "Large Caliber Ammo", "Type": 7 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "PDW-57",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Flash Guard", "Type": 4 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Pharo",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Barrel (Short)", "Type": 5 },
|
||||||
|
{ "Name": "MIP Strike Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "36 Round Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "QQ9",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC Recon Tac Long", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "45 Round Extended Mag", "Type": 7 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/853663337824780348/image2.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "QXR",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Flash Guard", "Type": 4 },
|
||||||
|
{ "Name": "MIP Light Barrel (Short)", "Type": 5 },
|
||||||
|
{ "Name": "YKM Light Stock", "Type": 6 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Enhanced Bolt", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861883636013727774/Screenshot_20210706-1344422.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Razorback",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "Extended Mag A", "Type": 7 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Rapid Fire", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922742705881098/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RUS-79U",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Barrel (Short)", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "38 Round Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "PP19 Bizon",
|
||||||
|
"Type": 1,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Monolithic Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "OWC Skeleton Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Large Caliber Ammo A", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861887619049717770/Screenshot_20210706-1351142.png?width=881&height=487"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Chopper",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC Light Muzzle Brake", "Type": 4 },
|
||||||
|
{ "Name": "Chopper Infatry", "Type": 5 },
|
||||||
|
{ "Name": "Heavy Handle", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "M4LMG",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Ultralight Barrel", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "40 Round Light Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RPD",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Snatch Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "S36",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "UL736",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC 12.4\" Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "RTC Steady Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "60 Round Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Holger 26",
|
||||||
|
"Type": 2,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "NO Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Holger-26C Lightweight Polymer Mag", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/540218400413188116/856109420311740436/Screenshot_20210620-151957.png?width=881&height=407"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Arctic .50",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "Assassin Short", "Type": 5 },
|
||||||
|
{ "Name": "OWC Skeleton Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DL Q33",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 6 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Locus",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "YKM Lightweight Short", "Type": 5 },
|
||||||
|
{ "Name": "OWC Skeleton Stock", "Type": 6 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/691133003866439701/861887618546139146/Screenshot_20210706-1357422.png?width=881&height=480"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "M21 EBR",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "NA-45",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Outlaw",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Memorial Cowboy", "Type": 5 },
|
||||||
|
{ "Name": "MIP Stalker Stock", "Type": 6 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "FMJ", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "XPR-50",
|
||||||
|
"Type": 4,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Kilo Bolt-Action",
|
||||||
|
"Type": 5,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "YKM Combat Stock", "Type": 5 },
|
||||||
|
{ "Name": "Stippled Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Fast Reload", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922652452454460/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SP-R 208",
|
||||||
|
"Type": 5,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "OWC Skeleton Stock", "Type": 6 },
|
||||||
|
{ "Name": "Light Bolt", "Type": 9 },
|
||||||
|
{ "Name": "Extended Mag A", "Type": 7 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922699063885864/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "SKS",
|
||||||
|
"Type": 5,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Operator Foregrip", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922602674454538/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MK 2",
|
||||||
|
"Type": 5,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "OWC Light Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "18.0 Sport Barrel", "Type": 5 },
|
||||||
|
{ "Name": "MIP Sport Stock", "Type": 6 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "OWC Laser-Tactical", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/540218400413188116/856114522922156082/Screenshot_20210620-153228.png?width=1283&height=592"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "BY15",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Marauder Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "Extended Barrel(+2)", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Echo",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Choke", "Type": 4 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "Extended Mag C", "Type": 7 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HS0405",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Choke", "Type": 4 },
|
||||||
|
{ "Name": "RTC Extended Light Barrel", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Speed Up Kill", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922783414616104/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "HS2126",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "KRM-262",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Marauder Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "Extended Barrel(+2)", "Type": 5 },
|
||||||
|
{ "Name": "No Stock", "Type": 6 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Striker",
|
||||||
|
"Type": 3,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 },
|
||||||
|
{ "Name": "404", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": ".50 GS ",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Monolithic Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "Granulated Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "Lightweight Trigger", "Type": 1 },
|
||||||
|
{ "Name": "OWC Laser - Tactical", "Type": 3 },
|
||||||
|
{ "Name": "Sleight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "J358",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC Light Muzzle Brake", "Type": 4 },
|
||||||
|
{ "Name": "J358 Custom Light", "Type": 5 },
|
||||||
|
{ "Name": "Red Dot Sight 2", "Type": 0 },
|
||||||
|
{ "Name": "Stopping Power Reload", "Type": 7 },
|
||||||
|
{ "Name": "Lightweight Trigger", "Type": 10 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/842014909264953354/852922819507126272/image0.png?width=1001&height=563"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MW11",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "MIP Light Flash Guard", "Type": 4 },
|
||||||
|
{ "Name": "Rubberized Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "15 Round Reload", "Type": 7 },
|
||||||
|
{ "Name": "Lightweight Trigger", "Type": 10 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 }
|
||||||
|
],
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Renetti",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "RTC Compensator", "Type": 4 },
|
||||||
|
{ "Name": "MIP Light", "Type": 5 },
|
||||||
|
{ "Name": "Handmade Grip Tape", "Type": 2 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Full Ammo", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://pbs.twimg.com/media/E2f2W6eXEAM1Yb1?format=jpg&name=large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Shorty",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "Marauder Suppressor", "Type": 4 },
|
||||||
|
{ "Name": "RTC Steady Stock", "Type": 6 },
|
||||||
|
{ "Name": "OWC Stable", "Type": 11 },
|
||||||
|
{ "Name": "MIP Laser 5mW", "Type": 3 },
|
||||||
|
{ "Name": "Slight of Hand", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/692227531235000400/866204001065369620/image0.png?width=840&height=630"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "Crossbow",
|
||||||
|
"Type": 6,
|
||||||
|
"Attachments": [
|
||||||
|
{ "Name": "28 Bow String", "Type": 12 },
|
||||||
|
{ "Name": "Heavy Limb", "Type": 13 },
|
||||||
|
{ "Name": "Archer Stock", "Type": 6 },
|
||||||
|
{ "Name": "Gas Grenade Bolt", "Type": 7 },
|
||||||
|
{ "Name": "Full Ammo", "Type": 8 }
|
||||||
|
],
|
||||||
|
"URL": "https://media.discordapp.net/attachments/785461568464748593/882503628538126336/image0.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"WeaponTypes": [
|
||||||
|
"Assault",
|
||||||
|
"SMG",
|
||||||
|
"LMG",
|
||||||
|
"Shotgun",
|
||||||
|
"Sniper",
|
||||||
|
"Marksman",
|
||||||
|
"Pistol"
|
||||||
|
],
|
||||||
|
"AttachmentTypes": [
|
||||||
|
"Optic",
|
||||||
|
"Underbarrel",
|
||||||
|
"Rear Grip",
|
||||||
|
"Laser",
|
||||||
|
"Muzzle",
|
||||||
|
"Barrel",
|
||||||
|
"Stock",
|
||||||
|
"Ammunition",
|
||||||
|
"Perk",
|
||||||
|
"Bolt",
|
||||||
|
"Trigger Action",
|
||||||
|
"Guard",
|
||||||
|
"Bowstring",
|
||||||
|
"Limb"
|
||||||
|
]
|
||||||
|
}
|
26
util/Data/dares.json
Normal file
26
util/Data/dares.json
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
"Shave your arms and send me a pic.",
|
||||||
|
"Record yourself singing a song and post it on YouTube.",
|
||||||
|
"Try to lick your own foot!",
|
||||||
|
"Message someone you haven’t talked to in at least 1 year on Facebook or Instagram and take a screenshot.",
|
||||||
|
"Text your crush and ask them out on a date.",
|
||||||
|
"Cut a piece of your hair.",
|
||||||
|
"List everyone as the emoji(s) you think best fits them.",
|
||||||
|
"Change your nickname/username to whatever the group wants.",
|
||||||
|
"Send me a screenshot of your messages with the last person besides me you texted.",
|
||||||
|
"Brush your teeth with peanut butter or another condiment and send me a pic.",
|
||||||
|
"Rate everyone here 1-10 in terms of personality.",
|
||||||
|
"Take a really unflattering picture and make it your profile picture for one full day.",
|
||||||
|
"Send me a screenshot of your selfies gallery.",
|
||||||
|
"Text a random number and write “I see dead people”.",
|
||||||
|
"Tell the group in detail about your first kiss.",
|
||||||
|
"Tell a joke until it makes everyone laugh.",
|
||||||
|
"Tell your girlfriend that your friends don’t like her so you can’t be with her anymore.",
|
||||||
|
"Brush your teeth with your best friend’s toothbrush.",
|
||||||
|
"Show everyone your unshaved legs.",
|
||||||
|
"Break a raw egg on your forehead.",
|
||||||
|
"Call 5 different people and talk to them in 5 different accents.",
|
||||||
|
"Set your crush’s picture as your FB profile picture.",
|
||||||
|
"Show everyone your search history for the past week."
|
||||||
|
|
||||||
|
]
|
1
util/Data/giveaways.json
Normal file
1
util/Data/giveaways.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[]
|
4102
util/Data/scam.json
Normal file
4102
util/Data/scam.json
Normal file
File diff suppressed because it is too large
Load diff
1
util/Data/skins.json
Normal file
1
util/Data/skins.json
Normal file
File diff suppressed because one or more lines are too long
63
util/Data/truth.json
Normal file
63
util/Data/truth.json
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
[
|
||||||
|
"When was the last time you lied?",
|
||||||
|
"When was the last time you cried?",
|
||||||
|
"What's your biggest fear?",
|
||||||
|
"What's your biggest fantasy?",
|
||||||
|
"Do you have any fetishes?",
|
||||||
|
"What's something you're glad your mum doesn't know about you?",
|
||||||
|
"Have you ever cheated on someone?",
|
||||||
|
"What's the worst thing you've ever done?",
|
||||||
|
"What's a secret you've never told anyone?",
|
||||||
|
"Do you have a hidden talent?",
|
||||||
|
"Who was your first celebrity crush?",
|
||||||
|
"What are your thoughts on polyamory?",
|
||||||
|
"What's the worst intimate experience you've ever had?",
|
||||||
|
"What's the best intimate experience you've ever had?",
|
||||||
|
"Have you ever cheated in an exam?",
|
||||||
|
"What's the most drunk you've ever been?",
|
||||||
|
"Have you ever broken the law?",
|
||||||
|
"What's the most embarrassing thing you've ever done?",
|
||||||
|
"What's your biggest insecurity?",
|
||||||
|
"Have you ever stayed friends with someone because it benefitted you beyond just the friendship?",
|
||||||
|
"What's the biggest mistake you've ever made?",
|
||||||
|
"What's the most disgusting thing you've ever done?",
|
||||||
|
"Who would you like to kiss in this room?",
|
||||||
|
"What's one thing you hate people knowing about you?",
|
||||||
|
"What's the worst thing anyone's ever done to you?",
|
||||||
|
"What's the best thing anyone's ever done for you?",
|
||||||
|
"Have you ever had a run in with the law?",
|
||||||
|
"What's your worst habit?",
|
||||||
|
"What's the most embarrassing thing you've done in a taxi?",
|
||||||
|
"What's the worst thing you've ever said to anyone?",
|
||||||
|
"Have you ever peed in the shower?",
|
||||||
|
"What's the strangest dream you've had?",
|
||||||
|
"Have you ever been caught doing something you shouldn't have?",
|
||||||
|
"What's the worst date you've been on?",
|
||||||
|
"What's the best date you've been on?",
|
||||||
|
"What happened on the latest night out you've ever had?",
|
||||||
|
"What's your biggest regret?",
|
||||||
|
"What's the biggest misconception about you?",
|
||||||
|
"Have you ever said something you regret about someone in this room?",
|
||||||
|
"What's one thing you wish people knew about you?",
|
||||||
|
"Where's the weirdest place you've had sex?",
|
||||||
|
"Why did your last relationship break down?",
|
||||||
|
"Have you ever lied to get out of a bad date?",
|
||||||
|
"What's the most trouble you've been in?",
|
||||||
|
"When did you last have sex outside?",
|
||||||
|
"What's the worst thing you've lied about?",
|
||||||
|
"What's one thing you wish you'd lied about?",
|
||||||
|
"What's the best piece of advice you've been given?",
|
||||||
|
"What's the most you've spent on a night out?",
|
||||||
|
"Name a time you think you were a bad partner",
|
||||||
|
"What's your guilty pleasure?",
|
||||||
|
"What's one thing you only do when you're alone?",
|
||||||
|
"If you had to get back with an ex, who would you choose?",
|
||||||
|
"If you had to cut one friend out of your life, who would it be?",
|
||||||
|
"Do you have a favourite friend?",
|
||||||
|
"Do you have a favourite sibling?",
|
||||||
|
"What's the strangest rumour you've heard about yourself?",
|
||||||
|
"What's your biggest turn on?",
|
||||||
|
"What's the silliest reason you've left a club early?",
|
||||||
|
"What have you purchased that's been the biggest waste of money?",
|
||||||
|
"If you could swap lives with someone in this room, who would it be?"
|
||||||
|
]
|
45
util/dist/handler.js
vendored
45
util/dist/handler.js
vendored
|
@ -28,28 +28,27 @@ module.exports = async client => {
|
||||||
ownercmds.push(file);
|
ownercmds.push(file);
|
||||||
});
|
});
|
||||||
client.on("ready", async () => {
|
client.on("ready", async () => {
|
||||||
await client.guilds.cache.get("840225563193114624").commands.set(ownercmds);
|
const gg = client.guilds.cache.get("840225563193114624");
|
||||||
await client.application.commands.set(cmds);
|
await gg.commands.set(ownercmds);
|
||||||
// .then(async cmd => {
|
await client.application.commands.set(cmds).then(async cmd => {
|
||||||
// client.guilds.cache.forEach(g => {
|
client.guilds.cache.forEach(g => {
|
||||||
// const getroles = name => {
|
const getroles = name => {
|
||||||
// const perms = cmds.find(n => n.name == name).UserPerms;
|
const perms = cmds.find(n => n.name == name).UserPerms;
|
||||||
// if (!perms) return null;
|
if (!perms) return null;
|
||||||
// return g.roles.cache.filter(
|
return g.roles.cache.filter(
|
||||||
// z => z.permissions.has(perms) && !z.managed
|
z => z.permissions.has(perms) && !z.managed
|
||||||
// );
|
);
|
||||||
// };
|
};
|
||||||
// const fullPermissions = cmd.reduce((accumulator, v) => {
|
const fullPermissions = cmd.reduce((accumulator, v) => {
|
||||||
// const roles = getroles(v.name);
|
const roles = getroles(v.name);
|
||||||
// if (!roles) return accumulator;
|
if (!roles) return accumulator;
|
||||||
// const permissions = roles.reduce((a, w) => {
|
const permissions = roles.reduce((a, w) => {
|
||||||
// return [...a, { id: w.id, type: "ROLE", permission: true }];
|
return [...a, { id: w.id, type: "ROLE", permission: true }];
|
||||||
// }, []);
|
}, []);
|
||||||
// return [...accumulator, { id: v.id, permissions }];
|
return [...accumulator, { id: v.id, permissions }];
|
||||||
// }, []);
|
}, []);
|
||||||
// g.commands.permissions.set({ fullPermissions }).catch(null);
|
g.commands.permissions.set({ fullPermissions });
|
||||||
// });
|
});
|
||||||
// })
|
});
|
||||||
// .catch(null);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,8 +4,6 @@ const nmDt = require("../Data/aliases.json");
|
||||||
const weaponActualName = nmDt.weaponActualName;
|
const weaponActualName = nmDt.weaponActualName;
|
||||||
const weaponAlliasName = nmDt.weaponAlliasName;
|
const weaponAlliasName = nmDt.weaponAlliasName;
|
||||||
Object.defineProperty(String.prototype, "Simplify", {
|
Object.defineProperty(String.prototype, "Simplify", {
|
||||||
// Function to remove all characters except 0-9 and a-z
|
|
||||||
// Eg "AK-47" -> "ak47"
|
|
||||||
value: function Simplify() {
|
value: function Simplify() {
|
||||||
return this.toLowerCase().replace(/[^0-9a-z]/g, "");
|
return this.toLowerCase().replace(/[^0-9a-z]/g, "");
|
||||||
},
|
},
|
||||||
|
@ -14,30 +12,33 @@ Object.defineProperty(String.prototype, "Simplify", {
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "IsPositive", {
|
Object.defineProperty(Number.prototype, "IsPositive", {
|
||||||
// Function to check the number is positive or not
|
|
||||||
value: function IsPositive() {
|
value: function IsPositive() {
|
||||||
if (this > 0) return true;
|
if (this > 0) {
|
||||||
else return false;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
writable: true,
|
writable: true,
|
||||||
configurable: true,
|
configurable: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "IsNegative", {
|
Object.defineProperty(Number.prototype, "IsNegative", {
|
||||||
// Function to check the number is negative or not
|
|
||||||
value: function IsNegative() {
|
value: function IsNegative() {
|
||||||
if (this < 0) return true;
|
if (this < 0) {
|
||||||
else return false;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
writable: true,
|
writable: true,
|
||||||
configurable: true,
|
configurable: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.defineProperty(Number.prototype, "ToBool", {
|
Object.defineProperty(Number.prototype, "ToBool", {
|
||||||
// Function to check the number is one or not
|
|
||||||
value: function ToBool() {
|
value: function ToBool() {
|
||||||
if (this == 1) return true;
|
if (this == 1) {
|
||||||
else return false;
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
writable: true,
|
writable: true,
|
||||||
configurable: true,
|
configurable: true,
|
||||||
|
@ -48,19 +49,15 @@ Object.defineProperty(Number.prototype, "PlusHL", {
|
||||||
if (this.toString()[0] == "-") {
|
if (this.toString()[0] == "-") {
|
||||||
return parseFloat(this.toFixed(2)).toString();
|
return parseFloat(this.toFixed(2)).toString();
|
||||||
}
|
}
|
||||||
return `+${parseFloat(this.toFixed(2)).toString()}`;
|
return "+" + parseFloat(this.toFixed(2)).toString();
|
||||||
},
|
},
|
||||||
writable: true,
|
writable: true,
|
||||||
configurable: true,
|
configurable: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Function to fix the input statement */
|
|
||||||
function inpFixer(inpmsg) {
|
function inpFixer(inpmsg) {
|
||||||
const parts = PartSpliter(inpmsg);
|
const parts = partExtracter(inpmsg);
|
||||||
// parts will be an array
|
|
||||||
//eg: ["fennec", "akimbo, mono"]
|
|
||||||
nmDt.attachmentAlliasName[0].map((x, i) =>
|
nmDt.attachmentAlliasName[0].map((x, i) =>
|
||||||
// x is the content of each index, i is the number of each index
|
|
||||||
x.map(y => {
|
x.map(y => {
|
||||||
if (parts[0].startsWith(y + " ") || parts[0].endsWith(" " + y)) {
|
if (parts[0].startsWith(y + " ") || parts[0].endsWith(" " + y)) {
|
||||||
inpmsg =
|
inpmsg =
|
||||||
|
@ -68,30 +65,24 @@ function inpFixer(inpmsg) {
|
||||||
(parts[1] ? ", " : " + ") +
|
(parts[1] ? ", " : " + ") +
|
||||||
nmDt.attachmentActualName[0][i];
|
nmDt.attachmentActualName[0][i];
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
// so it fking only fix akimbo and stopping power wtf
|
|
||||||
return inpmsg;
|
return inpmsg;
|
||||||
}
|
}
|
||||||
// Function to split weapon name and the attachments from the input statement
|
|
||||||
function PartSpliter(inpmsg) {
|
function partExtracter(inpmsg) {
|
||||||
if (inpmsg.includes(" + ")) {
|
if (inpmsg.includes(" + ")) {
|
||||||
// If the input statement has multiple attachments joined by "+", split them and output them as an array of strings [0] is the weapon name, [1] is the attachments
|
|
||||||
// Eg: "M4A1 + Silencer + Flashlight" -> ["M4A1", "Silencer + Flashlight"]
|
|
||||||
const out = inpmsg
|
const out = inpmsg
|
||||||
.split(" + ")
|
.split(" + ")
|
||||||
.map(x => x.split("+"))
|
.map(x => x.split("+"))
|
||||||
.flat();
|
.flat();
|
||||||
return [out.shift(), out.join(", ")];
|
return [out.shift(), out.join(", ")];
|
||||||
}
|
}
|
||||||
// If there is only one attachment, output it as an array of strings [0] is the weapon name, [1] is the attachment
|
|
||||||
// Eg: "M4A1 with Flashlight" -> ["M4A1", "Flashlight"]
|
|
||||||
return inpmsg.split(" with ");
|
return inpmsg.split(" with ");
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasAttachments(inpmsg) {
|
function hasAttachments(inpmsg) {
|
||||||
inpmsg = inpFixer(inpmsg);
|
inpmsg = inpFixer(inpmsg);
|
||||||
// If the input statement has multiple attachments joined by "+" or "with", split them and output them as an array of strings [0] is the weapon name, [1] is the attachments
|
|
||||||
if (
|
if (
|
||||||
inpmsg.split(" with ").filter(x => x.Simplify()).length > 1 ||
|
inpmsg.split(" with ").filter(x => x.Simplify()).length > 1 ||
|
||||||
inpmsg.split(" + ").filter(x => x.Simplify()).length > 1
|
inpmsg.split(" + ").filter(x => x.Simplify()).length > 1
|
||||||
|
@ -102,202 +93,174 @@ function hasAttachments(inpmsg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function isolator(inpmsg) {
|
function isolator(inpmsg) {
|
||||||
return PartSpliter(inpFixer(inpmsg));
|
return partExtracter(inpFixer(inpmsg));
|
||||||
}
|
}
|
||||||
// identifying the weapon
|
|
||||||
function weaponIdentifier(inpmsg) {
|
function weaponIdentifier(inpmsg) {
|
||||||
const inpWeaponName = isolator(inpmsg)[0];
|
const inpWeaponName = isolator(inpmsg)[0];
|
||||||
// ["ak", "mono"] -> inpWeaponName: "ak"
|
|
||||||
// if weapon name is too short, return the error
|
|
||||||
if (inpWeaponName.length < 2) {
|
if (inpWeaponName.length < 2) {
|
||||||
return inpmsg.trim().length
|
return inpmsg.trim().length
|
||||||
? `The name ${inpmsg.trim()} is too short.`
|
? "The name `" + inpmsg.trim() + "` is too short."
|
||||||
: "There isn't any weapon name.";
|
: "Empty weapon name";
|
||||||
}
|
}
|
||||||
let probableWeapons = [];
|
let probableWeapons = [];
|
||||||
// Loop through all the weapons to find the probable weapons
|
|
||||||
// Eg: "ak"
|
|
||||||
for (let i = 0; i < data.cguns.length; i++) {
|
for (let i = 0; i < data.cguns.length; i++) {
|
||||||
if (inpWeaponName.Simplify() == data.cguns[i].gunname.Simplify()) {
|
if (inpWeaponName.Simplify() == data.cguns[i].gunname.Simplify()) {
|
||||||
// if the simplified name of the weapon is the same as the weapon name in the database, return the only one stats object
|
|
||||||
return JSON.parse(JSON.stringify(data.cguns[i]));
|
return JSON.parse(JSON.stringify(data.cguns[i]));
|
||||||
} else if (
|
}
|
||||||
|
else if (
|
||||||
data.cguns[i].gunname.Simplify().includes(inpWeaponName.Simplify())
|
data.cguns[i].gunname.Simplify().includes(inpWeaponName.Simplify())
|
||||||
) {
|
) {
|
||||||
// If the weapon name is included in the actual name of the weapon
|
|
||||||
// push the weapon to the probableWeapons array
|
|
||||||
probableWeapons.push(i);
|
probableWeapons.push(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if there is only one probable weapon, mean the gun has already been identified
|
|
||||||
if (probableWeapons.length == 1) {
|
if (probableWeapons.length == 1) {
|
||||||
// if there is only one probable weapon, return the only one stats object
|
|
||||||
return JSON.parse(JSON.stringify(data.cguns[probableWeapons[0]]));
|
return JSON.parse(JSON.stringify(data.cguns[probableWeapons[0]]));
|
||||||
}
|
}
|
||||||
// continue loop when there is no identified weapons or there are more than one identfied weaponds
|
|
||||||
// detecting aliases
|
|
||||||
// getting total number of weapons that had added aliases
|
|
||||||
for (let i = 0; i < weaponAlliasName.length; i++) {
|
for (let i = 0; i < weaponAlliasName.length; i++) {
|
||||||
// getting the number of aliases of each weapon
|
|
||||||
for (let j = 0; j < weaponAlliasName[i].length; j++) {
|
for (let j = 0; j < weaponAlliasName[i].length; j++) {
|
||||||
// weaponAliases[i][j] is the each alias of each weapon
|
|
||||||
// finding if simplified alias is same as input weapon name
|
|
||||||
if (weaponAlliasName[i][j].Simplify() == inpWeaponName.Simplify()) {
|
if (weaponAlliasName[i][j].Simplify() == inpWeaponName.Simplify()) {
|
||||||
// if simplified alias is same as input weapon name
|
|
||||||
// eg "mow" == "mow", run the loop
|
|
||||||
for (let i2 = 0; i2 < data.cguns.length; i2++) {
|
for (let i2 = 0; i2 < data.cguns.length; i2++) {
|
||||||
if (weaponActualName[i] == data.cguns[i2].gunname) {
|
if (
|
||||||
// use the actual name of the weapon to find the weapon
|
weaponActualName[i].Simplify() == data.cguns[i2].gunname.Simplify()
|
||||||
|
) {
|
||||||
return JSON.parse(JSON.stringify(data.cguns[i2]));
|
return JSON.parse(JSON.stringify(data.cguns[i2]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// removing duplicates in the array
|
|
||||||
probableWeapons = [...new Set(probableWeapons)];
|
probableWeapons = [...new Set(probableWeapons)];
|
||||||
// if there is only one probable weapon, return the only one stats object
|
if (probableWeapons.length == 1) {
|
||||||
if (probableWeapons.length == 1)
|
|
||||||
return JSON.parse(JSON.stringify(data.cguns[probableWeapons[0]]));
|
return JSON.parse(JSON.stringify(data.cguns[probableWeapons[0]]));
|
||||||
else if (probableWeapons.length > 1) {
|
}
|
||||||
// reply with the question of probable weapons
|
if (probableWeapons.length > 1) {
|
||||||
return `Did you mean ${probableWeapons
|
return (
|
||||||
|
"Did you mean `" +
|
||||||
|
probableWeapons
|
||||||
.map(x => data.cguns[x].gunname)
|
.map(x => data.cguns[x].gunname)
|
||||||
.reduce((out, x, i) =>
|
.reduce((out, x, i) =>
|
||||||
[out, x].join(i === probableWeapons.length - 1 ? "` or `" : "`, `")
|
[out, x].join(i === probableWeapons.length - 1 ? "` or `" : "`, `"),
|
||||||
)}
|
) +
|
||||||
?`;
|
"`?"
|
||||||
} else return `Couldn't identify the weapon: "${inpWeaponName}"`;
|
);
|
||||||
|
}
|
||||||
|
return "Couldn't identify the weapon: `" + '"' + inpWeaponName + '"`';
|
||||||
}
|
}
|
||||||
// identifying attachments and return array or error
|
|
||||||
function attachmentsIdentifier(inpmsg, gun) {
|
function attachmentsIdentifier(inpmsg, attachmentsData, inpStats) {
|
||||||
if (!hasAttachments(inpmsg)) return [];
|
if (!hasAttachments(inpmsg)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
// no need for isolator because using slash commands, we get individual attachment
|
// no need for isolator because using slash commands, we get individual attachment
|
||||||
let inputAttachmentsNames = isolator(inpmsg)[1]
|
let inputAttachmentsNames = isolator(inpmsg)[1]
|
||||||
.split(/ & |, |,| and /)
|
.split(/ & |, |,| and /)
|
||||||
.filter(x => x);
|
.filter(x => x);
|
||||||
|
|
||||||
const tooSmall = inputAttachmentsNames.filter(x => x.length < 3);
|
const tooSmall = inputAttachmentsNames.filter(x => x.length < 3);
|
||||||
// filter all elements thats shorter than 2 characters
|
|
||||||
inputAttachmentsNames = inputAttachmentsNames.filter(x => !(x.length < 3));
|
inputAttachmentsNames = inputAttachmentsNames.filter(x => !(x.length < 3));
|
||||||
let errorMsgs = "",
|
let errorMsgs = "",
|
||||||
errors = [],
|
errors = [],
|
||||||
unidentifined = [];
|
unidentifined = [];
|
||||||
|
|
||||||
if (inputAttachmentsNames.length == 0)
|
if (inputAttachmentsNames.length == 00) {
|
||||||
errorMsgs += "\nAttachments are missing!\n";
|
errorMsgs += "\nAttachments are missing!\n";
|
||||||
// if (inputAttachmentsNames.length >= 10) return "Cocaineeeeee"; ?????????
|
}
|
||||||
|
if (inputAttachmentsNames.length >= 10) {
|
||||||
|
return "Cocaineeeeee";
|
||||||
|
}
|
||||||
|
|
||||||
// Can directly use args[] to return, no need for isolator, partExtractor, inpFixer
|
// Can directly use args[] to return, no need for isolator, partExtractor, inpFixer
|
||||||
const splitAttachmentsDataName = [],
|
const splitAttachmentsDataName = [],
|
||||||
outAttachments = [];
|
outAttachments = [];
|
||||||
|
|
||||||
for (let i = 0; i < gun.aments.length; i++) {
|
for (let i = 0; i < attachmentsData.length; i++) {
|
||||||
// Eg: "Stippled Grip Tape" -> ["Stippled", "Grip", "Tape"]
|
|
||||||
splitAttachmentsDataName.push([
|
splitAttachmentsDataName.push([
|
||||||
...new Set(
|
...new Set(
|
||||||
gun.aments[i].name
|
attachmentsData[i].name
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.filter(x => x)
|
.filter(x => x)
|
||||||
.map(x => x.trim())
|
.map(x => x.trim())
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
if (Math.max(...splitAttachmentsDataName.map(x => x.length)) > 6) {
|
||||||
// splitAttachmentsDataName[i] = ["Stippled", "Grip", "Tape"]
|
return "Cocaineeeeee";
|
||||||
|
}
|
||||||
for (let j = 0; j < splitAttachmentsDataName[i].length; j++) {
|
for (let j = 0; j < splitAttachmentsDataName[i].length; j++) {
|
||||||
// simplify the attachments name
|
|
||||||
// Eg: ["Stippled", "Grip", "Tape"] -> ["stippled", "grip", "tape"]
|
|
||||||
splitAttachmentsDataName[i][j] =
|
splitAttachmentsDataName[i][j] =
|
||||||
splitAttachmentsDataName[i][j].Simplify();
|
splitAttachmentsDataName[i][j].Simplify();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// inputAttachmentsNames = [["stippled", "grip", "tape"]
|
|
||||||
for (let i = 0; i < inputAttachmentsNames.length; i++) {
|
for (let i = 0; i < inputAttachmentsNames.length; i++) {
|
||||||
let probables = [];
|
var probables = [];
|
||||||
// loop through all the input attachments and split them into words
|
|
||||||
var splitInputAttachmentsName = inputAttachmentsNames[i]
|
var splitInputAttachmentsName = inputAttachmentsNames[i]
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.filter(x => x);
|
.filter(x => x);
|
||||||
|
|
||||||
function finder() {
|
function finder() {
|
||||||
//splitInputAttachmentsName = [["stippled", "grip", "tape"], ["545", "ammo"], ["owc","lazer", "tactical"]]
|
|
||||||
for (let j = 0; j < splitAttachmentsDataName.length; j++) {
|
for (let j = 0; j < splitAttachmentsDataName.length; j++) {
|
||||||
for (let i2 = 0; i2 < splitAttachmentsDataName[j].length; i2++) {
|
for (let i2 = 0; i2 < splitAttachmentsDataName[j].length; i2++) {
|
||||||
for (let i3 = 0; i3 < splitInputAttachmentsName.length; i3++) {
|
for (let i3 = 0; i3 < splitInputAttachmentsName.length; i3++) {
|
||||||
// if simplified input attachment name is included in the real attachments name
|
|
||||||
if (
|
if (
|
||||||
splitAttachmentsDataName[j][i2].includes(
|
splitAttachmentsDataName[j][i2].includes(
|
||||||
splitInputAttachmentsName[i3].Simplify()
|
splitInputAttachmentsName[i3].Simplify(),
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
// if probables list doesn't include the attachment, push
|
|
||||||
let probablePushed = false;
|
let probablePushed = false;
|
||||||
for (let i4 = 0; i4 < probables.length; i4++) {
|
for (let i4 = 0; i4 < probables.length; i4++) {
|
||||||
// push another attachment that also probable to the probables list to the same array that identified last loop
|
|
||||||
// Eg: probables = [ [32]] // as user input mag and first loop it identfified extended mag
|
|
||||||
// then as it got more possible, it will push large extended mag to the same array -> [ [32,33] ]
|
|
||||||
if (!probables[i4].includes(j)) {
|
if (!probables[i4].includes(j)) {
|
||||||
probables[i4].push(j);
|
probables[i4].push(j);
|
||||||
// make it true so that it doesn't push again in the next condition
|
|
||||||
probablePushed = true;
|
probablePushed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// push if the attachment isn't been identified yet
|
if (!probablePushed) {
|
||||||
if (!probablePushed) probables.push([j]);
|
probables.push([j]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finder();
|
finder();
|
||||||
// finding magazines attachments
|
|
||||||
if (
|
if (
|
||||||
(inputAttachmentsNames[i].includes(" rounds mag") ||
|
(inputAttachmentsNames[i].includes(" rounds mag") ||
|
||||||
inputAttachmentsNames[i].includes(" round mag") ||
|
inputAttachmentsNames[i].includes(" round mag")) &&
|
||||||
inputAttachmentsNames[i].includes(" round") ||
|
|
||||||
inputAttachmentsNames[i].includes(" rounds")) &&
|
|
||||||
inputAttachmentsNames[i].startsWith(
|
inputAttachmentsNames[i].startsWith(
|
||||||
inputAttachmentsNames[i].replace(/\D/g, "")
|
inputAttachmentsNames[i].replace(/\D/g, ""),
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
var tmp1 = parseInt(inputAttachmentsNames[i]);
|
var tmp1 = parseInt(inputAttachmentsNames[i]);
|
||||||
// calculating the sum of number of rounds and see if it matches the input number of rounds
|
const tmp2 = attachmentsData.filter(
|
||||||
const tmp2 = gun.aments.filter(
|
|
||||||
x =>
|
x =>
|
||||||
x.type === 8 && x.effects[27] + x.effects[28] + gun.stats[17] === tmp1
|
x.type === 8 && x.effects[27] + x.effects[28] + inpStats[17] === tmp1,
|
||||||
);
|
);
|
||||||
// push if the magazine is found
|
|
||||||
if (tmp2.length === 1) {
|
if (tmp2.length === 1) {
|
||||||
outAttachments.push(tmp2[0]);
|
outAttachments.push(tmp2[0]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if probables is empty or there is more than one identified attachment
|
|
||||||
if (
|
if (
|
||||||
probables.length === 0 ||
|
probables.length === 0 ||
|
||||||
probables[probables.length - 1].length !== 1 ||
|
probables[probables.length - 1].length !== 1 ||
|
||||||
probables.length < splitInputAttachmentsName.length
|
probables.length < splitInputAttachmentsName.length
|
||||||
) {
|
) {
|
||||||
// empty probables as can't indentify the attachment
|
|
||||||
probables = [];
|
probables = [];
|
||||||
// the splitInputAttachmentsName isn't simplified pls rmb
|
splitInputAttachmentsName.map((x, i5) =>
|
||||||
splitInputAttachmentsName.map((x, i5) => {
|
nmDt.attachmentAlliasName[1].map((y, i6) =>
|
||||||
// finding aliases
|
|
||||||
nmDt.attachmentAlliasName[1].map((y, i6) => {
|
|
||||||
y.map(z => {
|
y.map(z => {
|
||||||
if (z.Simplify().includes(x.Simplify())) {
|
if (x.Simplify() === z.Simplify()) {
|
||||||
splitInputAttachmentsName[i5] = nmDt.attachmentActualName[1][i6];
|
splitInputAttachmentsName[i5] = nmDt.attachmentActualName[1][i6];
|
||||||
}
|
}
|
||||||
});
|
}),
|
||||||
});
|
),
|
||||||
});
|
);
|
||||||
// simple iteration to make the array again
|
|
||||||
splitInputAttachmentsName = splitInputAttachmentsName
|
splitInputAttachmentsName = splitInputAttachmentsName
|
||||||
.join(" ")
|
.join(" ")
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.filter(x => x);
|
.filter(x => x);
|
||||||
// find one more time as we do aliases already
|
|
||||||
finder();
|
finder();
|
||||||
if (
|
if (
|
||||||
probables.length === 0 ||
|
probables.length === 0 ||
|
||||||
|
@ -311,30 +274,29 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
finder();
|
finder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (probables.length === 0) {
|
if (probables.length === 0) {
|
||||||
// push to unidentifined list as can't be identified after serveral times
|
|
||||||
unidentifined.push(inputAttachmentsNames[i]);
|
unidentifined.push(inputAttachmentsNames[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// curr is the most probable attachment
|
|
||||||
var curr = probables[probables.length - 1];
|
var curr = probables[probables.length - 1];
|
||||||
const temp1 = probables[probables.length - 1].filter(
|
const temp1 = probables[probables.length - 1].filter(
|
||||||
x => gun.aments[x].name.Simplify() == inputAttachmentsNames[i].Simplify()
|
x =>
|
||||||
|
attachmentsData[x].name.Simplify() ==
|
||||||
|
inputAttachmentsNames[i].Simplify(),
|
||||||
);
|
);
|
||||||
// see if the length of the array is the same or not
|
|
||||||
// Eg: splitAttachmentsDataName[x] = ["stippled", "grip", "tape"] and splitInputAttachmentsName = ["stippled", "grip", "tape"]
|
|
||||||
// then it it equal
|
|
||||||
const temp2 = probables[probables.length - 1].filter(
|
const temp2 = probables[probables.length - 1].filter(
|
||||||
x =>
|
x =>
|
||||||
splitAttachmentsDataName[x].length == splitInputAttachmentsName.length
|
splitAttachmentsDataName[x].length == splitInputAttachmentsName.length,
|
||||||
);
|
);
|
||||||
|
/**/ if (temp1.length === 1 && temp2.length !== 1) {
|
||||||
// if found probable, push it
|
|
||||||
if (temp1.length === 1 && temp2.length !== 1) {
|
|
||||||
probables.push([temp1]);
|
probables.push([temp1]);
|
||||||
} else if (temp1.length !== 1 && temp2.length === 1) {
|
}
|
||||||
|
else if (temp1.length !== 1 && temp2.length === 1) {
|
||||||
probables.push([temp2]);
|
probables.push([temp2]);
|
||||||
} else if (
|
}
|
||||||
|
else if (
|
||||||
temp1.length === 1 &&
|
temp1.length === 1 &&
|
||||||
temp2.length === 1 &&
|
temp2.length === 1 &&
|
||||||
temp1[0] == temp2[0]
|
temp1[0] == temp2[0]
|
||||||
|
@ -345,23 +307,20 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
probables[probables.length - 1].length != 1 ||
|
probables[probables.length - 1].length != 1 ||
|
||||||
probables.length < splitInputAttachmentsName.length
|
probables.length < splitInputAttachmentsName.length
|
||||||
) {
|
) {
|
||||||
// ask the user if he means xxx = which attachment
|
|
||||||
errors.push(
|
errors.push(
|
||||||
"`" +
|
"`" +
|
||||||
curr
|
curr
|
||||||
.map(x => gun.aments[x].name)
|
.map(x => attachmentsData[x].name)
|
||||||
.reduce((out, x, i) =>
|
.reduce((out, x, i) =>
|
||||||
[out, x].join(i === curr.length - 1 ? "` or `" : "`, `")
|
[out, x].join(i === curr.length - 1 ? "` or `" : "`, `"),
|
||||||
) +
|
) +
|
||||||
'` by `"' +
|
'` by `"' +
|
||||||
inputAttachmentsNames[i] +
|
inputAttachmentsNames[i] +
|
||||||
'"`'
|
'"`',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// push the attachment to the output list
|
outAttachments.push(attachmentsData[probables[probables.length - 1][0]]);
|
||||||
outAttachments.push(gun.aments[probables[probables.length - 1][0]]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const outAttachmentsTypes = outAttachments.map(x => x.type - 1),
|
const outAttachmentsTypes = outAttachments.map(x => x.type - 1),
|
||||||
t1 = outAttachments
|
t1 = outAttachments
|
||||||
.map(x => x.effects[35])
|
.map(x => x.effects[35])
|
||||||
|
@ -371,7 +330,7 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
.toString()
|
.toString()
|
||||||
.split("")
|
.split("")
|
||||||
.map((x, i) =>
|
.map((x, i) =>
|
||||||
parseInt(x) !== 0 && outAttachmentsTypes.includes(i) ? parseInt(i) : -1
|
parseInt(x) !== 0 && outAttachmentsTypes.includes(i) ? parseInt(i) : -1,
|
||||||
)
|
)
|
||||||
.filter(x => x !== -1);
|
.filter(x => x !== -1);
|
||||||
|
|
||||||
|
@ -380,21 +339,25 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
t1
|
t1
|
||||||
.map(x => data.attachmentTypes[x])
|
.map(x => data.attachmentTypes[x])
|
||||||
.reduce((out, x, i, a) =>
|
.reduce((out, x, i, a) =>
|
||||||
[out, x].join(i === a.length - 1 ? "` or `" : "`, `")
|
[out, x].join(i === a.length - 1 ? "` or `" : "`, `"),
|
||||||
) +
|
) +
|
||||||
"` with " +
|
"` with " +
|
||||||
outAttachments
|
outAttachments
|
||||||
.filter(x => x.effects[35])
|
.filter(x => x.effects[35])
|
||||||
.map(x => x.name)
|
.map(x => x.name)
|
||||||
.reduce((out, x, i, a) =>
|
.reduce((out, x, i, a) =>
|
||||||
[out, x].join(i === a.length - 1 ? " and " : ", ")
|
[out, x].join(i === a.length - 1 ? " and " : ", "),
|
||||||
)
|
)
|
||||||
: "";
|
: "";
|
||||||
errorMsgs += errors.length ? `\nDid you mean ${errors.join(";\n")}?\n` : "";
|
errorMsgs += errors.length
|
||||||
|
? "\nDid you mean " + errors.join(";\n") + "?\n"
|
||||||
|
: "";
|
||||||
errorMsgs += unidentifined.length
|
errorMsgs += unidentifined.length
|
||||||
? `\nCouldn't identify the attachment(${
|
? "\nCouldn't identify the attachment" +
|
||||||
unidentifined.length === 1 ? "" : "s"
|
(unidentifined.length === 1 ? "" : "s") +
|
||||||
}): \`"${unidentifined.join('"`, `"')}"\`\n`
|
': `"' +
|
||||||
|
unidentifined.join('"`, `"') +
|
||||||
|
'"`\n'
|
||||||
: "";
|
: "";
|
||||||
errorMsgs +=
|
errorMsgs +=
|
||||||
outAttachments.length > 5 ? "\nCan't equip more than 5 attachments!\n" : "";
|
outAttachments.length > 5 ? "\nCan't equip more than 5 attachments!\n" : "";
|
||||||
|
@ -411,7 +374,7 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
(tooSmall.length === 1 ? "" : "s") +
|
(tooSmall.length === 1 ? "" : "s") +
|
||||||
': `"' +
|
': `"' +
|
||||||
tooSmall.reduce((out, x, i) =>
|
tooSmall.reduce((out, x, i) =>
|
||||||
[out, x].join(i === curr.length - 1 ? '"` and `"' : '"`, `"')
|
[out, x].join(i === curr.length - 1 ? '"` and `"' : '"`, `"'),
|
||||||
) +
|
) +
|
||||||
'"` ' +
|
'"` ' +
|
||||||
(tooSmall.length === 1 ? "is" : "are") +
|
(tooSmall.length === 1 ? "is" : "are") +
|
||||||
|
@ -420,11 +383,10 @@ function attachmentsIdentifier(inpmsg, gun) {
|
||||||
return errorMsgs ? errorMsgs.trim() : outAttachments;
|
return errorMsgs ? errorMsgs.trim() : outAttachments;
|
||||||
}
|
}
|
||||||
// console.log(attachmentsIdentifier("chopper with heavy handle, red sight, granulated", data.cguns[38].aments)); makeError();
|
// console.log(attachmentsIdentifier("chopper with heavy handle, red sight, granulated", data.cguns[38].aments)); makeError();
|
||||||
// console.log(attachmentsIdentifier("ak + 5mw lazer", data.cguns[0].aments)); makeError();
|
// console.log(attachmentsIdentifier("ak + 5mw lazer", data.cguns[0].aments)); //makeError();
|
||||||
// console.log(attachmentsIdentifier("117 + 40 round mag", data.cguns[0].aments, data.cguns[0].stats)); makeError();
|
// console.log(attachmentsIdentifier("117 + 40 round mag", data.cguns[0].aments, data.cguns[0].stats)); makeError();
|
||||||
// console.log(attachmentsIdentifier("117 + rtc muzzle brake, rubberized griptape, tac lazer sight, 40 round mag, no stock", data.cguns[1].aments)); makeError();
|
// console.log(attachmentsIdentifier("117 + rtc muzzle brake, rubberized griptape, tac lazer sight, 40 round mag, no stock", data.cguns[1].aments)); makeError();
|
||||||
// console.log(attachmentsIdentifier("47 + stipplied grip tape", data.cguns[0]));
|
|
||||||
// makeError();
|
|
||||||
function damageHandler(
|
function damageHandler(
|
||||||
currDmgs,
|
currDmgs,
|
||||||
currRngs,
|
currRngs,
|
||||||
|
@ -433,7 +395,7 @@ function damageHandler(
|
||||||
tbs,
|
tbs,
|
||||||
tbb,
|
tbb,
|
||||||
bib,
|
bib,
|
||||||
pellets
|
pellets,
|
||||||
) {
|
) {
|
||||||
currDmgs = [...currDmgs];
|
currDmgs = [...currDmgs];
|
||||||
currRngs = [...currRngs];
|
currRngs = [...currRngs];
|
||||||
|
@ -458,15 +420,23 @@ function damageHandler(
|
||||||
}
|
}
|
||||||
function stk(dmg) {
|
function stk(dmg) {
|
||||||
let out;
|
let out;
|
||||||
if (!pellets) out = Math.ceil(hp / dmg);
|
if (!pellets) {
|
||||||
else out = Math.ceil(hp / (dmg * pellets));
|
out = Math.ceil(hp / dmg);
|
||||||
return out == Infinity ? "∞" : out;
|
}
|
||||||
|
else {
|
||||||
|
out = Math.ceil(hp / (dmg * pellets));
|
||||||
|
}
|
||||||
|
out = out == Infinity ? "∞" : out;
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
function ttk(dmg) {
|
function ttk(dmg) {
|
||||||
const stkVal = stk(dmg);
|
const stkVal = stk(dmg);
|
||||||
if (stkVal == "∞") return stkVal;
|
if (stkVal == "∞") {
|
||||||
if (!bib) return Math.round((stkVal - 1) * tbs);
|
return stkVal;
|
||||||
|
}
|
||||||
|
if (!bib) {
|
||||||
|
return Math.round((stkVal - 1) * tbs);
|
||||||
|
}
|
||||||
let out = 0;
|
let out = 0;
|
||||||
if (dmg > 0) {
|
if (dmg > 0) {
|
||||||
if (stkVal % bib == 0) {
|
if (stkVal % bib == 0) {
|
||||||
|
@ -474,7 +444,8 @@ function damageHandler(
|
||||||
out += tbs * (bib - 1) + tbb;
|
out += tbs * (bib - 1) + tbb;
|
||||||
}
|
}
|
||||||
out = out + tbs * (bib - 1);
|
out = out + tbs * (bib - 1);
|
||||||
} else if (stkVal % bib != 0) {
|
}
|
||||||
|
else if (stkVal % bib != 0) {
|
||||||
for (var i = 0; i <= Math.floor(stkVal / bib) - 1; i++) {
|
for (var i = 0; i <= Math.floor(stkVal / bib) - 1; i++) {
|
||||||
out += tbs * (bib - 1) + tbb;
|
out += tbs * (bib - 1) + tbb;
|
||||||
}
|
}
|
||||||
|
@ -486,7 +457,8 @@ function damageHandler(
|
||||||
if (out == Infinity) {
|
if (out == Infinity) {
|
||||||
return "∞";
|
return "∞";
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
out = "No";
|
out = "No";
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
|
@ -517,13 +489,15 @@ function recoilHandler(
|
||||||
yRecoil,
|
yRecoil,
|
||||||
xMultiplier,
|
xMultiplier,
|
||||||
yMultiplier,
|
yMultiplier,
|
||||||
bulletCount
|
bulletCount,
|
||||||
) {
|
) {
|
||||||
if (xRecoil.length != yRecoil.length) return "err";
|
if (xRecoil.length != yRecoil.length) {
|
||||||
|
return "err";
|
||||||
|
}
|
||||||
const recoilLength = xRecoil.length;
|
const recoilLength = xRecoil.length;
|
||||||
if (recoilLength == 0) return "none";
|
if (recoilLength == 0) {
|
||||||
|
return "none";
|
||||||
|
}
|
||||||
const recoilPattern = [
|
const recoilPattern = [
|
||||||
{
|
{
|
||||||
x: 0,
|
x: 0,
|
||||||
|
@ -541,7 +515,8 @@ function recoilHandler(
|
||||||
x: xRecoil[i] * (1 + xMultiplier / 100),
|
x: xRecoil[i] * (1 + xMultiplier / 100),
|
||||||
y: yRecoil[i] * (1 + yMultiplier / 100),
|
y: yRecoil[i] * (1 + yMultiplier / 100),
|
||||||
};
|
};
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
recoilObj = {
|
recoilObj = {
|
||||||
x:
|
x:
|
||||||
(recoilPattern[recoilPattern.length - 1].x + xContinuationVal) *
|
(recoilPattern[recoilPattern.length - 1].x + xContinuationVal) *
|
||||||
|
@ -652,14 +627,15 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
currEffects[0] +
|
currEffects[0] +
|
||||||
"% zoom (+" +
|
"% zoom (+" +
|
||||||
(currEffects[0] - currStats[16]) +
|
(currEffects[0] - currStats[16]) +
|
||||||
"% zoom)"
|
"% zoom)",
|
||||||
);
|
);
|
||||||
} else if (currEffects[0] != 0 && currEffects[0] != currStats[16]) {
|
}
|
||||||
|
else if (currEffects[0] != 0 && currEffects[0] != currStats[16]) {
|
||||||
neg.push(
|
neg.push(
|
||||||
currEffects[0] +
|
currEffects[0] +
|
||||||
"% zoom (-" +
|
"% zoom (-" +
|
||||||
(currStats[16] - currEffects[0]) +
|
(currStats[16] - currEffects[0]) +
|
||||||
"% zoom)"
|
"% zoom)",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (currEffects[0] != 0 && currStats[16] <= 110) {
|
if (currEffects[0] != 0 && currStats[16] <= 110) {
|
||||||
|
@ -686,11 +662,12 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
negGood1(19, "Idle Sway");
|
negGood1(19, "Idle Sway");
|
||||||
if (currEffects[20] > currStats[3]) {
|
if (currEffects[20] > currStats[3]) {
|
||||||
pos.push(
|
pos.push(
|
||||||
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage"
|
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage",
|
||||||
);
|
);
|
||||||
} else if (currEffects[20] != 0 && currEffects[20] != currStats[3]) {
|
}
|
||||||
|
else if (currEffects[20] != 0 && currEffects[20] != currStats[3]) {
|
||||||
neg.push(
|
neg.push(
|
||||||
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage"
|
currEffects[20].ToString().Replace(".", " ~ ") + " Explosion Damage",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
atrPush3(21, "Visible Laser when not ADS-ed");
|
atrPush3(21, "Visible Laser when not ADS-ed");
|
||||||
|
@ -713,7 +690,7 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
.toString()
|
.toString()
|
||||||
.split("")
|
.split("")
|
||||||
.map((x, i) => (parseInt(x) !== 0 ? data.attachmentTypes[i] : 0))
|
.map((x, i) => (parseInt(x) !== 0 ? data.attachmentTypes[i] : 0))
|
||||||
.filter(x => x)
|
.filter(x => x),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
atrPush3(36, "Can't ADS");
|
atrPush3(36, "Can't ADS");
|
||||||
|
@ -722,7 +699,8 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
}
|
}
|
||||||
if (currEffects[38] != 0 && currEffects[38] < currStats[4]) {
|
if (currEffects[38] != 0 && currEffects[38] < currStats[4]) {
|
||||||
pos.push("Turns to " + data.firingModes[currEffects[38] - 1]);
|
pos.push("Turns to " + data.firingModes[currEffects[38] - 1]);
|
||||||
} else if (currEffects[38] != 0 && currEffects[38] != currStats[4]) {
|
}
|
||||||
|
else if (currEffects[38] != 0 && currEffects[38] != currStats[4]) {
|
||||||
neg.push("Turns to " + data.firingModes[currEffects[38] - 1]);
|
neg.push("Turns to " + data.firingModes[currEffects[38] - 1]);
|
||||||
}
|
}
|
||||||
posGood2(39, "Tick Damage");
|
posGood2(39, "Tick Damage");
|
||||||
|
@ -732,15 +710,17 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
posGood1(43, "Bullet Speed");
|
posGood1(43, "Bullet Speed");
|
||||||
if (currEffects[44] == 1) {
|
if (currEffects[44] == 1) {
|
||||||
atr.push("Higher Penetraion Damage");
|
atr.push("Higher Penetraion Damage");
|
||||||
} else if (currEffects[44] == -1) {
|
}
|
||||||
|
else if (currEffects[44] == -1) {
|
||||||
atr.push("Lower Penetraion Damage");
|
atr.push("Lower Penetraion Damage");
|
||||||
}
|
}
|
||||||
posGood2(45, `Round ${currEffects[45] - 1 ? "s" : ""} in Reserve`);
|
posGood2(45, "Round" + (currEffects[45] - 1 ? "s" : "") + " in Reserve");
|
||||||
|
|
||||||
function posGood1(i, ext) {
|
function posGood1(i, ext) {
|
||||||
if (currEffects[i].IsPositive()) {
|
if (currEffects[i].IsPositive()) {
|
||||||
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
||||||
} else if (currEffects[i].IsNegative()) {
|
}
|
||||||
|
else if (currEffects[i].IsNegative()) {
|
||||||
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -748,7 +728,8 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
function negGood1(i, ext) {
|
function negGood1(i, ext) {
|
||||||
if (currEffects[i].IsNegative()) {
|
if (currEffects[i].IsNegative()) {
|
||||||
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
pos.push(currEffects[i].PlusHL() + "% " + ext);
|
||||||
} else if (currEffects[i].IsPositive()) {
|
}
|
||||||
|
else if (currEffects[i].IsPositive()) {
|
||||||
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
neg.push(currEffects[i].PlusHL() + "% " + ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -756,7 +737,8 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
function posGood2(i, ext) {
|
function posGood2(i, ext) {
|
||||||
if (currEffects[i].IsPositive()) {
|
if (currEffects[i].IsPositive()) {
|
||||||
pos.push(currEffects[i].PlusHL() + " " + ext);
|
pos.push(currEffects[i].PlusHL() + " " + ext);
|
||||||
} else if (currEffects[i].IsNegative()) {
|
}
|
||||||
|
else if (currEffects[i].IsNegative()) {
|
||||||
neg.push(currEffects[i].PlusHL() + " " + ext);
|
neg.push(currEffects[i].PlusHL() + " " + ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -764,7 +746,8 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
function negGood2(i, ext) {
|
function negGood2(i, ext) {
|
||||||
if (currEffects[i].IsNegative()) {
|
if (currEffects[i].IsNegative()) {
|
||||||
pos.push(currEffects[i].PlusHL() + " " + ext);
|
pos.push(currEffects[i].PlusHL() + " " + ext);
|
||||||
} else if (currEffects[i].IsPositive()) {
|
}
|
||||||
|
else if (currEffects[i].IsPositive()) {
|
||||||
neg.push(currEffects[i].PlusHL() + " " + ext);
|
neg.push(currEffects[i].PlusHL() + " " + ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -774,26 +757,26 @@ function attachmentHandler(currEffects, currStats) {
|
||||||
atr.push(ext);
|
atr.push(ext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Return the attributes when there is and use algorithms to join them
|
|
||||||
return [
|
return [
|
||||||
pos.length
|
pos.length
|
||||||
? {
|
? {
|
||||||
name: "**Positives:**",
|
name: "**Positives:**",
|
||||||
value: `\`\`\`ini\n[${pos.join("]\n[")}]\n\`\`\``,
|
value: "```ini\n[" + pos.join("]\n[") + "]\n```",
|
||||||
inline: true,
|
inline: true,
|
||||||
}
|
}
|
||||||
: 0,
|
: 0,
|
||||||
neg.length
|
neg.length
|
||||||
? {
|
? {
|
||||||
name: "**Negatives:**",
|
name: "**Negatives:**",
|
||||||
value: `\`\`\`css\n[${neg.join("]\n[")}]\n\`\`\``,
|
value: "```css\n[" + neg.join("]\n[") + "]\n```",
|
||||||
inline: true,
|
inline: true,
|
||||||
}
|
}
|
||||||
: 0,
|
: 0,
|
||||||
atr.length
|
atr.length
|
||||||
? {
|
? {
|
||||||
name: "**Attributes:**",
|
name: "**Attributes:**",
|
||||||
value: `\`\`\`fix\n[${atr.join("]\n[")}]\n\`\`\``,
|
value: "```fix\n[" + atr.join("]\n[") + "]\n```",
|
||||||
}
|
}
|
||||||
: 0,
|
: 0,
|
||||||
].filter(x => x);
|
].filter(x => x);
|
||||||
|
@ -816,7 +799,8 @@ function totaler(inpAttachments) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeError() {
|
function makeError() {
|
||||||
undefined.split("L");
|
let m;
|
||||||
|
m.split("L");
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
|
@ -408,7 +408,7 @@ function tips(interaction, client) {
|
||||||
const all = [
|
const all = [
|
||||||
"You can report bugs by using `/report` and send a suggestion by `/suggest` !",
|
"You can report bugs by using `/report` and send a suggestion by `/suggest` !",
|
||||||
"If a gun isn't there, please be paitent and wait for the us to get the stats",
|
"If a gun isn't there, please be paitent and wait for the us to get the stats",
|
||||||
"We all recruiting for Javascript bot developers (Total: 4) Please DM the bot for more info",
|
"We all recruiting for bot developers (Total: 4) Please DM the bot for more info",
|
||||||
];
|
];
|
||||||
const ran = Math.floor(Math.random() * 50) + 2;
|
const ran = Math.floor(Math.random() * 50) + 2;
|
||||||
const rTip = all[Math.floor(Math.random() * all.length)];
|
const rTip = all[Math.floor(Math.random() * all.length)];
|
||||||
|
@ -503,7 +503,6 @@ const leven = (te, t) => {
|
||||||
function chunk(arr, size) {
|
function chunk(arr, size) {
|
||||||
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) => {
|
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) => {
|
||||||
arr.slice(i * size, i * size + size);
|
arr.slice(i * size, i * size + size);
|
||||||
return arr;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function progressBar(value, maxValue, size) {
|
function progressBar(value, maxValue, size) {
|
||||||
|
|
Loading…
Reference in a new issue