commit a216a4044d2a10ccbd3681eb37f2a2a264739469
parent 75cd7580d263da20b1f13985d401d2355b03988b
Author: night0721 <[email protected]>
Date: Fri, 19 Nov 2021 02:09:53 +0800
added missing files
Diffstat:
M | .github/changelog.md | | | 32 | +++++++------------------------- |
A | draw.js | | | 82 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | stats2.js | | | 306 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
3 files changed, 395 insertions(+), 25 deletions(-)
diff --git a/.github/changelog.md b/.github/changelog.md
@@ -1,37 +1,28 @@
<h1 align="center">Changelog</h1>
# Release v3.3.0 Name Change
+We have changed the name of our bot from **Cath.exe** to **NYX**. We have not yet decided on changing the backend names that includes the api & package.
-We have changed the name of our bot from **Cath.exe** to **NYX**. We have not yet decided on changing the backend names that includes the api & package.
-
-## Added
-
+## Added
- Added guns to be bought using internal currency.
- Added more items in the shops.
- Updated names of contributers in the bot info.
## Changes / Modification
-
- Change the footers of embed as we transition from using the Statistics provided by **Project Lighthouse v2** into using Statistics provided by **Round table**.
# Release v3.2.6
-
## Added
-
- Tips
- Topics
-
## Fixes
-
- Added Bot avatar in the footer
- Added timestamps in embeds
-# Release v3.2.0
+# Release v3.2.0
In this version we made the starboard to be globalized, means that you can configure the settings for the starboard per server.
-
## Added
-
- drop
- announce
- emojiadd
@@ -40,15 +31,12 @@ snipe&editsnipe fix
To stay up-to-date with our progress, check out our discord server & the Trello page.
# Release v3.0.0
-
In this version we implement Discord.js v13, which introduces slash commands.
we have not implemented all of the commands yet, the moderation commands especially.
To stay up-to-date with our progress, check out our discord server & the Trello page.
# Release v2.1.0
-
New & Improved API for client and commands.
-
## Added
- Superscript
@@ -64,30 +52,24 @@ New & Improved API for client and commands.
- Improved economy system
# Release v2.0.1
-
No Description
## Added
-
- Docs
- Suggest
- Dependencies
## Modified/Updates
-
-- Moderation Commands
- - Ban
- - Pin
+- Moderation Commands
+ - Ban
+ - Pin
- Dependencies
## Removed
-
- All the Server specific refrences
# Release v2.0-BETA
-
-Initial Commit
+ Initial Commit
# Release v1.0.0
-
The bot was not open source & only Night worked on it.
diff --git a/draw.js b/draw.js
@@ -0,0 +1,82 @@
+const { MessageEmbed, MessageActionRow, MessageButton } = require("discord.js");
+const draws = require("./util/Data/draws.json");
+module.exports = {
+ name: "draw",
+ description: "Buy a lucky draw",
+ run: async (client, message, args, utils) => {
+ const embed = new MessageEmbed()
+ .setTitle("**__Daily Lucky Draw__**")
+ .setColor(client.color)
+ .setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
+ .setTimestamp()
+ .setDescription(
+ "Welcome to the Lucky Draw,\nclick `Spin`, so that the draw spins and hits a random item.\nClick `Info` to find out how high the probability is\n that a particular item will be unlocked"
+ )
+ .addFields(
+ draws[0].map(c => {
+ return { name: c.name, value: c.emoji, inline: true };
+ })
+ );
+
+ const button1 = new MessageButton()
+ .setStyle("SUCCESS")
+ .setEmoji("🔄")
+ .setLabel("Spin")
+ .setCustomId("spin");
+ const button2 = new MessageButton()
+ .setStyle("PRIMARY")
+ .setEmoji("894962394932064346")
+ .setLabel("Info")
+ .setCustomId("spininfo");
+
+ const row = new MessageActionRow().addComponents([button1, button2]);
+ const msg = await message.channel.send({
+ embeds: [embed],
+ components: [row],
+ });
+ const filter = i =>
+ ["spin", "spininfo"].includes(i.customId) &&
+ i.user.id === message.author.id;
+ const collector = msg.createMessageComponentCollector({
+ filter,
+ time: 999999,
+ });
+ function select() {
+ let pick = Math.floor(Math.random() * 100);
+ for (const g in draws[0]) {
+ pick -= draws[0][g].percent;
+ if (pick <= 0) {
+ return `You got **${draws[0][g].name}** with propability **${draws[0][g].percent}%**`;
+ }
+ }
+ }
+ console.log(utils.colorize("test").magenta);
+ collector.on("collect", i => {
+ if (i.customId === "spin") {
+ i.reply({
+ content: select(),
+ });
+ }
+ if (i.customId === "spininfo") {
+ i.reply({
+ embeds: [
+ new MessageEmbed()
+ .setTitle("**__Information Table__**")
+ .addFields(
+ draws[0].map(c => {
+ return {
+ name: `**${c.name}**`,
+ value: `Percentage: ${c.percent}%`,
+ inline: true,
+ };
+ })
+ )
+ .addField("Name:", "**Item 1**")
+ .addField("Percent:", "**69**")
+ .addField("Emoji:", ":bughuntergold:"),
+ ],
+ });
+ }
+ });
+ },
+};
diff --git a/stats2.js b/stats2.js
@@ -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
+// },
+// };
+// }