v3.4.0 latest update with all slash cmds support
This commit is contained in:
parent
ea494d7fae
commit
8927aae39d
290 changed files with 21293 additions and 7701 deletions
1
.dockerignore
Normal file
1
.dockerignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
node_modules/
|
|
@ -1,12 +1,10 @@
|
||||||
TOKEN =
|
TOKEN =
|
||||||
MONGO = mongodb://127.0.0.1:27017/test
|
MONGO = mongodb://127.0.0.1:27017/test
|
||||||
mongo =
|
mongo =
|
||||||
testmongo =
|
|
||||||
cathmongo =
|
cathmongo =
|
||||||
CLIENT_SECRET =
|
|
||||||
CLIENT_ID =
|
|
||||||
SPOTIFY_ID =
|
SPOTIFY_ID =
|
||||||
SPOTIFY_SECRET =
|
SPOTIFY_SECRET =
|
||||||
host = lavalink.darrennathanael.com
|
host = lavalink.darrennathanael.com
|
||||||
port = 2095
|
port = 2095
|
||||||
password = whatwasthelastingyousaid
|
password = whatwasthelastingyousaid
|
||||||
|
api = http://api.cath.gq
|
15
.eslintrc.js
15
.eslintrc.js
|
@ -1,15 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
env: {
|
|
||||||
es6: true,
|
|
||||||
node: true,
|
|
||||||
},
|
|
||||||
extends: "eslint:recommended",
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 2020,
|
|
||||||
sourceType: "module",
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
indent: ["error", 2],
|
|
||||||
semi: ["error", "always"],
|
|
||||||
},
|
|
||||||
};
|
|
56
.github/README.md
vendored
56
.github/README.md
vendored
|
@ -1,17 +1,17 @@
|
||||||
<h1 align="center"> CATH.EXE </h1>
|
<h1 align="center"> NYX </h1>
|
||||||
|
<!-- header -->
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src = "https://media.discordapp.net/attachments/842014909264953354/867806346593042483/Cath-temp-banner.png?width=1244&height=415">
|
<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>
|
||||||
<br>
|
<br>
|
||||||
<a href="https://discord.com/oauth2/authorize?client_id=800966959268364288&permissions=4231314550&scope=bot%20applications.commands" target="_blank"><img alt='Invite' src="https://img.shields.io/badge/-Invite-5865f2?logo=discord&logoColor=white&style=for-the-badge"></a>
|
<a href="https://discord.com/oauth2/authorize?client_id=800966959268364288&permissions=4231314550&scope=bot%20applications.commands" target="_blank"><img alt='Invite' src="https://img.shields.io/badge/-Invite-5865f2?logo=discord&logoColor=white&style=for-the-badge"></a>
|
||||||
<a href="https://github.com/night0721/cath.exe/blob/main/LICENSE" target="_blank"><img alt='LICENSE' src="https://img.shields.io/static/v1?label=LICENSE&message=Apache%202.0&color=5865F2&style=for-the-badge&scale=1.4"></a>
|
<a href= "https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank"><img alt='Licence CC BY-NC-SA 4.0' src ="https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-nc-sa.svg" width="82">
|
||||||
<a href="https://trello.com/b/dIgR0QNm" target="_blank"><img alt='Trello' src="https://img.shields.io/badge/Trello-5865F2?style=for-the-badge&logo=trello&logoColor=white"></a>
|
<a href="https://trello.com/b/dIgR0QNm" target="_blank"><img alt='Trello' src="https://img.shields.io/badge/Trello-5865F2?style=for-the-badge&logo=trello&logoColor=white"></a>
|
||||||
|
<a href="https://github.com/night0721/cath"><img alt = 'NPM Package' src="https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white">
|
||||||
<a href="https://thunder75.gitbook.io/cath-bot" target="_blank"><img src="https://img.shields.io/static/v1?label=Docs&message=available&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://thunder75.gitbook.io/cath-bot" target="_blank"><img src="https://img.shields.io/static/v1?label=Docs&message=available&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
<a href="https://ko-fi.com/I2I35XISJ" target="_blank"><img alt='Kofi' src="https://img.shields.io/static/v1?label=Support%20Us&message=KO.FI&color=ff5e5b&logo=kofi&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://ko-fi.com/I2I35XISJ" target="_blank"><img alt='Kofi' src="https://img.shields.io/static/v1?label=Support%20Us&message=KO.FI&color=ff5e5b&logo=kofi&logoColor=white&style=for-the-badge&scale=1.4"></a> <br>
|
||||||
<a href="https://cath.statuspage.io/"target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=Cath.exe&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://nyx-bot.statuspage.io/"target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=NYX&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
<a href="https://cath.statuspage.io/" target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=Cath%202&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://nyx-bot.statuspage.io/" target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=NYX%202&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
<a href="https://cath.statuspage.io/" target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=API&message=Under%20Devlopment&color=FF5E5B&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://nyx-bot.statuspage.io/" target="_blank"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=API&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align = "center">
|
<p align = "center">
|
||||||
|
@ -21,31 +21,44 @@
|
||||||
|
|
||||||
<!-- description -->
|
<!-- description -->
|
||||||
|
|
||||||
**Cath.exe** is a Multipurpose Discord Bot with many features that include but are not limited to Moderation, Music and Economy. The Call of Duty Stats are courtesy of **Project Lighthouse** by [**Path.exe**](https://www.youtube.com/channel/UC0hvUWYhyx_DOEBzLWEJxsw).<br><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 **Round Table** by Cygnoux Familia.<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
|
||||||
|
<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).*
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
🚨 **Moderation** - Classic commands like kick, ban, warn, role and many more.. <br>
|
🚨 **Moderation** - Classic commands like kick, ban, warn, role and many more. <br>
|
||||||
📈 **Economy** - A Robust economy system, inspired by **pepe bot.** <br>
|
📈 **Economy** - A Robust economy system, inspired by **pepe bot** <br>
|
||||||
✨ **Fun Commands** - A massive collection of fun commands `(35+ commands)` <br>
|
✨ **Fun Commands** - A massive collection of fun commands `(35+ commands)` <br>
|
||||||
🎵 **Music** - Classic Music Commands that can play from various sources. <br>
|
🎵 **Music** - Classic Music Commands that can play from various sources. <br>
|
||||||
🛠 **Utility** - A wide range of useful commands `(Around 20)` <br>
|
🛠 **Utility** - A wide range of useful commands `(Around 20)` <br>
|
||||||
🕹 **Games** - Many fun games to spend your time ...
|
🕹 **Games** - Many fun games to spend your time <br>
|
||||||
> To access the full list of commands, check out our [Documentation](https://thunder75.gitbook.io/cath-bot/core/commands).
|
🎮 **Call of Duty** - Check the list of Call of Duty Mobile Commands
|
||||||
|
|
||||||
🎮 **Call of Duty** - Check Call od Duty Mobile Stats exclusivly using our bot
|
## <img height="18px" src="../util/assets/images/cod_logo.svg"> **Call of Duty Mobile**
|
||||||
> ⚠ Only avaliable on the Live instance for now.
|
|
||||||
|
- **Weapon Statistics** courtesy of **Round Table** by Cygnoux Familia.
|
||||||
|
- **Currated Gunsmith Builds** by various content creators like Jokesta, dHitman, Path.exe and more comming soon.
|
||||||
|
- **Perks** detailed info about the perks.
|
||||||
|
- **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.
|
||||||
|
|
||||||
## 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)
|
||||||
[![CodeFactor](https://www.codefactor.io/repository/github/night0721/cath/badge?s=ffdc3c246a8b91a3d7064d128a1b81b9dbeca61f&style=for-the-badge)]((https://www.codefactor.io/repository/github/night0721/cath))
|
[![CodeFactor](https://www.codefactor.io/repository/github/night0721/cath.js/badge?s=57e6f566f73892f4303edbfeb2fe3ea0b849c876&style=for-the-badge)](https://www.codefactor.io/repository/github/night0721/cath.js)
|
||||||
<a href="https://thunder75.gitbook.io/cath-bot/deployment" target="_blank"><img src="https://img.shields.io/static/v1?label=Deployment&message=Guide&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
<a href="https://thunder75.gitbook.io/cath-bot/deployment" target="_blank"><img src="https://img.shields.io/static/v1?label=Deployment&message=Guide&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
||||||
|
|
||||||
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>
|
||||||
|
|
||||||
|
@ -80,15 +93,13 @@ A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cat
|
||||||
|
|
||||||
## <img src = "https://cdn.discordapp.com/emojis/867093614403256350.png?v=1" width = 18> Support & Feature Request
|
## <img src = "https://cdn.discordapp.com/emojis/867093614403256350.png?v=1" width = 18> Support & Feature Request
|
||||||
|
|
||||||
Join the official [Support Server](https://discord.gg/SbQHChmGcp) on Discord & we will be happy to assist you. <br>
|
Join the official [Support Server](https://rebrand.ly/cathSupport) on Discord & we will be happy to assist you. <br>
|
||||||
To Request new features contact us on Discord using the support server.
|
To Request new features contact us on Discord using the support server.
|
||||||
|
|
||||||
## <img src = "https://cdn.discordapp.com/emojis/867093601962950666.png?v=1" width = "18"> Report Bugs
|
## <img src = "https://cdn.discordapp.com/emojis/867093601962950666.png?v=1" width = "18"> Report Bugs
|
||||||
|
|
||||||
You can report bugs or issues by opening a issue in this repository. Alternatevely you can also contact us on Discord using the support server.
|
You can report bugs or issues by opening a issue in this repository. Alternatevely you can also contact us on Discord using the support server.
|
||||||
|
|
||||||
<!-- [![Support Server](https://img.shields.io/discord/718762019586572341?label=Support%20Server&logo=Discord&colorB=5865F2&style=for-the-badge&logoColor=white) ](https://discord.gg/SR7TeNJG67) -->
|
|
||||||
|
|
||||||
<p align = "center">
|
<p align = "center">
|
||||||
<a href="https://rebrand.ly/cathSupport" target="_blank"><img src="https://discordapp.com/api/guilds/718762019586572341/widget.png?style=banner1"></a>
|
<a href="https://rebrand.ly/cathSupport" target="_blank"><img src="https://discordapp.com/api/guilds/718762019586572341/widget.png?style=banner1"></a>
|
||||||
</p>
|
</p>
|
||||||
|
@ -99,5 +110,10 @@ Contributions are always welcomed, but make sure to read [Contributing.md](/CONT
|
||||||
|
|
||||||
![Contributors](https://badges.pufler.dev/contributors/night0721/cath.exe?bots=false)
|
![Contributors](https://badges.pufler.dev/contributors/night0721/cath.exe?bots=false)
|
||||||
|
|
||||||
|
<!-- ## Special Thanks to The Roound Table from Cygnoux Familia.
|
||||||
|
|
||||||
|
<p align = "center">
|
||||||
|
<a href="https://discord.gg/mjVwkCsWY7" target="_blank"><img src="https://discordapp.com/api/guilds/756525751594909797/widget.png?style=banner1"></a>
|
||||||
|
</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"> -->
|
||||||
|
|
30
.github/changelog.md
vendored
30
.github/changelog.md
vendored
|
@ -1,5 +1,35 @@
|
||||||
<h1 align="center">Changelog</h1>
|
<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.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
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
|
||||||
|
|
||||||
|
snipe&editsnipe fix
|
||||||
|
To stay up-to-date with our progress, check out our discord server & the Trello page.
|
||||||
|
|
||||||
# Release v3.0.0
|
# Release v3.0.0
|
||||||
In this version we implement Discord.js v13, which introduces slash commands.
|
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.
|
we have not implemented all of the commands yet, the moderation commands especially.
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
.env
|
.env
|
||||||
|
.prettierignore
|
||||||
.vscode
|
.vscode
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"esversion": 10
|
|
||||||
}
|
|
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);
|
23
Dockerfile
Normal file
23
Dockerfile
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
FROM node:alpine
|
||||||
|
|
||||||
|
# Create app directory
|
||||||
|
WORKDIR /usr/bot/nyx
|
||||||
|
|
||||||
|
# Copy package.json and package-lock.json
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
# Install packages
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Copy the app code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Build the project
|
||||||
|
RUN npm run all
|
||||||
|
|
||||||
|
# Expose ports
|
||||||
|
# EXPOSE 8080
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
CMD [ "node", "index.js" ]
|
||||||
|
# not sure what to run index.js or bot.js
|
574
LICENSE
574
LICENSE
|
@ -1,201 +1,437 @@
|
||||||
Apache License
|
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
=======================================================================
|
||||||
|
|
||||||
1. Definitions.
|
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||||
|
does not provide legal services or legal advice. Distribution of
|
||||||
|
Creative Commons public licenses does not create a lawyer-client or
|
||||||
|
other relationship. Creative Commons makes its licenses and related
|
||||||
|
information available on an "as-is" basis. Creative Commons gives no
|
||||||
|
warranties regarding its licenses, any material licensed under their
|
||||||
|
terms and conditions, or any related information. Creative Commons
|
||||||
|
disclaims all liability for damages resulting from their use to the
|
||||||
|
fullest extent possible.
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
Using Creative Commons Public Licenses
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
Creative Commons public licenses provide a standard set of terms and
|
||||||
the copyright owner that is granting the License.
|
conditions that creators and other rights holders may use to share
|
||||||
|
original works of authorship and other material subject to copyright
|
||||||
|
and certain other rights specified in the public license below. The
|
||||||
|
following considerations are for informational purposes only, are not
|
||||||
|
exhaustive, and do not form part of our licenses.
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
Considerations for licensors: Our public licenses are
|
||||||
other entities that control, are controlled by, or are under common
|
intended for use by those authorized to give the public
|
||||||
control with that entity. For the purposes of this definition,
|
permission to use material in ways otherwise restricted by
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
copyright and certain other rights. Our licenses are
|
||||||
direction or management of such entity, whether by contract or
|
irrevocable. Licensors should read and understand the terms
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
and conditions of the license they choose before applying it.
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
Licensors should also secure all rights necessary before
|
||||||
|
applying our licenses so that the public can reuse the
|
||||||
|
material as expected. Licensors should clearly mark any
|
||||||
|
material not subject to the license. This includes other CC-
|
||||||
|
licensed material, or material used under an exception or
|
||||||
|
limitation to copyright. More considerations for licensors:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensors
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
Considerations for the public: By using one of our public
|
||||||
exercising permissions granted by this License.
|
licenses, a licensor grants the public permission to use the
|
||||||
|
licensed material under specified terms and conditions. If
|
||||||
|
the licensor's permission is not necessary for any reason--for
|
||||||
|
example, because of any applicable exception or limitation to
|
||||||
|
copyright--then that use is not regulated by the license. Our
|
||||||
|
licenses grant only permissions under copyright and certain
|
||||||
|
other rights that a licensor has authority to grant. Use of
|
||||||
|
the licensed material may still be restricted for other
|
||||||
|
reasons, including because others have copyright or other
|
||||||
|
rights in the material. A licensor may make special requests,
|
||||||
|
such as asking that all changes be marked or described.
|
||||||
|
Although not required by our licenses, you are encouraged to
|
||||||
|
respect those requests where reasonable. More_considerations
|
||||||
|
for the public:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensees
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
=======================================================================
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
transformation or translation of a Source form, including but
|
Public License
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
Object form, made available under the License, as indicated by a
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
copyright notice that is included in or attached to the work
|
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||||
(an example is provided in the Appendix below).
|
("Public License"). To the extent this Public License may be
|
||||||
|
interpreted as a contract, You are granted the Licensed Rights in
|
||||||
|
consideration of Your acceptance of these terms and conditions, and the
|
||||||
|
Licensor grants You such rights in consideration of benefits the
|
||||||
|
Licensor receives from making the Licensed Material available under
|
||||||
|
these terms and conditions.
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
Section 1 -- Definitions.
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
Rights that is derived from or based upon the Licensed Material
|
||||||
subsequently incorporated within the Work.
|
and in which the Licensed Material is translated, altered,
|
||||||
|
arranged, transformed, or otherwise modified in a manner requiring
|
||||||
|
permission under the Copyright and Similar Rights held by the
|
||||||
|
Licensor. For purposes of this Public License, where the Licensed
|
||||||
|
Material is a musical work, performance, or sound recording,
|
||||||
|
Adapted Material is always produced where the Licensed Material is
|
||||||
|
synched in timed relation with a moving image.
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
accordance with the terms and conditions of this Public License.
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
c. BY-NC-SA Compatible License means a license listed at
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
creativecommons.org/compatiblelicenses, approved by Creative
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
Commons as essentially the equivalent of this Public License.
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
closely related to copyright including, without limitation,
|
||||||
modifications, and in Source or Object form, provided that You
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
meet the following conditions:
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
e. Effective Technological Measures means those measures that, in the
|
||||||
Derivative Works a copy of this License; and
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
stating that You changed the files; and
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
|
that applies to Your use of the Licensed Material.
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
g. License Elements means the license attributes listed in the name
|
||||||
that You distribute, all copyright, patent, trademark, and
|
of a Creative Commons Public License. The License Elements of this
|
||||||
attribution notices from the Source form of the Work,
|
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
h. Licensed Material means the artistic or literary work, database,
|
||||||
distribution, then any Derivative Works that You distribute must
|
or other material to which the Licensor applied this Public
|
||||||
include a readable copy of the attribution notices contained
|
License.
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
i. Licensed Rights means the rights granted to You subject to the
|
||||||
may provide additional or different license terms and conditions
|
terms and conditions of this Public License, which are limited to
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
Licensed Material and that the Licensor has authority to license.
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
under this Public License.
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
k. NonCommercial means not primarily intended for or directed towards
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
commercial advantage or monetary compensation. For purposes of
|
||||||
except as required for reasonable and customary use in describing the
|
this Public License, the exchange of the Licensed Material for
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
other material subject to Copyright and Similar Rights by digital
|
||||||
|
file-sharing or similar means is NonCommercial provided there is
|
||||||
|
no payment of monetary compensation in connection with the
|
||||||
|
exchange.
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
l. Share means to provide material to the public by any means or
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
process that requires permission under the Licensed Rights, such
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
as reproduction, public display, public performance, distribution,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
dissemination, communication, or importation, and to make material
|
||||||
implied, including, without limitation, any warranties or conditions
|
available to the public including in ways that members of the
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
public may access the material from a place and at a time
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
individually chosen by them.
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
m. Sui Generis Database Rights means rights other than copyright
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
unless required by applicable law (such as deliberate and grossly
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
as amended and/or succeeded, as well as other essentially
|
||||||
liable to You for damages, including any direct, indirect, special,
|
equivalent rights anywhere in the world.
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
n. You means the individual or entity exercising the Licensed Rights
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
under this Public License. Your has a corresponding meaning.
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
Section 2 -- Scope.
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
a. License grant.
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright 2021 Night Kaly
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
you may not use this file except in compliance with the License.
|
in part, for NonCommercial purposes only; and
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
b. produce, reproduce, and Share Adapted Material for
|
||||||
|
NonCommercial purposes only.
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
License does not apply, and You do not need to comply with
|
||||||
See the License for the specific language governing permissions and
|
its terms and conditions.
|
||||||
limitations under the License.
|
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
6(a).
|
||||||
|
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in
|
||||||
|
all media and formats whether now known or hereafter created,
|
||||||
|
and to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including
|
||||||
|
technical modifications necessary to circumvent Effective
|
||||||
|
Technological Measures. For purposes of this Public License,
|
||||||
|
simply making modifications authorized by this Section 2(a)
|
||||||
|
(4) never produces Adapted Material.
|
||||||
|
|
||||||
|
5. Downstream recipients.
|
||||||
|
|
||||||
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically
|
||||||
|
receives an offer from the Licensor to exercise the
|
||||||
|
Licensed Rights under the terms and conditions of this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
b. Additional offer from the Licensor -- Adapted Material.
|
||||||
|
Every recipient of Adapted Material from You
|
||||||
|
automatically receives an offer from the Licensor to
|
||||||
|
exercise the Licensed Rights in the Adapted Material
|
||||||
|
under the conditions of the Adapter's License You apply.
|
||||||
|
|
||||||
|
c. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
|
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section 3(a)(1)(A)(i).
|
||||||
|
|
||||||
|
b. Other rights.
|
||||||
|
|
||||||
|
1. Moral rights, such as the right of integrity, are not
|
||||||
|
licensed under this Public License, nor are publicity,
|
||||||
|
privacy, and/or other similar personality rights; however, to
|
||||||
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
|
assert any such rights held by the Licensor to the limited
|
||||||
|
extent necessary to allow You to exercise the Licensed
|
||||||
|
Rights, but not otherwise.
|
||||||
|
|
||||||
|
2. Patent and trademark rights are not licensed under this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society
|
||||||
|
under any voluntary or waivable statutory or compulsory
|
||||||
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
|
reserves any right to collect such royalties, including when
|
||||||
|
the Licensed Material is used other than for NonCommercial
|
||||||
|
purposes.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3 -- License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
|
||||||
|
a. Attribution.
|
||||||
|
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
|
||||||
|
a. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if
|
||||||
|
designated);
|
||||||
|
|
||||||
|
ii. a copyright notice;
|
||||||
|
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
|
||||||
|
b. indicate if You modified the Licensed Material and
|
||||||
|
retain an indication of any previous modifications; and
|
||||||
|
|
||||||
|
c. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
|
||||||
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section 3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
|
||||||
|
b. ShareAlike.
|
||||||
|
|
||||||
|
In addition to the conditions in Section 3(a), if You Share
|
||||||
|
Adapted Material You produce, the following conditions also apply.
|
||||||
|
|
||||||
|
1. The Adapter's License You apply must be a Creative Commons
|
||||||
|
license with the same License Elements, this version or
|
||||||
|
later, or a BY-NC-SA Compatible License.
|
||||||
|
|
||||||
|
2. You must include the text of, or the URI or hyperlink to, the
|
||||||
|
Adapter's License You apply. You may satisfy this condition
|
||||||
|
in any reasonable manner based on the medium, means, and
|
||||||
|
context in which You Share Adapted Material.
|
||||||
|
|
||||||
|
3. You may not offer or impose any additional or different terms
|
||||||
|
or conditions on, or apply any Effective Technological
|
||||||
|
Measures to, Adapted Material that restrict exercise of the
|
||||||
|
rights granted under the Adapter's License You apply.
|
||||||
|
|
||||||
|
|
||||||
|
Section 4 -- Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
|
||||||
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database for NonCommercial purposes
|
||||||
|
only;
|
||||||
|
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material,
|
||||||
|
including for purposes of Section 3(b); and
|
||||||
|
|
||||||
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
|
all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
|
||||||
|
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
|
||||||
|
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||||
|
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||||
|
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||||
|
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||||
|
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||||
|
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||||
|
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||||
|
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||||
|
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||||
|
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||||
|
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||||
|
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||||
|
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||||
|
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||||
|
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||||
|
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
|
||||||
|
Section 6 -- Term and Termination.
|
||||||
|
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section 6(a), it reinstates:
|
||||||
|
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the
|
||||||
|
violation; or
|
||||||
|
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||||
|
right the Licensor may have to seek remedies for Your violations
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
|
||||||
|
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 7 -- Other Terms and Conditions.
|
||||||
|
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 8 -- Interpretation.
|
||||||
|
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and
|
||||||
|
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted
|
||||||
|
as a limitation upon, or waiver of, any privileges and immunities
|
||||||
|
that apply to the Licensor or You, including from the legal
|
||||||
|
processes of any jurisdiction or authority.
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons is not a party to its public
|
||||||
|
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||||
|
its public licenses to material it publishes and in those instances
|
||||||
|
will be considered the “Licensor.” The text of the Creative Commons
|
||||||
|
public licenses is dedicated to the public domain under the CC0 Public
|
||||||
|
Domain Dedication. Except for the limited purpose of indicating that
|
||||||
|
material is shared under a Creative Commons public license or as
|
||||||
|
otherwise permitted by the Creative Commons policies published at
|
||||||
|
creativecommons.org/policies, Creative Commons does not authorize the
|
||||||
|
use of the trademark "Creative Commons" or any other trademark or logo
|
||||||
|
of Creative Commons without its prior written consent including,
|
||||||
|
without limitation, in connection with any unauthorized modifications
|
||||||
|
to any of its public licenses or any other arrangements,
|
||||||
|
understandings, or agreements concerning use of licensed material. For
|
||||||
|
the avoidance of doubt, this paragraph does not form part of the
|
||||||
|
public licenses.
|
||||||
|
|
||||||
|
Creative Commons may be contacted at creativecommons.org.
|
94
README.md
94
README.md
|
@ -1,94 +0,0 @@
|
||||||
<h1 align="center"> CATH.EXE </h1>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img src = "https://media.discordapp.net/attachments/842014909264953354/867806346593042483/Cath-temp-banner.png?width=1244&height=415">
|
|
||||||
<br>
|
|
||||||
<a href="https://trello.com/b/dIgR0QNm"><img alt='Trello' src="https://img.shields.io/badge/-Invite-5865f2?logo=discord&logoColor=white&style=for-the-badge"></a>
|
|
||||||
<a href="https://rebrand.ly/cathGithubInvite"><img alt='Support Server' src="https://img.shields.io/discord/718762019586572341?label=Support%20Server&logo=Discord&colorB=5865F2&style=for-the-badge&logoColor=white"></a>
|
|
||||||
<a href="https://trello.com/b/dIgR0QNm"><img alt='Trello' src="https://img.shields.io/badge/Trello-5865F2?style=for-the-badge&logo=trello&logoColor=white"></a>
|
|
||||||
<a href="https://thunder75.gitbook.io/cath-bot" target="_blank"><img src="https://img.shields.io/static/v1?label=Docs&message=available&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
<a href="https://ko-fi.com/I2I35XISJ"><img alt='Kofi' src="https://img.shields.io/static/v1?label=Support%20Us&message=KO.FI&color=ff5e5b&logo=kofi&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
<a href="https://cath.statuspage.io/"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=Cath.exe&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
<a href="https://cath.statuspage.io/"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=Cath%202&message=Online&color=00DA83&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
<a href="https://cath.statuspage.io/"><img alt='StatusPage' src="https://img.shields.io/static/v1?&label=API&message=Under%20Devlopment&color=FF5E5B&logo=statuspage&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<!-- description -->
|
|
||||||
|
|
||||||
**Cath.exe** is a Multipurpose Discord Bot with many features that include but are not limited to Moderation, Music and Economy. The Call of Duty Stats are courtesy of **Project Lighthouse** by [**Path.exe**](https://www.youtube.com/channel/UC0hvUWYhyx_DOEBzLWEJxsw).<br><br>
|
|
||||||
If you like this bot, feel free to <img src = "https://discord.com/assets/141d49436743034a59dec6bd5618675d.svg" width = "16"> **Star** and **fork** this repository.<br>
|
|
||||||
|
|
||||||
# Features
|
|
||||||
<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>
|
|
||||||
|
|
||||||
🚨 **Moderation** - Classic commands like kick, ban, warn, role and many more.. <br>
|
|
||||||
📈 **Economy** - A Robust economy system, inspired by **pepe bot.** <br>
|
|
||||||
✨ **Fun Commands** - A massive collection of fun commands `(35+ commands)` <br>
|
|
||||||
🎵 **Music** - Classic Music Commands that can play from various sources. <br>
|
|
||||||
🛠 **Utility** - A wide range of useful commands `(Around 20)` <br>
|
|
||||||
🕹 **Games** - Many fun games to spend your time ...
|
|
||||||
> To access the full list of commands, check out our [Documentation](https://thunder75.gitbook.io/cath-bot/core/commands).
|
|
||||||
|
|
||||||
🎮 **Call of Duty** - Check Call od Duty Mobile Stats exclusivly using our bot
|
|
||||||
> ⚠ Only avaliable on the Live instance for now.
|
|
||||||
|
|
||||||
## 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)
|
|
||||||
[![CodeFactor](https://www.codefactor.io/repository/github/night0721/cath/badge?s=ffdc3c246a8b91a3d7064d128a1b81b9dbeca61f&style=for-the-badge)]((https://www.codefactor.io/repository/github/night0721/cath))
|
|
||||||
<a href="https://thunder75.gitbook.io/cath-bot/deployment" target="_blank"><img src="https://img.shields.io/static/v1?label=Deployment&message=Guide&color=5865F2&logo=gitbook&logoColor=white&style=for-the-badge&scale=1.4"></a>
|
|
||||||
|
|
||||||
A detailed Deployment guide can be found [here](https://thunder75.gitbook.io/cath-bot/deployment).
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<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)
|
|
||||||
[![node](https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white)](https://nodejs.org/en/)
|
|
||||||
[![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/)
|
|
||||||
[![MongoDB](https://img.shields.io/badge/MongoDB-4EA94B?style=for-the-badge&logo=mongodb&logoColor=white)](https://mongodb.com/)
|
|
||||||
<img src ="https://forthebadge.com/images/badges/built-with-love.svg" width = "122"><br>
|
|
||||||
</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>
|
|
||||||
<summary>Github Stats</summary>
|
|
||||||
|
|
||||||
![Lines of code](https://img.shields.io/tokei/lines/github/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)
|
|
||||||
[![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) -->
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
# Support, Feature Request & Bug Reports
|
|
||||||
|
|
||||||
## <img src = "https://cdn.discordapp.com/emojis/867093614403256350.png?v=1" width = 18> Support & Feature Request
|
|
||||||
|
|
||||||
Join the official [Support Server](https://discord.gg/SbQHChmGcp) on Discord & we will be happy to assist you. <br>
|
|
||||||
To Request new features contact us on Discord using the support server.
|
|
||||||
|
|
||||||
## <img src = "https://cdn.discordapp.com/emojis/867093601962950666.png?v=1" width = "18"> Report Bugs
|
|
||||||
|
|
||||||
You can report bugs or issues by opening a issue in this repository. Alternatevely you can also contact us on Discord using the support server.
|
|
||||||
|
|
||||||
[![Support Server](https://img.shields.io/discord/718762019586572341?label=Support%20Server&logo=Discord&colorB=5865F2&style=for-the-badge&logoColor=white) ](https://discord.gg/SR7TeNJG67)
|
|
||||||
|
|
||||||
<h1 align="center"> Contributors </h1>
|
|
||||||
|
|
||||||
Contributions are always welcomed, but make sure to read [Contributing.md](/CONTRIBUTING.md) first.
|
|
||||||
|
|
||||||
![Contributors](https://badges.pufler.dev/contributors/night0721/cath.exe?bots=false)
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <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"> -->
|
|
62
app.json
62
app.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "cath.exe - CODM Bot",
|
"name": "NYX - CODM Bot",
|
||||||
"description": "Host cath.exe through Heroku",
|
"description": "Host cath.exe through Heroku",
|
||||||
"keywords": ["cat", "cath", "codm", "discord", "discord bot"],
|
"keywords": ["bot", "nyx", "codm", "discord", "gunsmith"],
|
||||||
"repository": "https://github.com/night0721/cath.exe",
|
"repository": "https://github.com/night0721/cath.exe",
|
||||||
"env": {
|
"env": {
|
||||||
"TOKEN": {
|
"TOKEN": {
|
||||||
|
@ -11,64 +11,6 @@
|
||||||
"MONGO": {
|
"MONGO": {
|
||||||
"description": "MongoDB URI from https://mongodb.com/",
|
"description": "MongoDB URI from https://mongodb.com/",
|
||||||
"value": ""
|
"value": ""
|
||||||
},
|
|
||||||
"CLIENT_ID": {
|
|
||||||
"description": "Bot ID from https://discord.com/developers/applications",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"CLIENT_SECRET": {
|
|
||||||
"description": "Client Secret from https://discord.com/developers/applications",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"DMLogID": {
|
|
||||||
"description": "DM Log Webhook ID",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"DMLogToken": {
|
|
||||||
"description": "DM Log Webhook Token",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"CMDLogID": {
|
|
||||||
"description": "Command Log Webhook ID",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"CMDLogToken": {
|
|
||||||
"description": "Command Log Webhook Token",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ReadyLogID": {
|
|
||||||
"description": "Ready Log Webhook ID",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ReadyLogToken": {
|
|
||||||
"description": "Ready Log Webhook Token",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ErrorLogID": {
|
|
||||||
"description": "Error Log Webhook ID",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ErrorLogToken": {
|
|
||||||
"description": "Error Log Webhook Token",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ServerLogID": {
|
|
||||||
"description": "Server Log Webhook ID",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"ServerLogToken": {
|
|
||||||
"description": "Server Log Webhook Token",
|
|
||||||
"value": ""
|
|
||||||
},
|
|
||||||
"PORT": {
|
|
||||||
"description": "Port for Heroku to use",
|
|
||||||
"value": "3000",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"REDIRECT": {
|
|
||||||
"description": "REDIRECT URL",
|
|
||||||
"value": "",
|
|
||||||
"required": false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"buildpacks": [
|
"buildpacks": [
|
||||||
|
|
50
bot.js
50
bot.js
|
@ -1,50 +0,0 @@
|
||||||
const { MessageEmbed, Intents } = require("discord.js");
|
|
||||||
const Cath = require("./client/Cath");
|
|
||||||
const version = require("./package.json").version;
|
|
||||||
const config = require("./config.json");
|
|
||||||
const client = new Cath({
|
|
||||||
allowedMentions: { parse: ["users", "roles"], repliedUser: true },
|
|
||||||
presence: {
|
|
||||||
activities: [
|
|
||||||
{
|
|
||||||
name: `v${version} | ${config.prefix}help`,
|
|
||||||
type: "STREAMING",
|
|
||||||
url: "https://www.youtube.com/watch?v=_D5xG7XoF88",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
restTimeOffset: 0,
|
|
||||||
partials: ["MESSAGE", "CHANNEL", "REACTION", "GUILD_MEMBER"],
|
|
||||||
intents: [
|
|
||||||
//Intents.FLAGS.GUILD_MEMBERS,
|
|
||||||
//Intents.FLAGS.GUILD_PRESENCES,
|
|
||||||
Intents.FLAGS.GUILDS,
|
|
||||||
Intents.FLAGS.GUILD_BANS,
|
|
||||||
Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS,
|
|
||||||
Intents.FLAGS.GUILD_INVITES,
|
|
||||||
Intents.FLAGS.GUILD_VOICE_STATES,
|
|
||||||
Intents.FLAGS.GUILD_MESSAGES,
|
|
||||||
Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
|
|
||||||
Intents.FLAGS.DIRECT_MESSAGES,
|
|
||||||
Intents.FLAGS.DIRECT_MESSAGE_TYPING,
|
|
||||||
],
|
|
||||||
});
|
|
||||||
module.exports = client;
|
|
||||||
require("./util/functions/economy")(client);
|
|
||||||
require("./util/dist/manager")(client);
|
|
||||||
require("./util/dist/handler")(client);
|
|
||||||
process.on("unhandledRejection", async err => {
|
|
||||||
if (client.user) {
|
|
||||||
if (client.user.id === client.user.id) {
|
|
||||||
const embed = new MessageEmbed()
|
|
||||||
.setTitle("UnhandledRejection Error")
|
|
||||||
.setDescription(`\`\`\`ini\n${err.stack}\`\`\``)
|
|
||||||
.setTimestamp()
|
|
||||||
.setColor(client.color)
|
|
||||||
.setFooter(client.user.username);
|
|
||||||
client.channels.cache.get(client.ErrorLog).send({ embeds: [embed] });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return console.error(err);
|
|
||||||
});
|
|
||||||
client.start();
|
|
2
client/CODMClient.js
Normal file
2
client/CODMClient.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const { CODMClient } = require("cath");
|
||||||
|
module.exports = new CODMClient("Gae");
|
|
@ -1,72 +0,0 @@
|
||||||
const { Client, Collection } = require("discord.js");
|
|
||||||
const config = require("../config.json");
|
|
||||||
const { GiveawaysManager } = require("discord-giveaways");
|
|
||||||
require("dotenv").config();
|
|
||||||
class Cath extends Client {
|
|
||||||
/**
|
|
||||||
* @param {Client.options} options
|
|
||||||
*/
|
|
||||||
constructor(options = {}) {
|
|
||||||
super(options);
|
|
||||||
this.commands = new Collection();
|
|
||||||
this.slashCommands = new Collection();
|
|
||||||
this.aliases = new Collection();
|
|
||||||
this.esnipes = new Collection();
|
|
||||||
this.hide = new Collection();
|
|
||||||
this.snipes = new Collection();
|
|
||||||
this.queue = new Map();
|
|
||||||
this.Timers = new Map();
|
|
||||||
this.config = config;
|
|
||||||
this.function = require("../util/functions/function");
|
|
||||||
this.data = require("../util/functions/mongoose");
|
|
||||||
this.err = require("../util/dist/err");
|
|
||||||
this.serr = require("../util/dist/slash");
|
|
||||||
this.cat = this.config.ca;
|
|
||||||
this.SuggestionLog = this.config.Suggestion;
|
|
||||||
this.ReportLog = this.config.Report;
|
|
||||||
this.DMLog = this.config.DMLog;
|
|
||||||
this.CMDLog = this.config.CMDLog;
|
|
||||||
this.ServerLog = this.config.ServerLog;
|
|
||||||
this.ErrorLog = this.config.ErrorLog;
|
|
||||||
this.color = this.config.color;
|
|
||||||
this.author = "Cath Team";
|
|
||||||
this.invite = "https://discord.gg/SbQHChmGcp";
|
|
||||||
this.web = this.config.URL;
|
|
||||||
this.owners = [
|
|
||||||
"452076196419600394", //Night
|
|
||||||
"766645910087139338", //chekseaa
|
|
||||||
"755476040029306952", //Kałÿ
|
|
||||||
"534027706325532694", //Cat drinking a cat
|
|
||||||
"381442059111759883", //Thunder
|
|
||||||
"556808365574193194", //chunchunmaru
|
|
||||||
];
|
|
||||||
this.currency = "<:cp:840231933933387797>";
|
|
||||||
this.path = [
|
|
||||||
"614423108388126731",
|
|
||||||
"767173194943168542",
|
|
||||||
"783633408738721834",
|
|
||||||
"718762019586572341",
|
|
||||||
"784052348561522730",
|
|
||||||
"840225563193114624",
|
|
||||||
"800396461229080619",
|
|
||||||
];
|
|
||||||
this.giveaways = new GiveawaysManager(this, {
|
|
||||||
storage: "./util/Data/giveaways.json",
|
|
||||||
updateCountdownEvery: 1000,
|
|
||||||
default: {
|
|
||||||
botsCanWin: false,
|
|
||||||
embedColor: this.color,
|
|
||||||
reaction: "🎉",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
start() {
|
|
||||||
this.data
|
|
||||||
.connect(process.env.MONGO)
|
|
||||||
.then(() => console.log("Connected to MongoDB!"))
|
|
||||||
.catch(e => console.log(e));
|
|
||||||
this.login(process.env.TOKEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Cath;
|
|
2
client/CodeClient.js
Normal file
2
client/CodeClient.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const { CodeClient } = require("cath");
|
||||||
|
module.exports = new CodeClient();
|
38
client/GiveawaysClient.js
Normal file
38
client/GiveawaysClient.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
const { GiveawaysClient } = require("cath");
|
||||||
|
const client = require("..");
|
||||||
|
require("dotenv").config();
|
||||||
|
module.exports = new GiveawaysClient({
|
||||||
|
client,
|
||||||
|
MongooseConnectionURI: process.env.MONGO,
|
||||||
|
GiveawayMessages: {
|
||||||
|
dmWinner: true,
|
||||||
|
giveaway: "🎉 **GIVEAWAY** 🎉",
|
||||||
|
giveawayDescription:
|
||||||
|
"🎁 Prize: **{award}**\n🎊 Hosted by: {hostedBy}\n⏲️ Winner(s): `{winners}` \n🙏 Entrants: {totalParticipants} \n\n**Requirements:** {requirements}",
|
||||||
|
endedGiveawayDescription:
|
||||||
|
"🎁 Prize: **{award}**\n🎊 Hosted by: {hostedBy}\n⏲️ Winner(s): {winners} \n🙏 Entrants: {totalParticipants}",
|
||||||
|
giveawayFooterImage: "https://emoji.gg/assets/emoji/3461-giveaway.gif",
|
||||||
|
winMessage:
|
||||||
|
"Congratulations {winners}! You have won **{award}** from total `{totalParticipants}` entrants!",
|
||||||
|
rerolledMessage: "Rerolled! {winner} is the new winner of the giveaway!",
|
||||||
|
toParticipate: "**Click the `Enter` button to enter the giveaway!**",
|
||||||
|
newParticipant:
|
||||||
|
"You have successfully entered for this giveaway! There are total `{totalParticipants}` entrants",
|
||||||
|
alreadyParticipated: "**You have already participated in this giveaway!**",
|
||||||
|
noParticipants: "There isn't enough entrant in this giveaway!",
|
||||||
|
noRole:
|
||||||
|
"You don't have the required role(s)\n{requiredRoles}\n for the giveaway!",
|
||||||
|
dmMessage:
|
||||||
|
"You have won a giveaway in **{guildName}**!\nPrize: [{award}]({giveawayURL})",
|
||||||
|
noWinner:
|
||||||
|
"There isn't any winner in this giveaway due to not enough entrants",
|
||||||
|
alreadyEnded: "The giveaway had already ended!",
|
||||||
|
dropWin: "{winner} Won The Drop!!",
|
||||||
|
noWeeklyExp:
|
||||||
|
"you dont have the required minimum weekly xp to join this giveaway",
|
||||||
|
noLevel: "You dont have the minimum required level to join this giveaway",
|
||||||
|
nonoRole:
|
||||||
|
"You do not have the {requiredRoles} role(s) which is required to join this giveaway",
|
||||||
|
editParticipants: true,
|
||||||
|
},
|
||||||
|
});
|
149
client/NYX.js
Normal file
149
client/NYX.js
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
const { Client, Collection, MessageEmbed } = require("discord.js");
|
||||||
|
const { Manager } = require("erela.js");
|
||||||
|
const config = require("../config");
|
||||||
|
const Spotify = require("erela.js-spotify");
|
||||||
|
const utils = require("../util/functions/function");
|
||||||
|
require("dotenv").config();
|
||||||
|
|
||||||
|
class NYX extends Client {
|
||||||
|
/**
|
||||||
|
* @param {Client.options} options
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
options = {
|
||||||
|
presence: {
|
||||||
|
activities: [
|
||||||
|
{
|
||||||
|
name: `v${require("../package.json").version} | /help`,
|
||||||
|
type: "STREAMING",
|
||||||
|
url: "https://www.youtube.com/watch?v=YSKDu1gKntY",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
shard: "auto",
|
||||||
|
restTimeOffset: 0,
|
||||||
|
partials: ["MESSAGE", "CHANNEL", "REACTION", "GUILD_MEMBER"],
|
||||||
|
intents: 24207,
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
super(options);
|
||||||
|
this.slashCommands = new Collection();
|
||||||
|
this.hide = new Collection();
|
||||||
|
this.esnipes = new Collection();
|
||||||
|
this.snipes = new Collection();
|
||||||
|
this.config = config;
|
||||||
|
this.data = require("../util/functions/mongoose");
|
||||||
|
this.color = config.color;
|
||||||
|
this.author = "Team NYX";
|
||||||
|
this.invite = "https://discord.gg/SbQHChmGcp";
|
||||||
|
this.docs = "https://thunder75.gitbook.io/nyx/";
|
||||||
|
this.web = config.URL;
|
||||||
|
this.owners = [
|
||||||
|
"452076196419600394", // Night
|
||||||
|
"534027706325532694", // Cat drinking a cat
|
||||||
|
"381442059111759883", // Thunder
|
||||||
|
"556808365574193194", // chunchunmaru
|
||||||
|
"746753527338238115", // mightyful
|
||||||
|
];
|
||||||
|
this.currency = "<:cp:840231933933387797>"; // <a:pumpkin:898975476863877170>
|
||||||
|
this.xp = "<:nyx_xp:900309007472926720>";
|
||||||
|
this.path = [
|
||||||
|
"614423108388126731", // Camper on Duty
|
||||||
|
"767173194943168542", // Dark Bonker
|
||||||
|
"718762019586572341", // NYX Nation
|
||||||
|
"869583978108157972", // Lighthouse Community
|
||||||
|
"840225563193114624", // Command Test
|
||||||
|
];
|
||||||
|
const client = this;
|
||||||
|
require("../util/functions/economy")(client);
|
||||||
|
this.manager = new Manager({
|
||||||
|
plugins: [
|
||||||
|
new Spotify({
|
||||||
|
clientID: process.env.SPOTIFY_ID,
|
||||||
|
clientSecret: process.env.SPOTIFY_SECRET,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
nodes: [
|
||||||
|
{
|
||||||
|
host: config.Lavalink.Host,
|
||||||
|
port: config.Lavalink.Port,
|
||||||
|
password: config.Lavalink.Password,
|
||||||
|
retryDelay: 5000,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
autoPlay: true,
|
||||||
|
send: (id, payload) => {
|
||||||
|
const guild = client.guilds.cache.get(id);
|
||||||
|
if (guild) guild.shard.send(payload);
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.on("nodeConnect", node =>
|
||||||
|
console.log(`Node "${node.options.identifier}" has connected`)
|
||||||
|
)
|
||||||
|
.on("nodeError", (node, error) =>
|
||||||
|
console.log(
|
||||||
|
`Node "${node.options.identifier}" encountered an error: ${error.message}`
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.on("trackStart", (player, track) => {
|
||||||
|
const channel = client.channels.cache.get(player.textChannel);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setColor(config.color)
|
||||||
|
.setAuthor(
|
||||||
|
`Now Playing`,
|
||||||
|
"https://cdn.discordapp.com/emojis/897017864085712936.gif"
|
||||||
|
)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(player.queue.current.displayThumbnail())
|
||||||
|
.setDescription(`[${track.title}](${track.uri})`)
|
||||||
|
.addField(
|
||||||
|
"Duration",
|
||||||
|
`\`${utils.prettyMs(track.duration, {
|
||||||
|
colonNotation: true,
|
||||||
|
})}\``,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
channel.send({ embeds: [embed] });
|
||||||
|
})
|
||||||
|
.on("queueEnd", player => {
|
||||||
|
const channel = client.channels.cache.get(player.textChannel);
|
||||||
|
const embed2 = new MessageEmbed()
|
||||||
|
.setColor(config.color)
|
||||||
|
.setAuthor(
|
||||||
|
`Queue has ended`,
|
||||||
|
"https://cdn.discordapp.com/emojis/897017864085712936.gif"
|
||||||
|
)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
channel.send({ embeds: [embed2] });
|
||||||
|
// player.destroy(); Remove if 24/7
|
||||||
|
});
|
||||||
|
}
|
||||||
|
start() {
|
||||||
|
require("../util/dist/handler")(this);
|
||||||
|
this.data
|
||||||
|
.connect(process.env.MONGO)
|
||||||
|
.then(() => console.log("Connected to MongoDB ✅"))
|
||||||
|
.catch(e => console.log(e));
|
||||||
|
this.login(process.env.TOKEN);
|
||||||
|
}
|
||||||
|
err(c, e) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("An Error Occured")
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(`❌ | ${e}`)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${this.author}`, this.user.displayAvatarURL());
|
||||||
|
c.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
se(c, e) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setColor(this.color)
|
||||||
|
.setDescription(e)
|
||||||
|
.setTimestamp();
|
||||||
|
c.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = NYX;
|
|
@ -1,6 +1,6 @@
|
||||||
const { StarboardClient } = require("cath");
|
const { StarboardClient } = require("cath");
|
||||||
const client = require("../bot");
|
const client = require("..");
|
||||||
module.exports = new StarboardClient({
|
module.exports = new StarboardClient({
|
||||||
client,
|
client,
|
||||||
color: "02023a",
|
color: client.color,
|
||||||
});
|
});
|
||||||
|
|
2
client/URLClient.js
Normal file
2
client/URLClient.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const { URLClient } = require("cath");
|
||||||
|
module.exports = new URLClient();
|
828
command/CODM/build.js
Normal file
828
command/CODM/build.js
Normal file
|
@ -0,0 +1,828 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const axios = require("axios");
|
||||||
|
const moment = require("moment");
|
||||||
|
module.exports = {
|
||||||
|
name: "build",
|
||||||
|
description: "Get gunsmith builds",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
category: "CODM",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "assault_rifle",
|
||||||
|
description: "Get a gunsmith build for a Assault Rifle",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "AK117",
|
||||||
|
value: "ak117",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "M16",
|
||||||
|
value: "m16",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Type 25",
|
||||||
|
value: "type25",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "AK-47",
|
||||||
|
value: "ak47",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ASM10",
|
||||||
|
value: "asm10",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "M4",
|
||||||
|
value: "m4",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BK57",
|
||||||
|
value: "bk57",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "LK24",
|
||||||
|
value: "lk24",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Man-o-War",
|
||||||
|
value: "manowar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ICR-1",
|
||||||
|
value: "icr1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "KN-44",
|
||||||
|
value: "kn44",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HBRa3",
|
||||||
|
value: "hbra3",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HVK-30",
|
||||||
|
value: "hvk30",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DR-H",
|
||||||
|
value: "drh",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Peacekeeper MK2",
|
||||||
|
value: "peacekeepermk2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "FR .556",
|
||||||
|
value: "fr556",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "AS VAL",
|
||||||
|
value: "asval",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "CR-56 AMAX",
|
||||||
|
value: "cr56amax",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "M13",
|
||||||
|
value: "m13",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Swordfish",
|
||||||
|
value: "swordfish",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Jokesta",
|
||||||
|
value: "jokesta",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Aggressive",
|
||||||
|
value: "aggressive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Passive",
|
||||||
|
value: "passive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Search & Destroy",
|
||||||
|
value: "snd",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "sub_machine_gun",
|
||||||
|
description: "Get a gunsmith build for a Sub Machine Gun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "RUS-79u",
|
||||||
|
value: "rus79u",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PDW-57",
|
||||||
|
value: "pdw57",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Razorback",
|
||||||
|
value: "razorback",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MSMC",
|
||||||
|
value: "msmc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HG40",
|
||||||
|
value: "hg40",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Pharo",
|
||||||
|
value: "pharo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "GKS",
|
||||||
|
value: "gks",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Cordite",
|
||||||
|
value: "cordite",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "QQ9",
|
||||||
|
value: "qq9",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Fennec",
|
||||||
|
value: "fennec",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Chicom",
|
||||||
|
value: "chicom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "AGR 556",
|
||||||
|
value: "agr556",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "QXR",
|
||||||
|
value: "qxr",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PP19 Bizon",
|
||||||
|
value: "pp19bizon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MX9",
|
||||||
|
value: "mx9",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Jokesta",
|
||||||
|
value: "jokesta",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Aggressive",
|
||||||
|
value: "aggressive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Passive",
|
||||||
|
value: "passive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Search & Destroy",
|
||||||
|
value: "snd",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "sniper_rifle",
|
||||||
|
description: "Get a gunsmith build for a Sniper Rifle",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Arctic .50",
|
||||||
|
value: "arctic50",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "M21 EBR",
|
||||||
|
value: "m21ebr",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DL Q33",
|
||||||
|
value: "dlq33",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Locus",
|
||||||
|
value: "locus",
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// name: "XPR-50",
|
||||||
|
// value: "xpr50",
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// name: "NA-45",
|
||||||
|
// value: "na45",
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
name: "Outlaw",
|
||||||
|
value: "outlaw",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Rytec AMR",
|
||||||
|
value: "rytecamr",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// name: "little_b",
|
||||||
|
// value: "littleb",
|
||||||
|
// },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Aggressive",
|
||||||
|
value: "aggressive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Passive",
|
||||||
|
value: "passive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Search & Destroy",
|
||||||
|
value: "snd",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "light_machine_gun",
|
||||||
|
description: "Get a gunsmith build for a Light Machine Gun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "S36",
|
||||||
|
value: "s36",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "UL736",
|
||||||
|
value: "ul736",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "RPD",
|
||||||
|
value: "rpd",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "M4 LMG",
|
||||||
|
value: "m4lmg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Chopper",
|
||||||
|
value: "chopper",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Holger 26",
|
||||||
|
value: "holger26",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Hades",
|
||||||
|
value: "hades",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Aggressive",
|
||||||
|
value: "aggressive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Passive",
|
||||||
|
value: "passive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Search & Destroy",
|
||||||
|
value: "snd",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "shotgun",
|
||||||
|
description: "Get a gunsmith build for a Shotgun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "HS2126",
|
||||||
|
value: "hs2126",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BY15",
|
||||||
|
value: "by15",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Striker",
|
||||||
|
value: "striker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "KRM_262",
|
||||||
|
value: "krm262",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Echo",
|
||||||
|
value: "echo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HS0405",
|
||||||
|
value: "hs0405",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "R9-0",
|
||||||
|
value: "r90",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "dHitman",
|
||||||
|
value: "dhitman",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "ADS",
|
||||||
|
value: "ads",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Hipfire",
|
||||||
|
value: "hipfire",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "marksman_rifle",
|
||||||
|
description: "Get a gunsmith build for a Marksman Rifle",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Kilo Bolt-Action",
|
||||||
|
value: "kiloboltaction",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SKS",
|
||||||
|
value: "sks",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SP-R 208",
|
||||||
|
value: "spr208",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MK2",
|
||||||
|
value: "mk2",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// name: "Little_b",
|
||||||
|
// value: "littleb",
|
||||||
|
// },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Aggressive",
|
||||||
|
value: "aggressive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Passive",
|
||||||
|
value: "passive",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "pistol",
|
||||||
|
description: "Get a gunsmith build for a Pistol",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "Name of the Gun",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "J358",
|
||||||
|
value: "j358",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MW11",
|
||||||
|
value: "mw11",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".50 GS",
|
||||||
|
value: "gs50",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Renetti",
|
||||||
|
value: "renetti",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Shorty",
|
||||||
|
value: "shorty",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Crossbow",
|
||||||
|
value: "crossbow",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "youtuber",
|
||||||
|
description: "Select a Content Creator",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Path.exe",
|
||||||
|
value: "path",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "tag",
|
||||||
|
description: "Playstyle/game mode of the build",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Respawn",
|
||||||
|
value: "respawn",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
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 tag = args[3];
|
||||||
|
const data = await axios
|
||||||
|
.get(
|
||||||
|
`${process.env.api}/api/v1/codm/builds?name=${gun}&cc=${cc}&tag=${tag}`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: "Gae",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(res => res.data)
|
||||||
|
.catch();
|
||||||
|
const unavaliable = new MessageEmbed()
|
||||||
|
.setDescription(
|
||||||
|
`<: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);
|
||||||
|
if (!data) {
|
||||||
|
interaction.followUp({ embeds: [unavaliable] });
|
||||||
|
} else {
|
||||||
|
const arr = [];
|
||||||
|
data.attachments.map((e, i) => {
|
||||||
|
return arr.push(`**${i + 1}: ${e}**`);
|
||||||
|
});
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(
|
||||||
|
`${data.weaponName}(${data.weaponType})'s ${all[tag]} build from ${data.author}`
|
||||||
|
)
|
||||||
|
.setDescription(
|
||||||
|
`<:nyx_description:897379659665264650> Description \`\`\`\n${data.notes}\n\`\`\``
|
||||||
|
)
|
||||||
|
.setColor(16580400)
|
||||||
|
.setImage(data.imageUrl)
|
||||||
|
.setFooter(
|
||||||
|
`Builds Aggregated by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.addFields(
|
||||||
|
{
|
||||||
|
name: "<:nyx_author:897379080549314601> Author:",
|
||||||
|
value: `\`\`\`\n${data.author}\n\`\`\``,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "<a:lastupdate:897381474330873887> Last Updated:",
|
||||||
|
value: `\`\`\`\n${moment(Date.parse(data.lastUpdate)).format(
|
||||||
|
"MMMM Do YYYY"
|
||||||
|
)}\n\`\`\``,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ":id: CWTS:",
|
||||||
|
value: `\`\`\`\n${data.cwts}\n\`\`\``,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ":paperclip: Attachments:",
|
||||||
|
value: arr.join("\n"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "<a:tags:897034924140404776> Tags",
|
||||||
|
value: data.tags.join(", "),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setURL(client.web);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [embed],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// 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] });
|
||||||
|
// },
|
||||||
|
// };
|
55
command/CODM/class.js
Normal file
55
command/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, interaction) => {
|
||||||
|
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(`🎲 A Randomly Generated Class for ${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();
|
||||||
|
interaction.followUp({ 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)];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
125
command/CODM/damage.js
Normal file
125
command/CODM/damage.js
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
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",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "gun",
|
||||||
|
description: "Gun name",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const repEmb = dmg(args[0].replace("\n", " "));
|
||||||
|
if (hasError) {
|
||||||
|
interaction.followUp({ embeds: [repEmb] });
|
||||||
|
} else {
|
||||||
|
interaction.followUp({ 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();*/
|
170
command/CODM/effects.js
vendored
Normal file
170
command/CODM/effects.js
vendored
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
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",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "gun",
|
||||||
|
description: "Gun name",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const repEmb = attachments(args[0].replace("\n", " "));
|
||||||
|
if (hasError) {
|
||||||
|
interaction.followUp({ embeds: [repEmb] });
|
||||||
|
} else {
|
||||||
|
interaction.followUp({ 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();*/
|
196
command/CODM/perk.js
Normal file
196
command/CODM/perk.js
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { CODMClient } = require("cath");
|
||||||
|
const c = new CODMClient("Gae");
|
||||||
|
module.exports = {
|
||||||
|
name: "perk",
|
||||||
|
description: "Get perk stats",
|
||||||
|
type: "CHAT_INPUT",
|
||||||
|
usage: "{Perk}",
|
||||||
|
category: "CODM",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "red",
|
||||||
|
description: "Red Perk",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "perk",
|
||||||
|
description: "Perk",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Fast Recover",
|
||||||
|
value: "fastrecover",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Persistence",
|
||||||
|
value: "persistence",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Flak Jacket",
|
||||||
|
value: "flakjacket",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Skulker",
|
||||||
|
value: "skulker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Agile",
|
||||||
|
value: "agile",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Lightweight",
|
||||||
|
value: "lightweight",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Restock",
|
||||||
|
value: "restock",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Tactician",
|
||||||
|
value: "tactician",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Overclock",
|
||||||
|
value: "overclock",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Martydom",
|
||||||
|
value: "martydom",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Iron Lungs",
|
||||||
|
value: "ironlungs",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "green",
|
||||||
|
description: "Green Perk",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "perk",
|
||||||
|
description: "Perk",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Vulture",
|
||||||
|
value: "vulture",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Toughness",
|
||||||
|
value: "toughness",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Tracker",
|
||||||
|
value: "tracker",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ghost",
|
||||||
|
value: "ghost",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Cold Blooded",
|
||||||
|
value: "coldblooded",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Hardwired",
|
||||||
|
value: "hardwired",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Quick Fix",
|
||||||
|
value: "quickfix",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Amped",
|
||||||
|
value: "amped",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Recon",
|
||||||
|
value: "recon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gung Ho",
|
||||||
|
value: "gungho",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "SUB_COMMAND",
|
||||||
|
name: "blue",
|
||||||
|
description: "Blue Perk",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "perk",
|
||||||
|
description: "Perk",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "Hardline",
|
||||||
|
value: "hardline",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Demo Expert",
|
||||||
|
value: "demoexpert",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Tactical Mask",
|
||||||
|
value: "tacticalmask",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Alert",
|
||||||
|
value: "alert",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Engineer",
|
||||||
|
value: "engineer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Dead Silence",
|
||||||
|
value: "deadsilence",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Shrapnel",
|
||||||
|
value: "shrapnel",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "High Alert",
|
||||||
|
value: "highalert",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Launcher Plus",
|
||||||
|
value: "launcherplus",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const val = args[1];
|
||||||
|
const d = await c.getperk(val);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setColor(
|
||||||
|
d.type == "green"
|
||||||
|
? "09654a"
|
||||||
|
: d.type == "red"
|
||||||
|
? "8a0a0a"
|
||||||
|
: d.type == "blue"
|
||||||
|
? "1047a4"
|
||||||
|
: client.color
|
||||||
|
)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setTitle(d.perk)
|
||||||
|
.addField("Effects", d.effects);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
119
command/CODM/sgrelo.js
Normal file
119
command/CODM/sgrelo.js
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
module.exports = {
|
||||||
|
name: "sgrelo",
|
||||||
|
description: "Calculate reload time for shotgun",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "gun",
|
||||||
|
description: "Gun name",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, 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[0]);
|
||||||
|
|
||||||
|
if (err !== "") {
|
||||||
|
interaction.followUp(err);
|
||||||
|
} else if (wrn !== "") {
|
||||||
|
interaction.followUp({ content: wrn + "\n" + msg });
|
||||||
|
} else {
|
||||||
|
interaction.followUp({ content: msg });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
302
command/CODM/stats.js
Normal file
302
command/CODM/stats.js
Normal file
|
@ -0,0 +1,302 @@
|
||||||
|
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",
|
||||||
|
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);
|
||||||
|
const repEmb = statsHandler(args.join(" ").replace("\n", " "));
|
||||||
|
if (hasError) {
|
||||||
|
interaction.followUp({ 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 };
|
||||||
|
}
|
||||||
|
interaction.followUp({ 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: "[OUTDATED] All data courtesy of Project Lighthouse 2.0 and CoDM Research Crew",
|
||||||
|
icon_url:
|
||||||
|
"https://media.discordapp.net/attachments/735590814662656102/806960573753327657/cc.png?width=638&height=638",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
|
@ -12,21 +12,23 @@ module.exports = {
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction) => {
|
||||||
try {
|
try {
|
||||||
console.log(interaction.options.getBoolean("choice"));
|
|
||||||
const user = await client.data.getUser(interaction.user.id);
|
const user = await client.data.getUser(interaction.user.id);
|
||||||
const guild = await client.data.getGuild(interaction.guild.id);
|
const guild = await client.data.getGuild(interaction.guild.id);
|
||||||
if (interaction.options.getBoolean("choice") == true) {
|
if (interaction.options.getBoolean("choice") == true) {
|
||||||
if (guild.Premium == true) {
|
if (guild.Premium == true) {
|
||||||
return client.serr(interaction, "Config", "premium", 506);
|
interaction.followUp({ content: "This server is already premium" });
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(user.Tier == 1 && user.PremiumServers.length >= 5) ||
|
(user.Tier == 1 && user.PremiumServers.length >= 5) ||
|
||||||
(user.Tier == 2 && user.PremiumServers.length >= 2) ||
|
(user.Tier == 2 && user.PremiumServers.length >= 2) ||
|
||||||
(user.Tier == 3 && user.PremiumServers.length >= 0)
|
(user.Tier == 3 && user.PremiumServers.length >= 0)
|
||||||
) {
|
) {
|
||||||
return client.serr(interaction, "Config", "premium", 505);
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"You have already reached the maximum amount of premium servers",
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
await client.data.setPremium(interaction.guild.id, "true");
|
await client.data.setPremium(interaction.guild.id, "true");
|
||||||
await client.data.pushGuild(
|
await client.data.pushGuild(
|
||||||
|
@ -50,7 +52,7 @@ module.exports = {
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
client.channels.cache.get(client.ServerLog).send({
|
client.channels.cache.get(client.config.ServerLog).send({
|
||||||
embeds: [
|
embeds: [
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setTitle("New Premium Server")
|
.setTitle("New Premium Server")
|
||||||
|
@ -68,11 +70,14 @@ module.exports = {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (guild.Premium == false) {
|
if (guild.Premium == false) {
|
||||||
return client.serr(interaction, "Config", "premium", 507);
|
interaction.followUp({ content: "This server isn't premium yet" });
|
||||||
}
|
}
|
||||||
if (!user.PremiumServers.includes(interaction.guild.id))
|
if (!user.PremiumServers.includes(interaction.guild.id)) {
|
||||||
return client.serr(interaction, "Config", "premium", 509);
|
interaction.followUp({
|
||||||
else {
|
content:
|
||||||
|
"You can't remove due to you aren't the person who made the server premium",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
await client.data.setPremium(interaction.guild.id, "false");
|
await client.data.setPremium(interaction.guild.id, "false");
|
||||||
await client.data.pushGuild(
|
await client.data.pushGuild(
|
||||||
interaction.user.id,
|
interaction.user.id,
|
||||||
|
@ -94,7 +99,7 @@ module.exports = {
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
client.channels.cache.get(client.ServerLog).send({
|
client.channels.cache.get(client.config.ServerLog).send({
|
||||||
embeds: [
|
embeds: [
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setTitle("Premium Server Removed")
|
.setTitle("Premium Server Removed")
|
||||||
|
@ -113,7 +118,7 @@ module.exports = {
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
return client.serr(interaction, "Config", "premium", 999);
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,220 +0,0 @@
|
||||||
const starboardClient = require("../../client/StarboardClient");
|
|
||||||
module.exports = {
|
|
||||||
name: "set",
|
|
||||||
description: "Configure settings for the server",
|
|
||||||
UserPerms: ["ADMINISTRATOR"],
|
|
||||||
category: "Config",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "muterole",
|
|
||||||
description: "Set mute role for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 8,
|
|
||||||
name: "role",
|
|
||||||
description: "The role for muted users",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "prefix",
|
|
||||||
description: "Set prefix for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "prefix",
|
|
||||||
description: "The prefix for the server",
|
|
||||||
required: true,
|
|
||||||
choices: [],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "welcome",
|
|
||||||
description: "Set welcome channel for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel for welcome messages",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "goodbye",
|
|
||||||
description: "Set goodbye channel for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel for goodbye messages",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "starboard",
|
|
||||||
description: "Set starboard channel for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel for starboard messages",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 4,
|
|
||||||
name: "starcount",
|
|
||||||
description: "The required amount of star to trigger the starboard",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "chatbot",
|
|
||||||
description: "Set chatbot channel for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel for chatbot messages",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "log",
|
|
||||||
description: "Set log channel for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel for log messages",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 1,
|
|
||||||
name: "level",
|
|
||||||
description: "Set whether level system is activated for the server",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 5,
|
|
||||||
name: "choice",
|
|
||||||
description: "whether level system is activated for the server",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
if (args[0].toLowerCase() === "muterole") {
|
|
||||||
const role = interaction.guild.roles.cache.get(args[1]);
|
|
||||||
if (role.managed) {
|
|
||||||
interaction.followUp({ content: "You must provide a non bot role" });
|
|
||||||
} else {
|
|
||||||
await client.data.setMuterole(interaction.guild.id, args[1]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${role.name}** as the mute role`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "prefix") {
|
|
||||||
await client.data.setPrefix(interaction.guild.id, args[1]);
|
|
||||||
interaction.followUp({ content: `Saved \`${args[1]}\` as the prefix` });
|
|
||||||
} else if (args[0].toLowerCase() === "welcome") {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[1]);
|
|
||||||
if (channel.type !== "GUILD_TEXT")
|
|
||||||
interaction.followUp({ content: "Please provide a text channel" });
|
|
||||||
else {
|
|
||||||
await client.data.setWelcome(interaction.guild.id, args[1]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${channel}** as the welcome channel`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "goodbye") {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[1]);
|
|
||||||
if (channel.type !== "GUILD_TEXT")
|
|
||||||
interaction.followUp({ content: "Please provide a text channel" });
|
|
||||||
else {
|
|
||||||
await client.data.setGoodbye(interaction.guild.id, args[1]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${channel}** as the goodbye channel`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "starboard") {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[1]);
|
|
||||||
if (channel.type !== "GUILD_TEXT")
|
|
||||||
interaction.followUp({ content: "Please provide a text channel" });
|
|
||||||
else {
|
|
||||||
starboardClient.config.guilds.add({
|
|
||||||
id: interaction.guild.id,
|
|
||||||
options: {
|
|
||||||
starCount: args[2],
|
|
||||||
starboardChannel: args[1],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
await client.data.setStarboard(interaction.guild.id, args[1], args[2]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${channel}** as the starboard channel`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "chatbot") {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[1]);
|
|
||||||
if (channel.type !== "GUILD_TEXT")
|
|
||||||
interaction.followUp({ content: "Please provide a text channel" });
|
|
||||||
else {
|
|
||||||
await client.data.setChatbot(interaction.guild.id, args[1]);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${channel}** as the chatbot channel`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "log") {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[1]);
|
|
||||||
if (channel.type !== "GUILD_TEXT")
|
|
||||||
interaction.followUp({ content: "Please provide a text channel" });
|
|
||||||
else {
|
|
||||||
let webhookid;
|
|
||||||
let webhooktoken;
|
|
||||||
await channel
|
|
||||||
.createWebhook(interaction.guild.name, {
|
|
||||||
avatar: interaction.guild.iconURL({ format: "png" }),
|
|
||||||
})
|
|
||||||
.then(webhook => {
|
|
||||||
webhookid = webhook.id;
|
|
||||||
webhooktoken = webhook.token;
|
|
||||||
});
|
|
||||||
await client.data.setLog(
|
|
||||||
interaction.guild.id,
|
|
||||||
channel.id,
|
|
||||||
webhookid,
|
|
||||||
webhooktoken
|
|
||||||
);
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Saved **${channel}** as the log channel`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (args[0].toLowerCase() === "level") {
|
|
||||||
if (args[1]) {
|
|
||||||
await client.data.setGLevel(interaction.guild.id, "true");
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Levelling is enabled in this server now.`,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
await client.data.setGLevel(interaction.guild.id, "false");
|
|
||||||
interaction.followUp({
|
|
||||||
content: `Levelling is disabled in this server now.`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
537
command/Config/settings.js
Normal file
537
command/Config/settings.js
Normal file
|
@ -0,0 +1,537 @@
|
||||||
|
const starboardClient = require("../../client/StarboardClient");
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const fs = require("fs");
|
||||||
|
module.exports = {
|
||||||
|
name: "settings",
|
||||||
|
description: "Configure settings for the server",
|
||||||
|
UserPerms: ["ADMINISTRATOR"],
|
||||||
|
category: "Config",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "muterole",
|
||||||
|
description: "Configure mute role settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 8,
|
||||||
|
name: "role",
|
||||||
|
description: "The role for muted users",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "prefix",
|
||||||
|
description: "Configure prefix settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "prefix",
|
||||||
|
description: "The prefix for the server",
|
||||||
|
required: true,
|
||||||
|
choices: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "welcome",
|
||||||
|
description: "Configure welcome channel settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel for welcome messages",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "goodbye",
|
||||||
|
description: "Configure goodbye channel settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel for goodbye messages",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "starboard",
|
||||||
|
description: "Configure starboard channel settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel for starboard messages",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "starcount",
|
||||||
|
description: "The required amount of star to trigger the starboard",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "chatbot",
|
||||||
|
description: "Configure chatbot channel settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel for chatbotmessages",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "log",
|
||||||
|
description: "Configure log channel settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 7,
|
||||||
|
name: "channel",
|
||||||
|
description: "The channel for log messages",
|
||||||
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 2,
|
||||||
|
name: "enable",
|
||||||
|
description: "Enable commands/category for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "command",
|
||||||
|
description: "To enable commands",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "The command name to be enabled",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "category",
|
||||||
|
description: "To enable categories",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "The category name to be enabled",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "codm",
|
||||||
|
value: "CODM",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "config",
|
||||||
|
value: "Config",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "economy",
|
||||||
|
value: "Economy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "fun",
|
||||||
|
value: "Fun",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "information",
|
||||||
|
value: "Information",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "moderation",
|
||||||
|
value: "Moderation",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "utilities",
|
||||||
|
value: "Utilities",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 2,
|
||||||
|
name: "disable",
|
||||||
|
description: "Disable commands/category for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "command",
|
||||||
|
description: "To disable commands",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "The command name to be disabled",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "category",
|
||||||
|
description: "To disable categories",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "name",
|
||||||
|
description: "The category name to be disabled",
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "codm",
|
||||||
|
value: "CODM",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "config",
|
||||||
|
value: "Config",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "economy",
|
||||||
|
value: "Economy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "fun",
|
||||||
|
value: "Fun",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "information",
|
||||||
|
value: "Information",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "moderation",
|
||||||
|
value: "Moderation",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "utilities",
|
||||||
|
value: "Utilities",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "level",
|
||||||
|
description: "Configure level settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 5,
|
||||||
|
name: "choice",
|
||||||
|
description: "Set whether level system is activated for the server",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "nsfw",
|
||||||
|
description: "Configure nsfw settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 5,
|
||||||
|
name: "choice",
|
||||||
|
description: "Set whether NSFW commands are activated for the server",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "tips",
|
||||||
|
description: "Configure tips settings for the server",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 5,
|
||||||
|
name: "choice",
|
||||||
|
description: "Set whether tips system is activated for the server",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "overall",
|
||||||
|
description: "See overall settings for the server",
|
||||||
|
options: [],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils, data) => {
|
||||||
|
if (args[0].toLowerCase() === "muterole") {
|
||||||
|
const role = interaction.guild.roles.cache.get(args[1]);
|
||||||
|
if (role.managed) {
|
||||||
|
interaction.followUp({ content: "You must provide a non bot role" });
|
||||||
|
} else {
|
||||||
|
await client.data.setMuterole(interaction.guild.id, args[1]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${role.name}** as the mute role`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "prefix") {
|
||||||
|
await client.data.setPrefix(interaction.guild.id, args[1]);
|
||||||
|
interaction.followUp({ content: `Saved \`${args[2]}\` as the prefix` });
|
||||||
|
} else if (args[0].toLowerCase() === "welcome") {
|
||||||
|
const channel = interaction.guild.channels.cache.get(args[1]);
|
||||||
|
if (channel.type !== "GUILD_TEXT") {
|
||||||
|
interaction.followUp({ content: "Please provide a text channel" });
|
||||||
|
} else {
|
||||||
|
await client.data.setWelcome(interaction.guild.id, args[1]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${channel}** as the welcome channel`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "goodbye") {
|
||||||
|
const channel = interaction.guild.channels.cache.get(args[1]);
|
||||||
|
if (channel.type !== "GUILD_TEXT") {
|
||||||
|
interaction.followUp({ content: "Please provide a text channel" });
|
||||||
|
} else {
|
||||||
|
await client.data.setGoodbye(interaction.guild.id, args[1]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${channel}** as the goodbye channel`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "starboard") {
|
||||||
|
const channel = interaction.guild.channels.cache.get(args[1]);
|
||||||
|
if (channel.type !== "GUILD_TEXT") {
|
||||||
|
interaction.followUp({ content: "Please provide a text channel" });
|
||||||
|
} else {
|
||||||
|
starboardClient.config.guilds.add({
|
||||||
|
id: interaction.guild.id,
|
||||||
|
options: {
|
||||||
|
starCount: args[2],
|
||||||
|
starboardChannel: args[1],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await client.data.setStarboard(interaction.guild.id, args[1], args[2]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${channel}** as the starboard channel`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "chatbot") {
|
||||||
|
const channel = interaction.guild.channels.cache.get(args[1]);
|
||||||
|
if (channel.type !== "GUILD_TEXT") {
|
||||||
|
interaction.followUp({ content: "Please provide a text channel" });
|
||||||
|
} else {
|
||||||
|
await client.data.setChatbot(interaction.guild.id, args[1]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${channel}** as the chatbot channel`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "log") {
|
||||||
|
const channel = interaction.guild.channels.cache.get(args[1]);
|
||||||
|
if (channel.type !== "GUILD_TEXT") {
|
||||||
|
interaction.followUp({ content: "Please provide a text channel" });
|
||||||
|
} else {
|
||||||
|
let webhookid;
|
||||||
|
let webhooktoken;
|
||||||
|
await channel
|
||||||
|
.createWebhook(interaction.guild.name, {
|
||||||
|
avatar: interaction.guild.iconURL({ format: "png" }),
|
||||||
|
})
|
||||||
|
.then(webhook => {
|
||||||
|
webhookid = webhook.id;
|
||||||
|
webhooktoken = webhook.token;
|
||||||
|
});
|
||||||
|
await client.data.setLog(
|
||||||
|
interaction.guild.id,
|
||||||
|
channel.id,
|
||||||
|
webhookid,
|
||||||
|
webhooktoken
|
||||||
|
);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Saved **${channel}** as the log channel`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "level") {
|
||||||
|
if (args[1]) {
|
||||||
|
await client.data.setGLevel(interaction.guild.id, "true");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Levelling is enabled in this server now.`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await client.data.setGLevel(interaction.guild.id, "false");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Levelling is disabled in this server now.`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "nsfw") {
|
||||||
|
if (args[1]) {
|
||||||
|
await client.data.setNSFW(interaction.guild.id, "true");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `NSFW is enabled in this server now.`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await client.data.setNSFW(interaction.guild.id, "false");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `NSFW is disabled in this server now.`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "tips") {
|
||||||
|
if (args[1]) {
|
||||||
|
await client.data.setTips(interaction.guild.id, "true");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Tips is enabled in this server now.`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await client.data.setTips(interaction.guild.id, "false");
|
||||||
|
interaction.followUp({
|
||||||
|
content: `Tips is disabled in this server now.`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "enable") {
|
||||||
|
const type = args[1].toLowerCase();
|
||||||
|
const name = args[2].toLowerCase();
|
||||||
|
if (type === "command") {
|
||||||
|
if (!!client.slashCommands.get(name) === false) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `There isn't any command/category named \`${name}\``,
|
||||||
|
});
|
||||||
|
} else if (!data.Guild.Commands.includes(name)) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` command had already been enabled`,
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
data.Guild.Commands.includes(name) &&
|
||||||
|
!!client.slashCommands.get(name) === true
|
||||||
|
) {
|
||||||
|
await client.data.enable(interaction.guild.id, "command", name);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` command is now enabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "category") {
|
||||||
|
const category = fs.readdirSync("./command");
|
||||||
|
if (!data.Guild.Category.includes(args[2])) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` category had already been enabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
data.Guild.Category.includes(args[2]) &&
|
||||||
|
category.includes(args[2])
|
||||||
|
) {
|
||||||
|
await client.data.enable(interaction.guild.id, "category", args[2]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` category is now enabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (args[0].toLowerCase() === "disable") {
|
||||||
|
const type = args[1].toLowerCase();
|
||||||
|
const name = args[2].toLowerCase();
|
||||||
|
if (type === "command") {
|
||||||
|
if (!!client.slashCommands.get(name) === false) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `There isn't any command/category named \`${name}\``,
|
||||||
|
});
|
||||||
|
} else if (data.Guild.Commands.includes(name)) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` command had already been disabled`,
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
!data.Guild.Commands.includes(name) &&
|
||||||
|
!!client.slashCommands.get(name) === true
|
||||||
|
) {
|
||||||
|
await client.data.disable(interaction.guild.id, "command", name);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` command is now disabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (type === "category") {
|
||||||
|
const category = fs.readdirSync("./command");
|
||||||
|
if (data.Guild.Category.includes(args[2])) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` category had already been disabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
!data.Guild.Category.includes(args[2]) &&
|
||||||
|
category.includes(args[2])
|
||||||
|
) {
|
||||||
|
await client.data.disable(interaction.guild.id, "category", args[2]);
|
||||||
|
interaction.followUp({
|
||||||
|
content: `\`${args[2]}\` category is now disabled`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const d = `
|
||||||
|
**Mute Role**: ${
|
||||||
|
interaction.guild.roles.cache.get(data.Guild.Muterole)
|
||||||
|
? interaction.guild.roles.cache.get(data.Guild.Muterole)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Prefix**: ${data.Guild.Prefix ? data.Guild.Prefix : "C."}
|
||||||
|
**Welcome Channel**: ${
|
||||||
|
interaction.guild.channels.cache.get(data.Guild.Welcome)
|
||||||
|
? interaction.guild.channels.cache.get(data.Guild.Welcome)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Goodbye Channel**: ${
|
||||||
|
interaction.guild.channels.cache.get(data.Guild.Goodbye)
|
||||||
|
? interaction.guild.channels.cache.get(data.Guild.Goodbye)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Starboard Channel**: ${
|
||||||
|
interaction.guild.channels.cache.get(data.Guild.Starboard)
|
||||||
|
? interaction.guild.channels.cache.get(data.Guild.Starboard)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Chatbot Channel**: ${
|
||||||
|
interaction.guild.channels.cache.get(data.Guild.Chatbot)
|
||||||
|
? interaction.guild.channels.cache.get(data.Guild.Chatbot)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Log Channel**: ${
|
||||||
|
interaction.guild.channels.cache.get(data.Guild.Log)
|
||||||
|
? interaction.guild.channels.cache.get(data.Guild.Log)
|
||||||
|
: "None"
|
||||||
|
}
|
||||||
|
**Level**: ${data.Guild.Level ? "Enable" : "Disabled"}
|
||||||
|
**NSFW**: ${data.Guild.NSFW ? "Enable" : "Disabled"}
|
||||||
|
**Tips**: ${data.Guild.Tips ? "Enable" : "Disabled"}
|
||||||
|
**Disabled Commands**: ${
|
||||||
|
data.Guild.Commands.length ? data.Guilds.Commands.join(",") : "None"
|
||||||
|
}
|
||||||
|
**Disabled Categories**: ${
|
||||||
|
data.Guild.Category.length ? data.Guilds.Category.join(",") : "None"
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle(`**${interaction.guild.name}** Settings`)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(d);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -8,21 +8,22 @@ module.exports = {
|
||||||
{
|
{
|
||||||
type: 6,
|
type: 6,
|
||||||
name: "user",
|
name: "user",
|
||||||
description: "The user you want to hack",
|
description: "The user you want to see",
|
||||||
required: true,
|
required: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const user = interaction.guild.members.cache.get(args[0]);
|
const user =
|
||||||
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
const bal = await client.bal(user.id);
|
const bal = await client.bal(user.id);
|
||||||
let embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.addField(`${client.currency} Balance`, `**${bal}**`)
|
.setTitle(`${user.displayName}'s Balance`)
|
||||||
|
.setDescription(`**${bal}** ${client.currency}`)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setTitle(`${user.displayName}'s Balance`)
|
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setFooter(`Requested by ${client.author}`);
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
await interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,53 +1,81 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { bool } = require("cath");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "gamble",
|
name: "bet",
|
||||||
usage: "(Number)",
|
usage: "(Number)",
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
description: "Win double amount of coins or lose all coins",
|
description: "Win double amount of coins or lose all coins",
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: 10,
|
type: 4,
|
||||||
name: "cp",
|
name: "cp",
|
||||||
description: "The number of CP you want to bet",
|
description: "The number of CP you want to bet",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args, utils, data) => {
|
run: async (client, interaction, args) => {
|
||||||
const max = 1000000;
|
const max = 100000;
|
||||||
const amt = args[0];
|
let amt = args[0];
|
||||||
if ((await client.bal(interaction.user.id)) < amt) {
|
if (amt > max) amt = max;
|
||||||
return client.serr(interaction, "Economy", "bet", 20);
|
const winamt = amt * 2;
|
||||||
}
|
if (args[0] < 100) {
|
||||||
if (amt > max) {
|
interaction.followUp({
|
||||||
return client.serr(interaction, "Economy", "bet", 101);
|
content: `You need to bet at least 100${client.currency}`,
|
||||||
}
|
});
|
||||||
if (utils.toBool() === true) {
|
} else if ((await client.bal(interaction.user.id)) < amt) {
|
||||||
const winamt = amt * 1;
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else if (bool()) {
|
||||||
|
const multi = (await client.multi(interaction)) / 10 + 1;
|
||||||
await client.add(interaction.user.id, winamt, interaction);
|
await client.add(interaction.user.id, winamt, interaction);
|
||||||
await client.ADDBWin(interaction.user.id);
|
await client.ADDBWin(interaction.user.id);
|
||||||
const abc = new MessageEmbed()
|
const abc = new MessageEmbed()
|
||||||
.setColor("GREEN")
|
.setColor("GREEN")
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTitle(`${interaction.user.username} wins a gamble game`)
|
.setTitle(`${interaction.user.username} wins a gamble game`)
|
||||||
.setDescription(
|
.addFields(
|
||||||
`You win\n**${winamt}**${client.currency}\nYou now have **${
|
{
|
||||||
parseInt(await client.bal(interaction.user.id)) + amt
|
name: "Won",
|
||||||
}**${client.currency}`
|
value: `**${Math.round(winamt * multi)}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "New Balance",
|
||||||
|
value: `**${Math.round(
|
||||||
|
(await client.bal(interaction.user.id)) + winamt * multi
|
||||||
|
)}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Multiplier",
|
||||||
|
value: `x${2 + multi}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
await interaction.followUp({ embeds: [abc] });
|
interaction.followUp({ embeds: [abc] });
|
||||||
} else {
|
} else {
|
||||||
await client.rmv(interaction.user.id, amt);
|
await client.rmv(interaction.user.id, amt);
|
||||||
const cba = new MessageEmbed()
|
const cba = new MessageEmbed()
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTitle(`${interaction.user.username} loses a gamble game`)
|
.setTitle(`${interaction.user.username} loses a gamble game`)
|
||||||
.setDescription(
|
.addFields(
|
||||||
`You lost\n**${amt}**${client.currency}\nYou now have **${
|
{
|
||||||
|
name: "Lost",
|
||||||
|
value: `**${amt}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "New Balance",
|
||||||
|
value: `**${
|
||||||
parseInt(await client.bal(interaction.user.id)) - amt
|
parseInt(await client.bal(interaction.user.id)) - amt
|
||||||
}**${client.currency}`
|
}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
await interaction.followUp({ embeds: [cba] });
|
interaction.followUp({ embeds: [cba] });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
304
command/Economy/blackjack.js
Normal file
304
command/Economy/blackjack.js
Normal file
|
@ -0,0 +1,304 @@
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "blackjack",
|
||||||
|
usage: "(Number)",
|
||||||
|
description: "Play a blackjack game to win money",
|
||||||
|
category: "Economy",
|
||||||
|
timeout: 10000,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "cp",
|
||||||
|
description: "The number of CP you want to give",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
let money = args[0];
|
||||||
|
const max = 100000;
|
||||||
|
if (money > max) money = max;
|
||||||
|
const user = interaction.user;
|
||||||
|
if (money < 100) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You need to blackjack at least 100 ${client.currency}`,
|
||||||
|
});
|
||||||
|
} else if ((await client.bal(user.id)) < money) {
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else {
|
||||||
|
let numCardsPulled = 0;
|
||||||
|
let gameOver = false;
|
||||||
|
const player = {
|
||||||
|
cards: [],
|
||||||
|
score: 0,
|
||||||
|
};
|
||||||
|
const dealer = {
|
||||||
|
cards: [],
|
||||||
|
score: 0,
|
||||||
|
};
|
||||||
|
function getCardsValue(a) {
|
||||||
|
let cardArray = [],
|
||||||
|
sum = 0,
|
||||||
|
i = 0,
|
||||||
|
dk = 10.5,
|
||||||
|
doubleking = "QQ",
|
||||||
|
aceCount = 0;
|
||||||
|
cardArray = a;
|
||||||
|
for (i; i < cardArray.length; i += 1) {
|
||||||
|
if (
|
||||||
|
cardArray[i].rank === "J" ||
|
||||||
|
cardArray[i].rank === "Q" ||
|
||||||
|
cardArray[i].rank === "K"
|
||||||
|
) {
|
||||||
|
sum += 10;
|
||||||
|
} else if (cardArray[i].rank === "A") {
|
||||||
|
sum += 11;
|
||||||
|
aceCount += 1;
|
||||||
|
} else if (cardArray[i].rank === doubleking) {
|
||||||
|
sum += dk;
|
||||||
|
} else {
|
||||||
|
sum += cardArray[i].rank;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (aceCount > 0 && sum > 21) {
|
||||||
|
sum -= 10;
|
||||||
|
aceCount -= 1;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
const deck = {
|
||||||
|
deckArray: [],
|
||||||
|
initialize: function () {
|
||||||
|
let suitArray, rankArray, s, r, n;
|
||||||
|
suitArray = ["b", "d", "g", "s"];
|
||||||
|
rankArray = [2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"];
|
||||||
|
n = 13;
|
||||||
|
|
||||||
|
for (s = 0; s < suitArray.length; s += 1) {
|
||||||
|
for (r = 0; r < rankArray.length; r += 1) {
|
||||||
|
this.deckArray[s * n + r] = {
|
||||||
|
rank: rankArray[r],
|
||||||
|
suit: suitArray[s],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
shuffle: function () {
|
||||||
|
let temp, i, rnd;
|
||||||
|
for (i = 0; i < this.deckArray.length; i += 1) {
|
||||||
|
rnd = Math.floor(Math.random() * this.deckArray.length);
|
||||||
|
temp = this.deckArray[i];
|
||||||
|
this.deckArray[i] = this.deckArray[rnd];
|
||||||
|
this.deckArray[rnd] = temp;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
deck.initialize();
|
||||||
|
deck.shuffle();
|
||||||
|
async function bet(outcome) {
|
||||||
|
if (outcome === "win") {
|
||||||
|
await client.add(user.id, money, interaction);
|
||||||
|
await client.ADDBJWin(interaction.user.id);
|
||||||
|
}
|
||||||
|
if (outcome === "lose") {
|
||||||
|
await client.rmv(user.id, money);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function endMsg(f, msg, cl, dealerC) {
|
||||||
|
let cardsMsg = "";
|
||||||
|
player.cards.forEach(function (card) {
|
||||||
|
const emAR = ["♥", "♦", "♠", "♣"];
|
||||||
|
const t = emAR[Math.floor(Math.random() * emAR.length)];
|
||||||
|
cardsMsg += "[`" + t + card.rank.toString();
|
||||||
|
if (card.suit == "d1") cardsMsg += "♥";
|
||||||
|
if (card.suit == "d2") cardsMsg += "♦";
|
||||||
|
if (card.suit == "d3") cardsMsg += "♠";
|
||||||
|
if (card.suit == "d4") cardsMsg += "♣";
|
||||||
|
cardsMsg += "`](https://cath.gq/) ";
|
||||||
|
});
|
||||||
|
cardsMsg += " > " + player.score.toString();
|
||||||
|
|
||||||
|
let dealerMsg = "";
|
||||||
|
if (!dealerC) {
|
||||||
|
const emAR = ["♥", "♦", "♠", "♣"];
|
||||||
|
const t = emAR[Math.floor(Math.random() * emAR.length)];
|
||||||
|
dealerMsg = "[`" + t + dealer.cards[0].rank.toString();
|
||||||
|
if (dealer.cards[0].suit == "d1") dealerMsg += "♥";
|
||||||
|
if (dealer.cards[0].suit == "d2") dealerMsg += "♦";
|
||||||
|
if (dealer.cards[0].suit == "d3") dealerMsg += "♠";
|
||||||
|
if (dealer.cards[0].suit == "d4") dealerMsg += "♣";
|
||||||
|
dealerMsg += " ? ?`](https://cath.gq/)";
|
||||||
|
} else {
|
||||||
|
dealerMsg = "";
|
||||||
|
dealer.cards.forEach(function (card) {
|
||||||
|
const emAR = ["♥", "♦", "♠", "♣"];
|
||||||
|
const t = emAR[Math.floor(Math.random() * emAR.length)];
|
||||||
|
dealerMsg += "[`" + t + card.rank.toString();
|
||||||
|
if (card.suit == "d1") dealerMsg += "♥";
|
||||||
|
if (card.suit == "d2") dealerMsg += "♦";
|
||||||
|
if (card.suit == "d3") dealerMsg += "♠";
|
||||||
|
if (card.suit == "d4") dealerMsg += "♣";
|
||||||
|
dealerMsg += "`](https://cath.gq/) ";
|
||||||
|
});
|
||||||
|
dealerMsg += " > " + dealer.score.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
const gambleEmbed = new Discord.MessageEmbed()
|
||||||
|
.setColor(cl || client.color)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTitle(interaction.user.username + `'s Blackjack game`)
|
||||||
|
.addField("You", cardsMsg, true)
|
||||||
|
.addField("NYX", dealerMsg, true)
|
||||||
|
.addField(f, msg);
|
||||||
|
interaction.followUp({ embeds: [gambleEmbed] });
|
||||||
|
}
|
||||||
|
|
||||||
|
async function endGame() {
|
||||||
|
if (player.score === 21) {
|
||||||
|
bet("win");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Win! You got 21!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`GREEN`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (player.score > 21) {
|
||||||
|
bet("lose");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Lost! You reached over 21!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`RED`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (dealer.score === 21) {
|
||||||
|
bet("lose");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Lost! The dealer got 21!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`RED`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (dealer.score > 21) {
|
||||||
|
bet("win");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Win! NYX reached over 21!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`GREEN`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
dealer.score >= 17 &&
|
||||||
|
player.score > dealer.score &&
|
||||||
|
player.score < 21
|
||||||
|
) {
|
||||||
|
bet("win");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Win! You defeated NYX!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`GREEN`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
dealer.score >= 17 &&
|
||||||
|
player.score < dealer.score &&
|
||||||
|
dealer.score < 21
|
||||||
|
) {
|
||||||
|
bet("lose");
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(
|
||||||
|
`Lost! NYX won!`,
|
||||||
|
`NYX had ${dealer.score.toString()}`,
|
||||||
|
`RED`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
dealer.score >= 17 &&
|
||||||
|
player.score === dealer.score &&
|
||||||
|
dealer.score < 21
|
||||||
|
) {
|
||||||
|
gameOver = true;
|
||||||
|
await endMsg(`Tie!`, `NYX had ${dealer.score.toString()}`, `RED`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dealerDraw() {
|
||||||
|
dealer.cards.push(deck.deckArray[numCardsPulled]);
|
||||||
|
dealer.score = getCardsValue(dealer.cards);
|
||||||
|
numCardsPulled += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function newGame() {
|
||||||
|
hit();
|
||||||
|
hit();
|
||||||
|
dealerDraw();
|
||||||
|
endGame();
|
||||||
|
}
|
||||||
|
|
||||||
|
function hit() {
|
||||||
|
player.cards.push(deck.deckArray[numCardsPulled]);
|
||||||
|
player.score = getCardsValue(player.cards);
|
||||||
|
|
||||||
|
numCardsPulled += 1;
|
||||||
|
if (numCardsPulled > 2) {
|
||||||
|
endGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function stand() {
|
||||||
|
while (dealer.score < 17) {
|
||||||
|
dealerDraw();
|
||||||
|
}
|
||||||
|
endGame();
|
||||||
|
}
|
||||||
|
newGame();
|
||||||
|
async function loop() {
|
||||||
|
if (gameOver) return;
|
||||||
|
|
||||||
|
endMsg(
|
||||||
|
"To hit type `h`, for stand type `s`",
|
||||||
|
`GoodLuck ;)`,
|
||||||
|
client.color
|
||||||
|
);
|
||||||
|
|
||||||
|
const filter = m => m.author.id === interaction.user.id;
|
||||||
|
interaction.channel
|
||||||
|
.awaitMessages({ filter, max: 1, time: 1200000, errors: ["time"] })
|
||||||
|
.then(interaction => {
|
||||||
|
interaction = interaction.first();
|
||||||
|
if (
|
||||||
|
interaction.content.toLowerCase() === "h" ||
|
||||||
|
interaction.content.toLowerCase() === "hit"
|
||||||
|
) {
|
||||||
|
hit();
|
||||||
|
loop();
|
||||||
|
return;
|
||||||
|
} else if (
|
||||||
|
interaction.content.toLowerCase() === "s" ||
|
||||||
|
interaction.content.toLowerCase() === "stand"
|
||||||
|
) {
|
||||||
|
stand();
|
||||||
|
loop();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
bet("lose");
|
||||||
|
endMsg("Invalid response", `You lost ${money}`, "RED");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(_ => {
|
||||||
|
interaction.channel.send({ content: "Lost!!" });
|
||||||
|
bet("lose");
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
await loop();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
103
command/Economy/buy.js
Normal file
103
command/Economy/buy.js
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const inventory = require("../../models/econ");
|
||||||
|
const items = require("../../util/Data/item.json");
|
||||||
|
module.exports = {
|
||||||
|
name: "buy",
|
||||||
|
usage: "(Item)",
|
||||||
|
description: "Buy something from the shop",
|
||||||
|
category: "Economy",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "item",
|
||||||
|
description: "The item to buy",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "amount",
|
||||||
|
description: "The amount to buy",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const itemToBuy = args[0].toLowerCase();
|
||||||
|
const validItem = !!items.find(item => item.aliases.includes(itemToBuy));
|
||||||
|
const num = args[1];
|
||||||
|
if (num < 0) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You need to buy at least 1 item`,
|
||||||
|
});
|
||||||
|
} else if (!validItem) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"The item is not valid\nIf you want to get information about the item, use `/shop`",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const itemName = items.find(item =>
|
||||||
|
item.aliases.includes(itemToBuy)
|
||||||
|
).name;
|
||||||
|
const dbName = items.find(item =>
|
||||||
|
item.aliases.includes(itemToBuy)
|
||||||
|
).dbname;
|
||||||
|
const itemPrice = items.find(item =>
|
||||||
|
item.aliases.includes(itemToBuy)
|
||||||
|
).price;
|
||||||
|
const itemEmoji = items.find(item =>
|
||||||
|
item.aliases.includes(itemToBuy)
|
||||||
|
).emoji;
|
||||||
|
const buyable = items.find(item =>
|
||||||
|
item.aliases.includes(itemToBuy)
|
||||||
|
).buyable;
|
||||||
|
if ((await client.bal(interaction.user.id)) < itemPrice * num) {
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else if (!buyable) {
|
||||||
|
interaction.followUp({ content: `That item isn't buyable` });
|
||||||
|
} else {
|
||||||
|
const params = { User: interaction.user.id };
|
||||||
|
inventory.findOne(params, async (err, data) => {
|
||||||
|
if (data) {
|
||||||
|
const hasItem = Object.keys(data.Inventory).includes(dbName);
|
||||||
|
if (!hasItem) {
|
||||||
|
data.Inventory[dbName] += num;
|
||||||
|
} else {
|
||||||
|
data.Inventory[dbName] += num;
|
||||||
|
}
|
||||||
|
await inventory.findOneAndUpdate(params, data);
|
||||||
|
} else {
|
||||||
|
new inventory({
|
||||||
|
User: interaction.user.id,
|
||||||
|
Inventory: {
|
||||||
|
[dbName]: num,
|
||||||
|
},
|
||||||
|
}).save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(
|
||||||
|
`**${
|
||||||
|
interaction.user.username
|
||||||
|
}** buys ** ${num} ${itemEmoji}${itemName}** for **${
|
||||||
|
itemPrice * num
|
||||||
|
}**${client.currency}`
|
||||||
|
)
|
||||||
|
.setColor("GREEN")
|
||||||
|
.setURL(client.web)
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
await client.rmv(interaction.user.id, itemPrice * num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -5,30 +5,27 @@ module.exports = {
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
timeout: 1000 * 60 * 60 * 24,
|
timeout: 1000 * 60 * 60 * 24,
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
var money;
|
let money;
|
||||||
const user = await client.data.getUser(interaction.user.id);
|
const user = await client.data.getUser(interaction.user.id);
|
||||||
if (user) {
|
if (user) {
|
||||||
if (user.Premium == true) {
|
if (user.Premium == true) {
|
||||||
money = 20000;
|
money = 20000;
|
||||||
let pre_embed = new MessageEmbed()
|
const pre_embed = new MessageEmbed()
|
||||||
.setAuthor(
|
.setTitle(`${user.username}'s profile`)
|
||||||
interaction.member.user.tag,
|
|
||||||
interaction.user.displayAvatarURL({ dyanmic: true })
|
|
||||||
)
|
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`**Here is your daily ${money}${client.currency}!\nThanks for supporting Cath!**`
|
`Here is your daily **${money}** ${client.currency}\nYou can use this again in 24hrs`
|
||||||
)
|
)
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
await client.add(interaction.user.id, money, interaction);
|
await client.add(interaction.user.id, money, interaction);
|
||||||
return await interaction.followUp({ embeds: [pre_embed] });
|
return interaction.followUp({ embeds: [pre_embed] });
|
||||||
} else {
|
} else {
|
||||||
money = 10000;
|
money = 10000;
|
||||||
let norm_embed = new MessageEmbed()
|
const norm_embed = new MessageEmbed()
|
||||||
.setAuthor(
|
.setAuthor(
|
||||||
interaction.member.user.tag,
|
interaction.user.tag,
|
||||||
interaction.user.displayAvatarURL({ dyanmic: true })
|
interaction.user.displayAvatarURL({ dyanmic: true })
|
||||||
)
|
)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
@ -36,10 +33,10 @@ module.exports = {
|
||||||
)
|
)
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
await client.add(interaction.user.id, money, interaction);
|
await client.add(interaction.user.id, money, interaction);
|
||||||
return await interaction.followUp({ embeds: [norm_embed] });
|
return interaction.followUp({ embeds: [norm_embed] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
name: "drop",
|
|
||||||
usage: "{Channel} (Number)",
|
|
||||||
description: "Drops money to a channel",
|
|
||||||
category: "Economy",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel you want to drop",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 4,
|
|
||||||
name: "cp",
|
|
||||||
description: "The amount of CP to drop",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[0]);
|
|
||||||
const coinsAmount = args[1];
|
|
||||||
if ((await client.bal(interaction.user.id)) < coinsAmount) {
|
|
||||||
return client.serr(interaction, "Economy", "drop", 20);
|
|
||||||
}
|
|
||||||
const filter = msg =>
|
|
||||||
msg.guild.id === interaction.guild.id && msg.content === `claim`;
|
|
||||||
interaction.followUp({
|
|
||||||
content: "The drop has started in " + channel.toString(),
|
|
||||||
});
|
|
||||||
channel.send({
|
|
||||||
content: `${interaction.user.username} has dropped a ${client.currency} bomb! Type \`claim\` to claim ${client.currency}!!`,
|
|
||||||
});
|
|
||||||
client.rmv(interaction.user.id, parseInt(coinsAmount));
|
|
||||||
channel.awaitMessages({ filter, max: 1, time: 60000 }).then(async msg => {
|
|
||||||
const id = msg.first().author.id;
|
|
||||||
const coinsToClaim = parseInt(coinsAmount);
|
|
||||||
await client.add(id, coinsToClaim, interaction);
|
|
||||||
msg.first().reply({
|
|
||||||
content: `Congratultions! You have claimed **${coinsToClaim}** ${client.currency}!`,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
136
command/Economy/gift.js
Normal file
136
command/Economy/gift.js
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const inventory = require("../../models/econ");
|
||||||
|
const items = require("../../util/Data/item.json");
|
||||||
|
module.exports = {
|
||||||
|
name: "gift",
|
||||||
|
timeout: 5000,
|
||||||
|
usage: "(User) (Item)",
|
||||||
|
description: "Gift item to an user",
|
||||||
|
category: "Economy",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to gift",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "item",
|
||||||
|
description: "The item to gift",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "amount",
|
||||||
|
description: "The amount to gift",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
if (user.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't gift yourself items" });
|
||||||
|
}
|
||||||
|
const itemToGift = args[1].toLowerCase();
|
||||||
|
const number = args[2];
|
||||||
|
const validItem = !!items.find(item => item.aliases.includes(itemToGift));
|
||||||
|
if (number < 0) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You need to gift at least 1 item`,
|
||||||
|
});
|
||||||
|
} else if (!validItem) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"The item is not valid\nIf you want to get information about the item, use `/shop`",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const params = {
|
||||||
|
User: interaction.user.id,
|
||||||
|
};
|
||||||
|
const param = {
|
||||||
|
User: user.id,
|
||||||
|
};
|
||||||
|
const itemName = items.find(item =>
|
||||||
|
item.aliases.includes(itemToGift)
|
||||||
|
).name;
|
||||||
|
const dbName = items.find(item =>
|
||||||
|
item.aliases.includes(itemToGift)
|
||||||
|
).dbname;
|
||||||
|
const itemEmoji = items.find(item =>
|
||||||
|
item.aliases.includes(itemToGift)
|
||||||
|
).emoji;
|
||||||
|
inventory.findOne(params, async (err, data) => {
|
||||||
|
if (data.Inventory) {
|
||||||
|
const hasItem = Object.keys(data.Inventory).includes(dbName);
|
||||||
|
if (hasItem) {
|
||||||
|
if (data.Inventory[dbName] <= number) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You don't have enough items to gift`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
data.Inventory[dbName] -= number;
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setColor(client.color)
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(
|
||||||
|
`**${interaction.user.username}** has given **${
|
||||||
|
user.user.username
|
||||||
|
} ${number.toLocaleString()} ${itemEmoji}${itemName}**`
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
user
|
||||||
|
.send({
|
||||||
|
content: `**${
|
||||||
|
interaction.user.tag
|
||||||
|
}** has given you **${number.toLocaleString()} ${itemEmoji}${itemName}** in **${
|
||||||
|
interaction.guild.name
|
||||||
|
}**`,
|
||||||
|
})
|
||||||
|
.catch(e => {});
|
||||||
|
await inventory.findOneAndUpdate(params, data);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You don't have enough items to gift`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You don't have enough items to gift`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
inventory.findOne(param, async (err, data) => {
|
||||||
|
if (data?.Inventory) {
|
||||||
|
const hasItem = Object.keys(data.Inventory).includes(dbName);
|
||||||
|
if (!hasItem) {
|
||||||
|
data.Inventory[dbName] += number;
|
||||||
|
} else {
|
||||||
|
data.Inventory[dbName] += number;
|
||||||
|
}
|
||||||
|
await inventory.findOneAndUpdate(param, data);
|
||||||
|
} else {
|
||||||
|
new inventory({
|
||||||
|
User: user.id,
|
||||||
|
CP: 0,
|
||||||
|
Inventory: {
|
||||||
|
[dbName]: number,
|
||||||
|
},
|
||||||
|
}).save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
72
command/Economy/give.js
Normal file
72
command/Economy/give.js
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
const m = require("../../models/econ");
|
||||||
|
module.exports = {
|
||||||
|
name: "give",
|
||||||
|
timeout: 5000,
|
||||||
|
usage: "(User) (Number)",
|
||||||
|
description: "Give money to an user",
|
||||||
|
category: "Economy",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to give",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "cp",
|
||||||
|
description: "The number of CP you want to give",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const max = 300000;
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
let parsed = args[1];
|
||||||
|
if (parsed > max) parsed = max;
|
||||||
|
if (parsed < 100) {
|
||||||
|
interaction.followUp({
|
||||||
|
content: `You need to give at least 100 ${client.currency}`,
|
||||||
|
});
|
||||||
|
} else if (user.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't give yourself money" });
|
||||||
|
} else if (parsed > (await client.bal(interaction.user.id))) {
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else {
|
||||||
|
m.findOne({ User: interaction.user.id }, async (err, data) => {
|
||||||
|
if (data) {
|
||||||
|
data.CP -= parsed;
|
||||||
|
data.save();
|
||||||
|
} else {
|
||||||
|
client.createProfile(interaction.user.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
m.findOne({ User: user.id }, async (err, data) => {
|
||||||
|
if (data) {
|
||||||
|
data.CP += parsed;
|
||||||
|
data.save();
|
||||||
|
} else {
|
||||||
|
new m({ CP: parsed });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
interaction.followUp({
|
||||||
|
content: `**${interaction.user.username}** gave **${
|
||||||
|
user.user.username
|
||||||
|
}** **${parsed.toLocaleString()}** coins, you now have **${(
|
||||||
|
(await client.bal(interaction.user.id)) - parsed
|
||||||
|
).toLocaleString()}** ${client.currency} and they have **${(
|
||||||
|
(await client.bal(user.id)) + parsed
|
||||||
|
).toLocaleString()}** ${client.currency}`,
|
||||||
|
});
|
||||||
|
user
|
||||||
|
.send({
|
||||||
|
content: `**${
|
||||||
|
interaction.user.tag
|
||||||
|
}** gave you **${parsed.toLocaleString()}** coins in **${
|
||||||
|
interaction.guild.name
|
||||||
|
}**`,
|
||||||
|
})
|
||||||
|
.catch();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
120
command/Economy/gun.js
Normal file
120
command/Economy/gun.js
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const e = require("../../models/econ");
|
||||||
|
const list = require("../../util/Data/gun.json");
|
||||||
|
module.exports = {
|
||||||
|
name: "gun",
|
||||||
|
description: "Configure Weapon Master System settings",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "select",
|
||||||
|
description: "Select the gun for the game",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
name: "gun",
|
||||||
|
description: "The gun you want to select",
|
||||||
|
type: 3,
|
||||||
|
required: true,
|
||||||
|
choices: [
|
||||||
|
{
|
||||||
|
name: "kuk69",
|
||||||
|
value: "kuku69",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "nani45",
|
||||||
|
value: "nani45",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "list",
|
||||||
|
description: "See the information for the guns",
|
||||||
|
options: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 1,
|
||||||
|
name: "info",
|
||||||
|
description: "See the stats of your gun",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
if (args[0] === "list") {
|
||||||
|
const lists = list.map(value => {
|
||||||
|
return `**${value.emoji} ${value.name}**\n**Description**: ${value.description}`;
|
||||||
|
});
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setDescription(lists.join("\n\n"));
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} else if (args[0] === "select") {
|
||||||
|
if (args[1] == "kuku69") {
|
||||||
|
await e.findOne({ User: interaction.user.id }, async (err, data) => {
|
||||||
|
if (!data) {
|
||||||
|
new e({
|
||||||
|
User: interaction.user.id,
|
||||||
|
Gun: {
|
||||||
|
Name: "kuku69",
|
||||||
|
Rank: "Iron",
|
||||||
|
Kills: 0,
|
||||||
|
XP: 0,
|
||||||
|
Level: 1,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
data.Gun.Name = "kuku69";
|
||||||
|
await data.save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
interaction.followUp({ content: "**Your current gun:\nkuku69**" });
|
||||||
|
}
|
||||||
|
if (args[1] == "nani45") {
|
||||||
|
await e.findOne({ User: interaction.user.id }, async (err, data) => {
|
||||||
|
if (!data) {
|
||||||
|
new e({
|
||||||
|
User: interaction.user.id,
|
||||||
|
Gun: {
|
||||||
|
Name: "nani45",
|
||||||
|
Rank: "Iron",
|
||||||
|
Kills: 0,
|
||||||
|
XP: 0,
|
||||||
|
Level: 1,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
data.Gun.Name = "nani45";
|
||||||
|
await data.save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
interaction.followUp({ content: "**Your current gun:\nnani45**" });
|
||||||
|
}
|
||||||
|
} else if (args[0] === "info") {
|
||||||
|
await e.findOne({ User: interaction.user.id }, async (err, data) => {
|
||||||
|
if (!data?.Gun.Name) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"You don't have a gun yet! Please use `/gun select` to select your gun!",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const link = list.find(a => a.name === data.Gun.Name).link;
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setThumbnail(link)
|
||||||
|
.setTimestamp()
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.addField("Name", data.Gun.Name, true)
|
||||||
|
.addField("Rank", data.Gun.Rank, true)
|
||||||
|
.addField("XP", data.Gun.XP.toString(), true);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,6 +1,7 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const inv = require("../../models/econ");
|
const inv = require("../../models/econ");
|
||||||
const util = require("../../util/pagination/pagination");
|
const { Pagination } = require("cath");
|
||||||
|
const items = require("../../util/Data/item.json");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "inventory",
|
name: "inventory",
|
||||||
description: "Check the inventory of an user",
|
description: "Check the inventory of an user",
|
||||||
|
@ -15,21 +16,29 @@ module.exports = {
|
||||||
required: false,
|
required: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args, data, utils) => {
|
run: async (client, interaction, args) => {
|
||||||
|
const util = new Pagination();
|
||||||
const user =
|
const user =
|
||||||
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
inv.findOne({ User: user.id }, async (err, data) => {
|
inv.findOne({ User: user.id }, async (err, data) => {
|
||||||
if (data) {
|
if (data) {
|
||||||
if (!data.Inventory)
|
if (!data.Inventory) {
|
||||||
return interaction.followUp({
|
return interaction.followUp({
|
||||||
content: `User doesn't have any data`,
|
content: `User doesn't have any data`,
|
||||||
});
|
});
|
||||||
const mappedData = Object.keys(data.Inventory).map(key => {
|
}
|
||||||
|
const mappedData = Object.keys(data.Inventory)
|
||||||
|
.map(key => {
|
||||||
if (data.Inventory[key] == 0) {
|
if (data.Inventory[key] == 0) {
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
const name = items.find(val => val.dbname === key).name;
|
||||||
|
const emoji = items.find(val => val.dbname === key).emoji;
|
||||||
|
const type = items.find(val => val.dbname === key).type;
|
||||||
|
return `\n**${emoji}${name}** — ${data.Inventory[key]}\n **Type**: \`${type}\``;
|
||||||
}
|
}
|
||||||
return `\n**${key}** — ${data.Inventory[key]}`;
|
})
|
||||||
});
|
.filter(e => e !== undefined);
|
||||||
if (mappedData.length == 0) {
|
if (mappedData.length == 0) {
|
||||||
return interaction.followUp({
|
return interaction.followUp({
|
||||||
content: `User doesn't have any data`,
|
content: `User doesn't have any data`,
|
||||||
|
@ -44,13 +53,15 @@ module.exports = {
|
||||||
.setFooter(`Page 1 of ${c.length}`);
|
.setFooter(`Page 1 of ${c.length}`);
|
||||||
try {
|
try {
|
||||||
const msg = await interaction.followUp({ embeds: [embed] });
|
const msg = await interaction.followUp({ embeds: [embed] });
|
||||||
if (mappedData.length > 5)
|
if (mappedData.length > 5) {
|
||||||
await util.pagination(msg, interaction.user, c);
|
await util.pagination(msg, interaction.user, c);
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
} else
|
} else {
|
||||||
return interaction.followUp({ content: `User doesn't have any data` });
|
return interaction.followUp({ content: `User doesn't have any data` });
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
const Levels = require("discord-xp");
|
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "leaderboard",
|
|
||||||
timeout: 5000,
|
|
||||||
description: "Check the leaderboard of a server",
|
|
||||||
category: "Economy",
|
|
||||||
Level: true,
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const rawLeaderboard = await Levels.fetchLeaderboard(
|
|
||||||
interaction.guild.id,
|
|
||||||
10
|
|
||||||
);
|
|
||||||
if (rawLeaderboard.length < 1)
|
|
||||||
return interaction.followUp({ content: "There isn't any data" });
|
|
||||||
const leaderboard = await Levels.computeLeaderboard(
|
|
||||||
client,
|
|
||||||
rawLeaderboard,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
const lb = leaderboard.map(
|
|
||||||
e =>
|
|
||||||
`**${e.position}**. ${e.username}#${e.discriminator} Level: ${
|
|
||||||
e.level
|
|
||||||
} XP: ${e.xp.toLocaleString()}`
|
|
||||||
);
|
|
||||||
const embed = new MessageEmbed()
|
|
||||||
.setTitle(`**Leaderboard for ${interaction.guild.name}**`)
|
|
||||||
.setDescription(`\n${lb.join("\n")}`)
|
|
||||||
.setFooter(
|
|
||||||
`Requested by ${interaction.user.tag}`,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
|
||||||
.setColor(client.color);
|
|
||||||
interaction.followUp({ embeds: [embed] });
|
|
||||||
},
|
|
||||||
};
|
|
44
command/Economy/multiplier.js
Normal file
44
command/Economy/multiplier.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "multiplier",
|
||||||
|
description: "Displaying your/user's multiplier.",
|
||||||
|
category: "Economy",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to see",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
let i = "";
|
||||||
|
let e = 0;
|
||||||
|
const user =
|
||||||
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
|
const data = await client.data.getUser(
|
||||||
|
args[0] ? args[0] : interaction.member.id
|
||||||
|
);
|
||||||
|
if (data?.Premium) {
|
||||||
|
i += "\nPremium User - 25%\n";
|
||||||
|
e += 25;
|
||||||
|
}
|
||||||
|
if (client.path.includes(interaction.guild.id)) {
|
||||||
|
i += "NYX Partnered Server - 15%\n";
|
||||||
|
e += 15;
|
||||||
|
}
|
||||||
|
if (interaction.channel.name.toLowerCase().includes("nyx")) {
|
||||||
|
i += "Channel Name includes NYX - 10%\n";
|
||||||
|
e += 10;
|
||||||
|
}
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.addField(`**Total Multiplier: ${e}%** (Maximum: 50%)`, i)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setURL(client.web)
|
||||||
|
.setTitle(`${user.displayName}'s Multiplier`)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
|
@ -12,7 +12,7 @@ module.exports = {
|
||||||
required: false,
|
required: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args, data, utils) => {
|
run: async (client, interaction, args) => {
|
||||||
const user =
|
const user =
|
||||||
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
const bjwin = await client.bjWin(user.user.id);
|
const bjwin = await client.bjWin(user.user.id);
|
||||||
|
@ -22,25 +22,28 @@ module.exports = {
|
||||||
const bal = await client.bal(user.user.id);
|
const bal = await client.bal(user.user.id);
|
||||||
const multi = await client.multi(interaction);
|
const multi = await client.multi(interaction);
|
||||||
const game = new MessageEmbed()
|
const game = new MessageEmbed()
|
||||||
.setFooter(
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
`Requested by ${user.user.tag}`,
|
|
||||||
user.user.displayAvatarURL({ dynamic: true, size: 4096 })
|
|
||||||
)
|
|
||||||
.setColor("7196ef")
|
.setColor("7196ef")
|
||||||
.setTitle(`${user.displayName}'s profile`)
|
.setTitle(`${user.displayName}'s profile`)
|
||||||
.addField(
|
.setDescription(`Current Balance ${bal} ${client.currency}`)
|
||||||
"**Stats**\n",
|
.setURL(client.web)
|
||||||
`🃏 Blackjack wins: \`${bjwin}\`\n` +
|
.addFields(
|
||||||
`🎰 Slots wins: \`${swin}\`\n` +
|
{
|
||||||
`🕹 Bet wins: \`${bwin}\`\n` +
|
name: "Basic",
|
||||||
`⌨️Commands used: \`${cmdused}\`\n` +
|
value: `
|
||||||
`Totalwins: \`${bjwin + swin + bwin}\``,
|
Total Commands Used \`${cmdused}\`\n
|
||||||
true
|
${client.xp} Multiplier \`${`1.${multi}x`}\``,
|
||||||
)
|
inline: true,
|
||||||
.addField(
|
},
|
||||||
"**Balance**\n",
|
{
|
||||||
`💲CP: \`${bal}\`\n` + `➕Multiplier: \`${`1.${multi}x`}\``
|
name: "🎊 Wins",
|
||||||
|
value: `Overall ❯ \`${bjwin + swin + bwin}\`
|
||||||
|
🃏 Blackjack ❯ \`${bjwin}\`\n
|
||||||
|
🎰 Slots ❯ \`${swin}\`\n
|
||||||
|
🕹 Bets ❯ \`${bwin}\`\n`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
await interaction.followUp({ embeds: [game] });
|
interaction.followUp({ embeds: [game] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,7 +3,8 @@ module.exports = {
|
||||||
name: "rich",
|
name: "rich",
|
||||||
description: "Displaying top 10 richest users.",
|
description: "Displaying top 10 richest users.",
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
run: async (client, interaction, args) => {
|
timeout: 4000,
|
||||||
|
run: async (client, interaction) => {
|
||||||
const collection = new Collection();
|
const collection = new Collection();
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
interaction.guild.members.cache.map(async member => {
|
interaction.guild.members.cache.map(async member => {
|
||||||
|
@ -18,25 +19,26 @@ module.exports = {
|
||||||
: null;
|
: null;
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
if (!collection)
|
if (!collection) {
|
||||||
return await interaction.followUp({
|
return interaction.followUp({
|
||||||
content: `None of the members got ${client.currency}!`,
|
content: `None of the members got ${client.currency}!`,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
const ata = collection.sort((a, b) => b.bal - a.bal).first(10);
|
const ata = collection.sort((a, b) => b.bal - a.bal).first(10);
|
||||||
await interaction.followUp({
|
interaction.followUp({
|
||||||
embeds: [
|
embeds: [
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.setTitle(`Richest users in ${interaction.guild.name}`)
|
.setTitle(`Richest users in ${interaction.guild.name}`)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
ata
|
ata
|
||||||
.map((v, i) => {
|
.map((v, i) => {
|
||||||
return `${i + 1}: ${
|
return `**${i + 1}❯** ${
|
||||||
interaction.guild.members.cache.get(v.id).user.tag
|
interaction.guild.members.cache.get(v.id).user.tag
|
||||||
} => **${v.bal}${client.currency}**`;
|
} =❯ **${v.bal} ${client.currency}**`;
|
||||||
})
|
})
|
||||||
.join("\n")
|
.join("\n")
|
||||||
)
|
)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setColor(client.color),
|
.setColor(client.color),
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,19 +1,33 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const util = require("../../util/pagination/pagination");
|
const { Pagination } = require("cath");
|
||||||
const items = require("../../util/dist/item");
|
const items = require("../../util/Data/item.json");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "shop",
|
name: "shop",
|
||||||
description: "Check the items from the shop",
|
description: "Check the items from the shop",
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
run: async (client, interaction, args) => {
|
options: [
|
||||||
const list = items.map((value, index) => {
|
{
|
||||||
return `**${value.item}** — ${value.price.toLocaleString()}${
|
type: 3,
|
||||||
|
name: "item",
|
||||||
|
description: "The item you want to see",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils, data) => {
|
||||||
|
if (!args[0]) {
|
||||||
|
const util = new Pagination();
|
||||||
|
const list = items.map(value => {
|
||||||
|
return `**${value.emoji} ${
|
||||||
|
value.name
|
||||||
|
} — [${value.price.toLocaleString()} ${
|
||||||
client.currency
|
client.currency
|
||||||
}\nID: \`${value.id}\``;
|
}](https://www.youtube.com/watch?v=YSKDu1gKntY)**\n\`Aliases:\` **${value.aliases.join(
|
||||||
|
", "
|
||||||
|
)}**\n\`Type:\` **${value.type}**`;
|
||||||
});
|
});
|
||||||
const c = util.chunk(list, 5).map(x => x.join("\n\n"));
|
const c = util.chunk(list, 5).map(x => x.join("\n\n"));
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setTitle("**cath.exe shop**")
|
.setTitle("**NYX Shop**")
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setDescription(c[0])
|
.setDescription(c[0])
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
|
@ -24,5 +38,41 @@ module.exports = {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const itemToSearch = args[0].toLowerCase();
|
||||||
|
const validItem = !!items.find(item =>
|
||||||
|
item.aliases.includes(itemToSearch)
|
||||||
|
);
|
||||||
|
if (!validItem) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"The item is not valid\nIf you want to get information about the item, use `/shop`",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const theitem = items.find(i => i.aliases.includes(itemToSearch));
|
||||||
|
const all = new MessageEmbed()
|
||||||
|
.setTitle(`${theitem.emoji} ${theitem.name}`)
|
||||||
|
.setDescription(
|
||||||
|
`
|
||||||
|
**Owns** - ${
|
||||||
|
data.UserEcon.Inventory?.[theitem.dbname]
|
||||||
|
? data.UserEcon.Inventory?.[theitem.dbname]
|
||||||
|
: 0
|
||||||
|
}
|
||||||
|
**Cost Price** - ${client.currency} ${theitem.price}\n
|
||||||
|
**Sell Price** - ${client.currency} ${
|
||||||
|
theitem.sellable ? theitem.sell : "Unable to sell"
|
||||||
|
}\n
|
||||||
|
**Aliases** - \`${theitem.aliases.join(", ")}\`\n\n`
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [all] });
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,14 +7,14 @@ module.exports = {
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
type: 10,
|
type: 4,
|
||||||
name: "cp",
|
name: "cp",
|
||||||
description: "The number of CP you want to bet",
|
description: "The number of CP you want to slots",
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const max = 1000000;
|
const max = 100000;
|
||||||
const slots = [
|
const slots = [
|
||||||
"<:blushca:852174555513618502>",
|
"<:blushca:852174555513618502>",
|
||||||
"<:abusecat:853501068074942464>",
|
"<:abusecat:853501068074942464>",
|
||||||
|
@ -29,22 +29,28 @@ module.exports = {
|
||||||
const slotseven = slots[Math.floor(Math.random() * slots.length)];
|
const slotseven = slots[Math.floor(Math.random() * slots.length)];
|
||||||
const sloteight = slots[Math.floor(Math.random() * slots.length)];
|
const sloteight = slots[Math.floor(Math.random() * slots.length)];
|
||||||
const slotnine = slots[Math.floor(Math.random() * slots.length)];
|
const slotnine = slots[Math.floor(Math.random() * slots.length)];
|
||||||
const amt = args[0];
|
const ar = [1.3, 1.5, 1.7, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.1, 3.3, 3.5];
|
||||||
if (amt > max) return client.serr(interaction, "Economy", "bet", 101);
|
const r = ar[Math.floor(Math.random() * ar.length)];
|
||||||
if ((await client.bal(interaction.user.id)) < amt) {
|
let amt = args[0];
|
||||||
return client.serr(interaction, "Economy", "bet", 20);
|
if (amt > max) amt = max;
|
||||||
}
|
if (amt < 100) {
|
||||||
if (
|
interaction.followUp({
|
||||||
|
content: `You need to slot at least 100${client.currency}`,
|
||||||
|
});
|
||||||
|
} else if ((await client.bal(interaction.user.id)) < amt) {
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else if (
|
||||||
(slotOne === slotTwo && slotOne === slotThree) ||
|
(slotOne === slotTwo && slotOne === slotThree) ||
|
||||||
(slotfour === slotfive && slotfour === slotsix) ||
|
(slotfour === slotfive && slotfour === slotsix) ||
|
||||||
(slotseven === sloteight && slotseven === slotnine)
|
(slotseven === sloteight && slotseven === slotnine)
|
||||||
) {
|
) {
|
||||||
const winamt = Math.floor(Math.random() * 2 * amt);
|
const winamt = Math.round(r * amt);
|
||||||
|
const multi = (await client.multi(interaction)) / 10 + 1;
|
||||||
await client.add(interaction.user.id, winamt, interaction);
|
await client.add(interaction.user.id, winamt, interaction);
|
||||||
await client.ADDSWin(interaction.user.id);
|
await client.ADDSWin(interaction.user.id);
|
||||||
const won = new MessageEmbed()
|
const won = new MessageEmbed()
|
||||||
.setColor("GREEN")
|
.setColor("GREEN")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.addField(
|
.addField(
|
||||||
"|-----|-----|----|",
|
"|-----|-----|----|",
|
||||||
|
@ -59,17 +65,31 @@ module.exports = {
|
||||||
`| ${slotseven} | ${sloteight} | ${slotnine} |`
|
`| ${slotseven} | ${sloteight} | ${slotnine} |`
|
||||||
)
|
)
|
||||||
.setTitle(`${interaction.user.username} wins a slots game`)
|
.setTitle(`${interaction.user.username} wins a slots game`)
|
||||||
.setDescription(
|
.addFields(
|
||||||
`You win\n**${winamt + amt}**${client.currency}\nYou now have **${
|
{
|
||||||
parseInt(await client.bal(interaction.user.id)) - amt
|
name: "Won",
|
||||||
}**${client.currency}`
|
value: `**${Math.round(winamt * multi)}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "New Balance",
|
||||||
|
value: `**${Math.round(
|
||||||
|
(await client.bal(interaction.user.id)) + winamt * multi
|
||||||
|
)}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Multiplier",
|
||||||
|
value: `x${r + multi}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
interaction.followUp({ embeds: [won] });
|
interaction.followUp({ embeds: [won] });
|
||||||
} else {
|
} else {
|
||||||
await client.rmv(interaction.user.id, amt);
|
await client.rmv(interaction.user.id, amt);
|
||||||
const lost = new MessageEmbed()
|
const lost = new MessageEmbed()
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.addField(
|
.addField(
|
||||||
"|-----|-----|----|",
|
"|-----|-----|----|",
|
||||||
|
@ -84,10 +104,19 @@ module.exports = {
|
||||||
`| ${slotseven} | ${sloteight} | ${slotnine} |`
|
`| ${slotseven} | ${sloteight} | ${slotnine} |`
|
||||||
)
|
)
|
||||||
.setTitle(`${interaction.user.username} loses a slots game`)
|
.setTitle(`${interaction.user.username} loses a slots game`)
|
||||||
.setDescription(
|
.addFields(
|
||||||
`You lost\n**${amt}**${client.currency}\nYou now have **${
|
{
|
||||||
|
name: "Lost",
|
||||||
|
value: `**${amt}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "New Balance",
|
||||||
|
value: `**${
|
||||||
parseInt(await client.bal(interaction.user.id)) - amt
|
parseInt(await client.bal(interaction.user.id)) - amt
|
||||||
}**${client.currency}`
|
}**${client.currency}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
interaction.followUp({ embeds: [lost] });
|
interaction.followUp({ embeds: [lost] });
|
||||||
}
|
}
|
||||||
|
|
151
command/Economy/steal.js
Normal file
151
command/Economy/steal.js
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
const db = require("../../models/econ");
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const { bool } = require("cath");
|
||||||
|
module.exports = {
|
||||||
|
name: "rob",
|
||||||
|
description: "Rob money from an user",
|
||||||
|
usage: "(User)",
|
||||||
|
category: "Economy",
|
||||||
|
timeout: 120000,
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to rob",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils) => {
|
||||||
|
const s = new Set();
|
||||||
|
const tryrob = interaction.guild.members.cache.get(args[0]);
|
||||||
|
if (tryrob.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't rob yourself" });
|
||||||
|
} else if (s.has(tryrob.user.tag)) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"That user has already been robbed within three minutes, be kind!",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await db.findOne({ User: interaction.user.id }, async (err, data) => {
|
||||||
|
if (data) {
|
||||||
|
if (!data.CP) {
|
||||||
|
data.CP = 0;
|
||||||
|
data.save();
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
} else {
|
||||||
|
await db.findOne({ User: tryrob.id }, async (err1, data1) => {
|
||||||
|
const coins = Math.floor(Math.random() * data.CP);
|
||||||
|
const coins1 = Math.floor(Math.random() * data1?.CP);
|
||||||
|
if (!data1) {
|
||||||
|
client.createProfile(tryrob.id);
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
`They don't have any ${client.currency}. Be kind!`
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} else if (data1) {
|
||||||
|
if (data1.CP <= 0 || !data1.CP) {
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
`They don't have any ${client.currency}. Be kind!`
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (bool()) {
|
||||||
|
data.CP += coins1;
|
||||||
|
data.save();
|
||||||
|
data1.CP -= coins1;
|
||||||
|
data1.save();
|
||||||
|
s.add(tryrob.user.tag);
|
||||||
|
setTimeout(function () {
|
||||||
|
s.delete(tryrob.user.tag);
|
||||||
|
}, 1000 * 60 * 3);
|
||||||
|
tryrob
|
||||||
|
.send(
|
||||||
|
`**${
|
||||||
|
interaction.user.tag
|
||||||
|
}** has robbed you **${coins1.toLocaleString()}** coins in **${
|
||||||
|
interaction.guild.name
|
||||||
|
}**`
|
||||||
|
)
|
||||||
|
.catch(e => {});
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setColor("GREEN")
|
||||||
|
.setDescription(
|
||||||
|
`You robbed **${tryrob.user.tag}**! And you got \`${coins1}\`${client.currency}`
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
data.CP -= coins;
|
||||||
|
data.save();
|
||||||
|
data1.CP += coins;
|
||||||
|
data1.save();
|
||||||
|
interaction.followUp({
|
||||||
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setColor("RED")
|
||||||
|
.setDescription(
|
||||||
|
`You failed on robbing **${tryrob.user.tag}**! And you had to pay him/her \`${coins}\`${client.currency}`
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!data) {
|
||||||
|
client.createProfile(interaction.user.id);
|
||||||
|
interaction.followUp({ content: "You don't have enough balance" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,10 +1,11 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "work",
|
name: "work",
|
||||||
description: "Work to earn money",
|
description: "Work to earn money",
|
||||||
category: "Economy",
|
category: "Economy",
|
||||||
timeout: 1000 * 60 * 10,
|
timeout: 1000 * 60 * 10,
|
||||||
run: async (client, interaction, args, utils) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
const job = [
|
const jobs = [
|
||||||
"Software engineer",
|
"Software engineer",
|
||||||
"Programmer",
|
"Programmer",
|
||||||
"Teacher",
|
"Teacher",
|
||||||
|
@ -15,10 +16,22 @@ module.exports = {
|
||||||
"Banker",
|
"Banker",
|
||||||
];
|
];
|
||||||
const earning = utils.rndint(5000, 3000);
|
const earning = utils.rndint(5000, 3000);
|
||||||
const jobs = job[Math.floor(Math.random() * job.length)];
|
const job = jobs[Math.floor(Math.random() * jobs.length)];
|
||||||
await client.add(interaction.user.id, earning, interaction);
|
await client.add(interaction.user.id, earning, interaction);
|
||||||
interaction.followUp({
|
interaction.followUp({
|
||||||
content: `You worked as a **${jobs}** and earned **${earning}${client.currency}**`,
|
embeds: [
|
||||||
|
new MessageEmbed()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setDescription(
|
||||||
|
`Good Job! You worked as a **${job}** and earned **${earning}${client.currency}**`
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setColor(client.color),
|
||||||
|
],
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
const { random8ball } = require("cath");
|
|
||||||
module.exports = {
|
|
||||||
name: "8ball",
|
|
||||||
usage: "(Question)",
|
|
||||||
description: "8ball an answer",
|
|
||||||
category: "Fun",
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "question",
|
|
||||||
description: "The question you want to ask",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const data = await random8ball();
|
|
||||||
const embed = new MessageEmbed()
|
|
||||||
.setAuthor(
|
|
||||||
`🎱 ${interaction.member.user.tag} asks`,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
|
||||||
.setDescription(`**🎱Question:** \n${args[0]} \n**🎱Answer:** \n ${data}`)
|
|
||||||
.setColor(client.color)
|
|
||||||
.setTimestamp()
|
|
||||||
.setURL(client.web)
|
|
||||||
.setFooter(`Made by ${client.author}`);
|
|
||||||
await interaction.followUp({ embeds: [embed] });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,4 +1,4 @@
|
||||||
const figlet = require("figlet");
|
const axios = require("axios");
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "ascii",
|
name: "ascii",
|
||||||
description: "Converts text into ASCII art",
|
description: "Converts text into ASCII art",
|
||||||
|
@ -13,10 +13,11 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const msg = args[0];
|
const data = await axios
|
||||||
figlet.text(msg, async (err, data) => {
|
.get(
|
||||||
if (err) console.log(err);
|
`https://artii.herokuapp.com/make?text=${encodeURIComponent(args[0])}`
|
||||||
await interaction.followUp(`\`\`\`${data}\`\`\``);
|
)
|
||||||
});
|
.then(res => res.data);
|
||||||
|
interaction.followUp(`\`\`\`${data}\`\`\``);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
const { MessageAttachment } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "busted",
|
|
||||||
description: "Bust someone",
|
|
||||||
category: "Fun",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 6,
|
|
||||||
name: "user",
|
|
||||||
description: "The user you want to use the effect",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const user = interaction.guild.members.cache.get(args[0]);
|
|
||||||
const ima = new MessageAttachment(
|
|
||||||
`${process.env.api}/api/v1/image/busted?q=${user.user.displayAvatarURL({
|
|
||||||
format: "png",
|
|
||||||
size: 2048,
|
|
||||||
})}`
|
|
||||||
);
|
|
||||||
await interaction.followUp({ files: [ima] });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
const { getreddit } = require("cath");
|
|
||||||
module.exports = {
|
|
||||||
name: "cat",
|
|
||||||
category: "Fun",
|
|
||||||
description: "Get a cat from reddit",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
let subreddits = ["cat", "cats"];
|
|
||||||
let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)];
|
|
||||||
const data = await getreddit(subreddit);
|
|
||||||
await 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.member.user.tag,
|
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -67,7 +67,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
let choices = args[Math.floor(Math.random() * args.length)];
|
const choices = args[Math.floor(Math.random() * args.length)];
|
||||||
await interaction.followUp(`I will choose - \`${choices}\``);
|
interaction.followUp(`I will choose - \`${choices}\``);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "coinflip",
|
|
||||||
description: "Flip a coin",
|
|
||||||
category: "Fun",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
let HT = ["Heads!", "Tails!"];
|
|
||||||
let pick = HT[Math.floor(Math.random() * HT.length)];
|
|
||||||
let embed = new MessageEmbed()
|
|
||||||
.setColor(client.color)
|
|
||||||
.setTitle("CoinFilp Game")
|
|
||||||
.setTimestamp()
|
|
||||||
.setFooter(`Made by ${client.author}`)
|
|
||||||
.setDescription(pick);
|
|
||||||
await interaction.followUp({ embeds: [embed] });
|
|
||||||
},
|
|
||||||
};
|
|
19
command/Fun/dare.js
Normal file
19
command/Fun/dare.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const dares = require("../../util/Data/dares.json");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "dare",
|
||||||
|
description: "The maturity level of the topics the question can relate to",
|
||||||
|
run: async (client, interaction) => {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dyamic: true })
|
||||||
|
)
|
||||||
|
.setTitle(dares[Math.round(Math.random() * (dares.length - 1))])
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
|
@ -1,98 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
name: "dinochrome",
|
|
||||||
category: "Fun",
|
|
||||||
description: "Dinosaur in Chrome",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
await interaction.deleteReply();
|
|
||||||
let msg = await interaction.channel.send(`---------------🦖`);
|
|
||||||
let time = 1 * 1000;
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`-----------🦖----`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`----------🦖------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`--------🦖--------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`------🦖-----------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`-------🦖-----------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`---🌵-----🦖---------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`---🌵-🦖-------------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`🦖\n ---🌵--------------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`------🦖---🌵--------------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`----🦖-----🌵----------------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`-🌵🌵-----🦖-------🌵--------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`----🌵🌵-🦖----------🌵------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`🦖\n ---🌵🌵-------------🌵---`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`-----🦖---🌵🌵-------------🌵--`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`-------🦖-----🌵🌵-------------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`🎂----🦖--------🌵🌵-----------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`---🎂--🦖----------🌵🌵---------`);
|
|
||||||
}, time);
|
|
||||||
time += 1.5 * 1000;
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
msg.edit(`**Ⓜⓘⓢⓢⓘⓞⓝ Ⓒⓞⓜⓟⓛⓔⓣⓔⓓ !**\n ---🎂🦖----------🌵🌵-------------`);
|
|
||||||
}, time);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
const { getreddit } = require("cath");
|
|
||||||
module.exports = {
|
|
||||||
name: "dog",
|
|
||||||
category: "Fun",
|
|
||||||
description: "Get a dog from reddit",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
let subreddits = ["dog", "dogs"];
|
|
||||||
let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)];
|
|
||||||
const data = await getreddit(subreddit);
|
|
||||||
await 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.member.user.tag,
|
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,31 +0,0 @@
|
||||||
const { MessageAttachment } = require("discord.js");
|
|
||||||
const axios = require("axios");
|
|
||||||
module.exports = {
|
|
||||||
name: "drake",
|
|
||||||
description: "Drake meme",
|
|
||||||
usage: "(Text) (Text)",
|
|
||||||
category: "Fun",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "first",
|
|
||||||
description: "The first text",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "second",
|
|
||||||
description: "The second text",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const res = await axios.get(
|
|
||||||
`https://frenchnoodles.xyz/api/endpoints/drake/?text1=${args[0]}&text2=${args[1]}`,
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
let i = await res.buffer();
|
|
||||||
const drake = new MessageAttachment(i);
|
|
||||||
await interaction.followUp({ files: [drake] });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,24 +0,0 @@
|
||||||
const axios = require("axios");
|
|
||||||
module.exports = {
|
|
||||||
name: "doublestruck",
|
|
||||||
description: "Doublestruck your text",
|
|
||||||
usage: "(text)",
|
|
||||||
category: "Fun",
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "text",
|
|
||||||
description: "The text you want to convert",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
let text = args[0].split(" ").join("+");
|
|
||||||
let res = await axios.get(
|
|
||||||
"https://api.popcatdev.repl.co/doublestruck?text=" + text
|
|
||||||
);
|
|
||||||
let json = await res.json();
|
|
||||||
await interaction.followUp(json.text);
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,43 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
name: "emojify",
|
|
||||||
usage: "(Word)",
|
|
||||||
description: "Emojify a sentence",
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
category: "Fun",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "text",
|
|
||||||
description: "The text you want to convert",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
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}:`;
|
|
||||||
});
|
|
||||||
await interaction.followUp(
|
|
||||||
args[0]
|
|
||||||
.split("")
|
|
||||||
.map(c => mapping[c] || c)
|
|
||||||
.join("")
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
|
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],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -13,8 +13,8 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
let answers = [
|
const answers = [
|
||||||
"@yousuck.noob",
|
"@yousuck.noob",
|
||||||
"@hesnoob.haha",
|
"@hesnoob.haha",
|
||||||
"@thisguy.suck",
|
"@thisguy.suck",
|
||||||
|
@ -33,7 +33,7 @@ module.exports = {
|
||||||
"@gmail.com",
|
"@gmail.com",
|
||||||
"@yahoo.com",
|
"@yahoo.com",
|
||||||
];
|
];
|
||||||
let passwords = [
|
const passwords = [
|
||||||
"Disb****",
|
"Disb****",
|
||||||
"disc******",
|
"disc******",
|
||||||
"pass**********",
|
"pass**********",
|
||||||
|
@ -50,7 +50,7 @@ module.exports = {
|
||||||
"egghunt2***",
|
"egghunt2***",
|
||||||
"secr*****",
|
"secr*****",
|
||||||
];
|
];
|
||||||
let ips = [
|
const ips = [
|
||||||
"10.313.523.502.00.1",
|
"10.313.523.502.00.1",
|
||||||
"25.537.753.462.29.2",
|
"25.537.753.462.29.2",
|
||||||
"21.175.866.974.07.08",
|
"21.175.866.974.07.08",
|
||||||
|
@ -69,69 +69,69 @@ module.exports = {
|
||||||
interaction.channel
|
interaction.channel
|
||||||
.send(`Hacking ${taggedUser.user.username}...`)
|
.send(`Hacking ${taggedUser.user.username}...`)
|
||||||
.then(async msg => {
|
.then(async msg => {
|
||||||
client.function.sleep(100);
|
utils.sleep(100);
|
||||||
msg.edit("Status: ■□□□□□□□□□□ 0%");
|
msg.edit("Status: ■□□□□□□□□□□ 0%");
|
||||||
client.function.sleep(100);
|
utils.sleep(100);
|
||||||
msg.edit("Status: ■■□□□□□□□□□ 7%: Hacking Email...");
|
msg.edit("Status: ■■□□□□□□□□□ 7%: Hacking Email...");
|
||||||
client.function.sleep(600);
|
utils.sleep(600);
|
||||||
msg.edit(
|
msg.edit(
|
||||||
`Status: ■■■□□□□□□□□ 8%:\n \`Email: ${taggedUser.user.username}@yousuck.noob\`\n \`Password: ${passwrd}\` `
|
`Status: ■■■□□□□□□□□ 8%:\n \`Email: ${taggedUser.user.username}@yousuck.noob\`\n \`Password: ${passwrd}\` `
|
||||||
);
|
);
|
||||||
client.function.sleep(600);
|
utils.sleep(600);
|
||||||
msg.edit("Status: ■■□□□□□□□□□ 9%: Logging in to the Email...");
|
msg.edit("Status: ■■□□□□□□□□□ 9%: Logging in to the Email...");
|
||||||
client.function.sleep(2000);
|
utils.sleep(2000);
|
||||||
msg.edit("Status: ■■■□□□□□□□□ 12%: Turning off the antivirus");
|
msg.edit("Status: ■■■□□□□□□□□ 12%: Turning off the antivirus");
|
||||||
client.function.sleep(1000);
|
utils.sleep(1000);
|
||||||
msg.edit("Status: ■■■■□□□□□□ 14%: Downloading SYNAPSE X");
|
msg.edit("Status: ■■■■□□□□□□ 14%: Downloading SYNAPSE X");
|
||||||
client.function.sleep(100);
|
utils.sleep(100);
|
||||||
msg.edit("Status: ■■■□□□□□□□□ 17%: Deleting Captcha...");
|
msg.edit("Status: ■■■□□□□□□□□ 17%: Deleting Captcha...");
|
||||||
client.function.sleep(100);
|
utils.sleep(100);
|
||||||
msg.edit("Status: ■■□□□□□□□□□ 20%: Deleting Paypal account...");
|
msg.edit("Status: ■■□□□□□□□□□ 20%: Deleting Paypal account...");
|
||||||
client.function.sleep(10);
|
utils.sleep(10);
|
||||||
msg.edit("Status: ■■■□□□□□□□□ 21%");
|
msg.edit("Status: ■■■□□□□□□□□ 21%");
|
||||||
client.function.sleep(12);
|
utils.sleep(12);
|
||||||
msg.edit("Status: ■■■■□□□□□□□ 22%");
|
msg.edit("Status: ■■■■□□□□□□□ 22%");
|
||||||
client.function.sleep(100);
|
utils.sleep(100);
|
||||||
msg.edit("Status: ■■■■■□□□□□□ 24%: Paypal account deleted");
|
msg.edit("Status: ■■■■■□□□□□□ 24%: Paypal account deleted");
|
||||||
client.function.sleep(1000);
|
utils.sleep(1000);
|
||||||
msg.edit("Status: ■■■■□□□□□□ 29%: Hacking is almost ready...");
|
msg.edit("Status: ■■■■□□□□□□ 29%: Hacking is almost ready...");
|
||||||
client.function.sleep(80);
|
utils.sleep(80);
|
||||||
msg.edit("Status: ■■■□□□□□□□□ 31%");
|
msg.edit("Status: ■■■□□□□□□□□ 31%");
|
||||||
client.function.sleep(80);
|
utils.sleep(80);
|
||||||
msg.edit("Status: ■■■■□□□□□□□ 36%");
|
msg.edit("Status: ■■■■□□□□□□□ 36%");
|
||||||
client.function.sleep(40);
|
utils.sleep(40);
|
||||||
msg.edit("Status: ■■■■■□□□□□□ 41%");
|
msg.edit("Status: ■■■■■□□□□□□ 41%");
|
||||||
client.function.sleep(60);
|
utils.sleep(60);
|
||||||
msg.edit("Status: ■■■■□□□□□□□ 47%");
|
msg.edit("Status: ■■■■□□□□□□□ 47%");
|
||||||
client.function.sleep(50);
|
utils.sleep(50);
|
||||||
msg.edit("Status: ■■■■■■□□□□□ 53%");
|
msg.edit("Status: ■■■■■■□□□□□ 53%");
|
||||||
client.function.sleep(3000);
|
utils.sleep(3000);
|
||||||
msg.edit(
|
msg.edit(
|
||||||
`Status: ■■■■■■■□□□□ 58%: Email password changed so ${taggedUser.user.username} can not login`
|
`Status: ■■■■■■■□□□□ 58%: Email password changed so ${taggedUser.user.username} can not login`
|
||||||
);
|
);
|
||||||
client.function.sleep(500);
|
utils.sleep(500);
|
||||||
msg.edit("Status: ■■■■■■□□□□□ 66%");
|
msg.edit("Status: ■■■■■■□□□□□ 66%");
|
||||||
client.function.sleep(60);
|
utils.sleep(60);
|
||||||
msg.edit("Status: ■■■■■□□□□□□ 74%");
|
msg.edit("Status: ■■■■■□□□□□□ 74%");
|
||||||
client.function.sleep(20);
|
utils.sleep(20);
|
||||||
msg.edit(`Status: ■■■■■□□□□□□ 79%: IP address found: ${ip}`);
|
msg.edit(`Status: ■■■■■□□□□□□ 79%: IP address found: ${ip}`);
|
||||||
client.function.sleep(83);
|
utils.sleep(83);
|
||||||
msg.edit("Status: ■■■■■■□□□□ 80%");
|
msg.edit("Status: ■■■■■■□□□□ 80%");
|
||||||
client.function.sleep(50);
|
utils.sleep(50);
|
||||||
msg.edit("Status: ■■■■■■■□□□ 85%");
|
msg.edit("Status: ■■■■■■■□□□ 85%");
|
||||||
client.function.sleep(14);
|
utils.sleep(14);
|
||||||
msg.edit("Status: ■■■■■■■■■□□ 93%");
|
msg.edit("Status: ■■■■■■■■■□□ 93%");
|
||||||
client.function.sleep(70);
|
utils.sleep(70);
|
||||||
msg.edit("Status: ■■■■■■■■■■□ 97%");
|
msg.edit("Status: ■■■■■■■■■■□ 97%");
|
||||||
client.function.sleep(90);
|
utils.sleep(90);
|
||||||
msg.edit("Status: ■■■■■■■■■■■ 100%");
|
msg.edit("Status: ■■■■■■■■■■■ 100%");
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setDescription(`${taggedUser} has been hacked!`)
|
.setDescription(`${taggedUser} has been hacked!`)
|
||||||
.addField("Email", `${taggedUser.user.username}${answer}`)
|
.addField("Email", `${taggedUser.user.username}${answer}`)
|
||||||
.addField("Password", `${passwrd}`)
|
.addField("Password", `${passwrd}`)
|
||||||
.addField("IP address", `${ip}`)
|
.addField("IP address", `${ip}`)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setColor("02023a");
|
.setColor(client.color);
|
||||||
await msg.edit({ embeds: [embed] });
|
await msg.edit({ embeds: [embed] });
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,12 +5,13 @@ module.exports = {
|
||||||
name: "hangman",
|
name: "hangman",
|
||||||
description: "Play a hangman game",
|
description: "Play a hangman game",
|
||||||
category: "Fun",
|
category: "Fun",
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction) => {
|
||||||
await interaction.deleteReply();
|
await interaction.deleteReply();
|
||||||
if (playing.has(interaction.channel.id))
|
if (playing.has(interaction.channel.id)) {
|
||||||
return interaction.followUp({
|
return interaction.followUp({
|
||||||
content: "Only one game may be occurring per channel.",
|
content: "Only one game may be occurring per channel.",
|
||||||
});
|
});
|
||||||
|
}
|
||||||
playing.add(interaction.channel.id);
|
playing.add(interaction.channel.id);
|
||||||
try {
|
try {
|
||||||
const data = await axios
|
const data = await axios
|
||||||
|
@ -26,10 +27,7 @@ module.exports = {
|
||||||
while (word.length !== confirmation.length && points < 6) {
|
while (word.length !== confirmation.length && points < 6) {
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setFooter(
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
interaction.user.tag,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setTitle("Hangman game").setDescription(`
|
.setTitle("Hangman game").setDescription(`
|
||||||
${displayText === null ? "Here we go!" : displayText ? "Good job!" : "Nope!"}
|
${displayText === null ? "Here we go!" : displayText ? "Good job!" : "Nope!"}
|
||||||
|
@ -46,7 +44,7 @@ module.exports = {
|
||||||
=============
|
=============
|
||||||
\`\`\`
|
\`\`\`
|
||||||
`);
|
`);
|
||||||
let m = await interaction.channel.send({ embeds: [embed] });
|
await interaction.channel.send({ embeds: [embed] });
|
||||||
const filter = res => {
|
const filter = res => {
|
||||||
const choice = res.content.toLowerCase();
|
const choice = res.content.toLowerCase();
|
||||||
return (
|
return (
|
||||||
|
@ -60,7 +58,6 @@ module.exports = {
|
||||||
max: 1,
|
max: 1,
|
||||||
time: 30000,
|
time: 30000,
|
||||||
});
|
});
|
||||||
//m.delete();
|
|
||||||
if (!guess.size) {
|
if (!guess.size) {
|
||||||
await interaction.channel.send({ content: "Sorry, time is up!" });
|
await interaction.channel.send({ content: "Sorry, time is up!" });
|
||||||
break;
|
break;
|
||||||
|
@ -84,10 +81,11 @@ module.exports = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
playing.delete(interaction.channel.id);
|
playing.delete(interaction.channel.id);
|
||||||
if (word.length === confirmation.length || guessed)
|
if (word.length === confirmation.length || guessed) {
|
||||||
return interaction.channel.send({
|
return interaction.channel.send({
|
||||||
content: `You won. The word is **${word}**!`,
|
content: `You won. The word is **${word}**!`,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
return interaction.channel.send({
|
return interaction.channel.send({
|
||||||
content: `You lost. The word is **${word}**.`,
|
content: `You lost. The word is **${word}**.`,
|
||||||
});
|
});
|
||||||
|
|
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 }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -23,7 +23,7 @@ module.exports = {
|
||||||
const user = interaction.guild.members.cache.get(args[0]);
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
words = args[1];
|
words = args[1];
|
||||||
if (user.id === interaction.user.id) {
|
if (user.id === interaction.user.id) {
|
||||||
return await interaction.followUp("You can't kiss yourself");
|
return interaction.followUp("You can't kiss yourself");
|
||||||
}
|
}
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setDescription(`${interaction.user} **kisses** ${user}`)
|
.setDescription(`${interaction.user} **kisses** ${user}`)
|
||||||
|
@ -32,9 +32,9 @@ module.exports = {
|
||||||
)
|
)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setFooter(`Made by ${client.author}`);
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
if (words) {
|
if (words) {
|
||||||
embed.addField("Words:", reason);
|
embed.addField("Words:", words);
|
||||||
}
|
}
|
||||||
await interaction
|
await interaction
|
||||||
.followUp({ embeds: [embed] })
|
.followUp({ embeds: [embed] })
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
const { getreddit } = require("cath");
|
|
||||||
module.exports = {
|
|
||||||
name: "meme",
|
|
||||||
category: "Fun",
|
|
||||||
description: "Get a meme from reddit",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
let subreddits = ["comedyheaven", "dank", "meme", "memes"];
|
|
||||||
let subreddit = subreddits[Math.floor(Math.random() * subreddits.length)];
|
|
||||||
const data = await getreddit(subreddit);
|
|
||||||
await 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.member.user.tag,
|
|
||||||
iconURL: interaction.user.displayAvatarURL({ dynamic: true }),
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "pp",
|
|
||||||
description: "Check how long is the user",
|
|
||||||
usage: "(User)",
|
|
||||||
category: "Fun",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 6,
|
|
||||||
name: "user",
|
|
||||||
description: "The user you want to see",
|
|
||||||
required: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const { user } =
|
|
||||||
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
|
||||||
let 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}`);
|
|
||||||
await interaction.followUp({
|
|
||||||
embeds: [embed],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,22 +0,0 @@
|
||||||
const { MessageAttachment } = require("discord.js");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: "rickroll",
|
|
||||||
description: "Rickroll?",
|
|
||||||
category: "Fun",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
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)];
|
|
||||||
const rickroll = new MessageAttachment(
|
|
||||||
"https://i.pinimg.com/originals/88/82/bc/8882bcf327896ab79fb97e85ae63a002.gif"
|
|
||||||
);
|
|
||||||
await interaction.followUp({ content: `**${rick}**`, files: [rickroll] });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -15,19 +15,19 @@ module.exports = {
|
||||||
],
|
],
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
run: async (client, interaction, args, utils) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
let user = interaction.guild.members.cache.get(args[0]);
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
if (user.user.id == interaction.user.id)
|
if (user.user.id == interaction.user.id) {
|
||||||
return await interaction.followUp("You can't play with yourself");
|
return interaction.followUp("You can't play with yourself");
|
||||||
if (user.user.bot)
|
}
|
||||||
return await interaction.followUp("You can't play with bots");
|
if (user.user.bot) return interaction.followUp("You can't play with bots");
|
||||||
|
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setDescription(`Wait for **${user.user.username}** to accept your game`)
|
.setDescription(`Wait for **${user.user.username}** to accept your game`)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setFooter(`Made by ${client.author}`);
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
|
|
||||||
let confirm = new Discord.MessageActionRow().addComponents(
|
const confirm = new Discord.MessageActionRow().addComponents(
|
||||||
new Discord.MessageButton()
|
new Discord.MessageButton()
|
||||||
.setLabel("Accept")
|
.setLabel("Accept")
|
||||||
.setStyle("SUCCESS")
|
.setStyle("SUCCESS")
|
||||||
|
@ -46,7 +46,7 @@ module.exports = {
|
||||||
components: [confirm],
|
components: [confirm],
|
||||||
})
|
})
|
||||||
.then(async m => {
|
.then(async m => {
|
||||||
let filter = button => button.user.id == user.user.id;
|
const filter = button => button.user.id == user.user.id;
|
||||||
const collector = m.createMessageComponentCollector({
|
const collector = m.createMessageComponentCollector({
|
||||||
filter,
|
filter,
|
||||||
type: "BUTTON",
|
type: "BUTTON",
|
||||||
|
@ -58,12 +58,12 @@ module.exports = {
|
||||||
return collector.stop("decline");
|
return collector.stop("decline");
|
||||||
}
|
}
|
||||||
button.deferUpdate();
|
button.deferUpdate();
|
||||||
let pick = new Discord.MessageEmbed()
|
const pick = new Discord.MessageEmbed()
|
||||||
.setTitle(`${interaction.user.username} VS ${user.user.username}`)
|
.setTitle(`${interaction.user.username} VS ${user.user.username}`)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setDescription("Choose either 🪨, 📄, or ✂️")
|
.setDescription("Choose either 🪨, 📄, or ✂️")
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
let choices = new Discord.MessageActionRow().addComponents(
|
const choices = new Discord.MessageActionRow().addComponents(
|
||||||
new Discord.MessageButton()
|
new Discord.MessageButton()
|
||||||
.setCustomId("rock")
|
.setCustomId("rock")
|
||||||
.setStyle("SECONDARY")
|
.setStyle("SECONDARY")
|
||||||
|
@ -82,11 +82,11 @@ module.exports = {
|
||||||
components: [choices],
|
components: [choices],
|
||||||
});
|
});
|
||||||
collector.stop();
|
collector.stop();
|
||||||
let users = new Set();
|
const users = new Set();
|
||||||
users.add(interaction.user.id);
|
users.add(interaction.user.id);
|
||||||
users.add(user.user.id);
|
users.add(user.user.id);
|
||||||
let ping, pong;
|
let ping, pong;
|
||||||
let filter = b => users.has(b.user.id);
|
const filter = b => users.has(b.user.id);
|
||||||
const collect = m.createMessageComponentCollector({
|
const collect = m.createMessageComponentCollector({
|
||||||
filter,
|
filter,
|
||||||
type: "BUTTON",
|
type: "BUTTON",
|
||||||
|
@ -112,7 +112,7 @@ module.exports = {
|
||||||
});
|
});
|
||||||
collect.on("end", (c, reason) => {
|
collect.on("end", (c, reason) => {
|
||||||
if (reason == "time") {
|
if (reason == "time") {
|
||||||
let timeout = new Discord.MessageEmbed()
|
const timeout = new Discord.MessageEmbed()
|
||||||
.setTitle("Timeout")
|
.setTitle("Timeout")
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
@ -129,10 +129,13 @@ module.exports = {
|
||||||
const sit5 = ping == "paper" && pong == "rock";
|
const sit5 = ping == "paper" && pong == "rock";
|
||||||
const sit6 = ping == "rock" && pong == "paper";
|
const sit6 = ping == "rock" && pong == "paper";
|
||||||
if (sit1 || sit3 || sit5) {
|
if (sit1 || sit3 || sit5) {
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`${user.user.username} wins!`)
|
.setTitle(`${user.user.username} wins!`)
|
||||||
.setColor("GREEN")
|
.setColor("GREEN")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
.addField(
|
.addField(
|
||||||
`${user.user.username} choice`,
|
`${user.user.username} choice`,
|
||||||
`${utils.format(ping)}`
|
`${utils.format(ping)}`
|
||||||
|
@ -147,10 +150,13 @@ module.exports = {
|
||||||
components: [],
|
components: [],
|
||||||
});
|
});
|
||||||
} else if (sit2 || sit4 || sit6) {
|
} else if (sit2 || sit4 || sit6) {
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`${interaction.user.username} wins!`)
|
.setTitle(`${interaction.user.username} wins!`)
|
||||||
.setColor("GREEN")
|
.setColor("GREEN")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
.addField(
|
.addField(
|
||||||
`${interaction.user.username} choice`,
|
`${interaction.user.username} choice`,
|
||||||
`${utils.format(pong)}`
|
`${utils.format(pong)}`
|
||||||
|
@ -165,10 +171,13 @@ module.exports = {
|
||||||
components: [],
|
components: [],
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`Tie!`)
|
.setTitle(`Tie!`)
|
||||||
.setColor("GREY")
|
.setColor("GREY")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
.addField(
|
.addField(
|
||||||
`${interaction.user.username} choice`,
|
`${interaction.user.username} choice`,
|
||||||
`${utils.format(pong)}`
|
`${utils.format(pong)}`
|
||||||
|
@ -185,7 +194,7 @@ module.exports = {
|
||||||
});
|
});
|
||||||
collector.on("end", (collected, reason) => {
|
collector.on("end", (collected, reason) => {
|
||||||
if (reason == "time") {
|
if (reason == "time") {
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle("Timeout")
|
.setTitle("Timeout")
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
@ -197,7 +206,7 @@ module.exports = {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (reason == "decline") {
|
if (reason == "decline") {
|
||||||
let embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle("Declined")
|
.setTitle("Declined")
|
||||||
.setColor("RED")
|
.setColor("RED")
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
block = "⬛";
|
const block = "⬛";
|
||||||
heart = "🟥";
|
const heart = "🟥";
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "ship",
|
name: "ship",
|
||||||
|
@ -25,13 +25,13 @@ module.exports = {
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const user1 = interaction.guild.members.cache.get(args[0]).user.username;
|
const user1 = interaction.guild.members.cache.get(args[0]).user.username;
|
||||||
const user2 = interaction.guild.members.cache.get(args[1]).user.username;
|
const user2 = interaction.guild.members.cache.get(args[1]).user.username;
|
||||||
let loveEmbed = new MessageEmbed()
|
const loveEmbed = new MessageEmbed()
|
||||||
.setColor("dd2e44")
|
.setColor("dd2e44")
|
||||||
.setFooter(`Shipped by ${interaction.member.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}`);
|
||||||
await interaction.followUp({ embeds: [loveEmbed] });
|
interaction.followUp({ embeds: [loveEmbed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
function ship() {
|
function ship() {
|
||||||
|
|
|
@ -14,20 +14,16 @@ module.exports = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
let simp = Math.floor(Math.random() * 100);
|
const simp = Math.floor(Math.random() * 100);
|
||||||
let user = interaction.guild.members.cache.get(args[0]);
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
interaction.followUp({
|
interaction.followUp({
|
||||||
embeds: [
|
embeds: [
|
||||||
new MessageEmbed()
|
new MessageEmbed()
|
||||||
.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(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp()
|
.setTimestamp(),
|
||||||
.setAuthor(
|
|
||||||
`Requested by ${interaction.user.tag}`,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
const axios = require("axios");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: "superscript",
|
|
||||||
description: "Superscript your text",
|
|
||||||
usage: "(text)",
|
|
||||||
category: "Fun",
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "text",
|
|
||||||
description: "The text you want to convert",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const text = args[0];
|
|
||||||
if (text.includes("@"))
|
|
||||||
return await interaction.followUp({
|
|
||||||
content: "Text cannot includes '@'",
|
|
||||||
});
|
|
||||||
const data = await axios
|
|
||||||
.get(`${process.env.api}/api/v1/fun/superscript?text=${text}`)
|
|
||||||
.then(res => res.data.text);
|
|
||||||
await interaction.followUp({ content: data });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,25 +0,0 @@
|
||||||
const { Canvas } = require("canvacord");
|
|
||||||
const { MessageAttachment } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "triggered",
|
|
||||||
usage: "{User}",
|
|
||||||
description: "Have a trigger effect on a user's avatar",
|
|
||||||
category: "Fun",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 6,
|
|
||||||
name: "user",
|
|
||||||
description: "The user you want to use the effect",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const user = interaction.guild.members.cache.get(args[0]);
|
|
||||||
const ava = user.user.displayAvatarURL({ format: "png", size: 2048 });
|
|
||||||
const imga = await Canvas.trigger(ava);
|
|
||||||
await interaction.followUp({
|
|
||||||
files: [new MessageAttachment(imga, "image.gif")],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
19
command/Fun/truth.js
Normal file
19
command/Fun/truth.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const truth = require("../../util/Data/truth.json");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "truth",
|
||||||
|
description: "Gives a random question that has to be answered truthfully",
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dyamic: true })
|
||||||
|
)
|
||||||
|
.setTitle(truth[Math.round(Math.random() * truth.length)])
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
29
command/Fun/wyr.js
Normal file
29
command/Fun/wyr.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
const questions = require("../../util/Data/wyr.json");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: "wyr",
|
||||||
|
description: "Send some would-you rather questions",
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const messagetext = questions[Math.floor(Math.random() * questions.length)];
|
||||||
|
const question = messagetext.split("Would you rather ")[1];
|
||||||
|
const q = question.split(" or ");
|
||||||
|
const Option1 = q[0];
|
||||||
|
const Option2 = q[1];
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Would You Rather")
|
||||||
|
.setDescription(
|
||||||
|
`🇦 ${Option1} \n\n **OR** \n\n :regional_indicator_b: ${Option2}`
|
||||||
|
)
|
||||||
|
.setAuthor(
|
||||||
|
interaction.user.tag,
|
||||||
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
)
|
||||||
|
.setColor(client.color)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp();
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -30,21 +30,20 @@ module.exports = {
|
||||||
})}) | [jpg](${member.user.displayAvatarURL({
|
})}) | [jpg](${member.user.displayAvatarURL({
|
||||||
format: "jpg",
|
format: "jpg",
|
||||||
size: 2048,
|
size: 2048,
|
||||||
})}) | [gif](${member.user.displayAvatarURL({
|
|
||||||
format: "gif",
|
|
||||||
size: 2048,
|
|
||||||
dynamic: true,
|
|
||||||
})}) | [webp](${member.user.displayAvatarURL({
|
})}) | [webp](${member.user.displayAvatarURL({
|
||||||
format: "webp",
|
format: "webp",
|
||||||
size: 2048,
|
size: 2048,
|
||||||
|
})}) | [gif](${member.user.displayAvatarURL({
|
||||||
|
format: "gif",
|
||||||
|
size: 2048,
|
||||||
})})**`
|
})})**`
|
||||||
)
|
)
|
||||||
.setImage(
|
.setImage(
|
||||||
member.user.avatarURL({ size: 2048, dynamic: true, format: "png" })
|
member.user.avatarURL({ size: 2048, dynamic: true, format: "png" })
|
||||||
)
|
)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
await interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
const { MessageEmbed } = require("discord.js");
|
||||||
const axios = require("axios");
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "banner",
|
name: "banner",
|
||||||
description: "Show user's banner",
|
description: "Show user's banner",
|
||||||
|
@ -18,40 +16,37 @@ module.exports = {
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
const { user } =
|
const { user } =
|
||||||
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
interaction.guild.members.cache.get(args[0]) || interaction.member;
|
||||||
axios
|
const data = await user.fetch();
|
||||||
.get(`https://discord.com/api/v9/users/${user.id}`, {
|
if (data?.banner) {
|
||||||
headers: {
|
const extension = data.banner.startsWith("a_") ? ".gif" : ".png";
|
||||||
Authorization: `Bot ${client.token}`,
|
const url = `https://cdn.discordapp.com/banners/${user.id}/${data.banner}${extension}?size=2048`;
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(async res => {
|
|
||||||
const { banner, accent_color } = res.data;
|
|
||||||
|
|
||||||
if (banner) {
|
|
||||||
const extension = banner.startsWith("a_") ? ".gif" : ".png";
|
|
||||||
const url = `https://cdn.discordapp.com/banners/${user.id}/${banner}${extension}?size=2048`;
|
|
||||||
|
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
|
.setDescription(`[Link to Banner](${url})`)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
.setTitle(`${user.tag}'s Banner`)
|
.setTitle(`${user.tag}'s Banner`)
|
||||||
.setImage(url)
|
.setImage(url)
|
||||||
.setColor(accent_color || "BLUE");
|
.setColor(data?.hexAccentColor || client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
await interaction.followUp({ embeds: [embed] });
|
} else if (data?.hexAccentColor) {
|
||||||
} else {
|
|
||||||
if (accent_color) {
|
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`**${user.tag}** does not have a banner but they have an accent color`
|
`**${user.tag}** does not have a banner but they have an accent color`
|
||||||
)
|
)
|
||||||
.setColor(accent_color);
|
.setColor(data?.hexAccentColor);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
await interaction.followUp({ embeds: [embed] });
|
|
||||||
} else {
|
} else {
|
||||||
await interaction.followUp({
|
const embed = new MessageEmbed()
|
||||||
content: `**${user.tag}** does not have a banner nor do they have an accent color.`,
|
.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] });
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,37 +10,68 @@ module.exports = {
|
||||||
run: async (client, interaction, args, utils) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
const core = os.cpus()[0];
|
const core = os.cpus()[0];
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setURL(client.web)
|
.setTitle(`NYX - CODM Gunsmith Bot`)
|
||||||
.setThumbnail(client.user.displayAvatarURL())
|
.setURL(
|
||||||
.setColor(interaction.guild.me.displayHexColor || client.color)
|
`https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=4231314550&scope=bot%20applications.commands`
|
||||||
.addField(
|
)
|
||||||
"General",
|
.setThumbnail(
|
||||||
`**❯ Client:** ${client.user.tag} (${client.user.id})
|
"https://media.discordapp.net/attachments/896078559293104128/896392631565828146/nyx_logo_transparent.webp"
|
||||||
**❯ Commands:** ${client.commands.size}
|
|
||||||
**❯ Servers:** ${client.guilds.cache.size.toLocaleString()}
|
|
||||||
**❯ Users:** ${client.guilds.cache
|
|
||||||
.reduce((a, b) => a + b.memberCount, 0)
|
|
||||||
.toLocaleString()}
|
|
||||||
**❯ Channels:** ${client.channels.cache.size.toLocaleString()}
|
|
||||||
**❯ Creation Date:** ${utc(client.user.createdTimestamp).format(
|
|
||||||
"Do MMMM YYYY HH:mm:ss"
|
|
||||||
)}
|
|
||||||
**❯ Node.js:** ${process.version}
|
|
||||||
**❯ Version:** v${version}
|
|
||||||
**❯ Discord.js:** v${djsversion}
|
|
||||||
\u200b`
|
|
||||||
)
|
)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.addField(
|
.addFields(
|
||||||
"System",
|
{
|
||||||
`**❯ Platform:** ${process.platform}
|
name: `General`,
|
||||||
**❯ Uptime:** ${utils.timer(os.uptime() * 1000, { long: true })}
|
value: `
|
||||||
**❯ CPU:**
|
<:nyx_owner:897418259433943120> Owner ❯ <@452076196419600394>
|
||||||
|
Bot ❯ ${client.user.tag}
|
||||||
|
Bot ID ❯ \`${client.user.id}\`
|
||||||
|
Created on ❯ \`${utc(client.user.createdTimestamp).format(
|
||||||
|
"MMMM Do YYYY"
|
||||||
|
)}\``,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `Bot Stats`,
|
||||||
|
value: `
|
||||||
|
Servers ❯ ${client.guilds.cache.size.toLocaleString()}
|
||||||
|
Users ❯ ${client.guilds.cache
|
||||||
|
.reduce((a, b) => a + b.memberCount, 0)
|
||||||
|
.toLocaleString()}
|
||||||
|
Channels ❯ \`${client.channels.cache.size.toLocaleString()}\`
|
||||||
|
Commands ❯ \`${client.commands.size}\`
|
||||||
|
`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.addFields(
|
||||||
|
{
|
||||||
|
name: `Platform`,
|
||||||
|
value: `
|
||||||
|
NYX ❯ \`v${version}\`
|
||||||
|
Discord.js ❯ \`v${djsversion}\`
|
||||||
|
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 Cores: ${os.cpus().length}
|
||||||
\u3000 Model: ${core.model}
|
\u3000 Model: ${core.model}
|
||||||
\u3000 Speed: ${core.speed}MHz`
|
\u3000 Speed: ${core.speed}MHz
|
||||||
|
**`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
.addFields({
|
||||||
|
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
|
||||||
|
**Research & Documentation**\n\u3000𝔔𝓻𝔦ค𝔁𝔖ค𝔦ӄø#0690\n\u3000Thunder#2128\n
|
||||||
|
**Website**\n\u3000Chunchunmaru#8570`,
|
||||||
|
})
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp();
|
.setTimestamp();
|
||||||
await interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,15 +16,16 @@ module.exports = {
|
||||||
if (!args[0]) {
|
if (!args[0]) {
|
||||||
await interaction.deleteReply();
|
await interaction.deleteReply();
|
||||||
const emoji = {
|
const emoji = {
|
||||||
CODM: "<a:AA99_codm_logo:840231960441257995>",
|
CODM: "<a:codm:897030768793104385>",
|
||||||
Config: "<:staff:840231971526803467>",
|
Config: "<a:config:896990033561669762>",
|
||||||
Economy: client.currency,
|
Economy: client.currency,
|
||||||
Fun: "<a:lollll:804325253265621012>",
|
Fun: "<a:fun:896889821816053790>",
|
||||||
Moderation: "🔨",
|
Moderation: "<:discordmod:897364105730617364>",
|
||||||
Utilities: "⚙",
|
Information: "<a:information:894962394932064346>",
|
||||||
Music: "<a:music:840231980692144130>",
|
Utilities: "<a:utilites:897233087941988392>",
|
||||||
Giveaway: "<a:DankCat:798963811902160896>",
|
Music: "<a:music:897017864085712936>",
|
||||||
Information: "ℹ",
|
Giveaway: "<a:confetti:896763534682226758>",
|
||||||
|
NSFW: "🍑",
|
||||||
};
|
};
|
||||||
const directories = [
|
const directories = [
|
||||||
...new Set(client.slashCommands.map(cmd => cmd.directory)),
|
...new Set(client.slashCommands.map(cmd => cmd.directory)),
|
||||||
|
@ -44,27 +45,41 @@ module.exports = {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
const embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`**${client.user.username} commands**`)
|
.setTitle(`**NYX's Commands**`)
|
||||||
.setDescription(`Please choose a category in the dropdown menu`)
|
.setDescription(`Please choose a category in the dropdown menu`)
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setAuthor(
|
.addFields(
|
||||||
`Requested by ${interaction.user.tag}`,
|
{
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
name: ":link: **Invite Me**",
|
||||||
|
value: `[Click Here](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=4231314550&scope=bot%20applications.commands)`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "<:support1:867093614403256350> **Need Help ?**",
|
||||||
|
value: `[Support Server](https://discord.gg/SbQHChmGcp)`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "<:YouTube:841186450497339412> **Video Guide**",
|
||||||
|
value: `[How to use Slash Coammands](https://youtu.be/YSKDu1gKntY)`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `<:nyx_description:897379659665264650> Documentation`,
|
||||||
|
value: `[Click here](${client.docs})`,
|
||||||
|
inline: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "<a:booster:896527475063025704> **Premium**",
|
||||||
|
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,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
.addField(
|
.setURL(client.docs)
|
||||||
"**Invite Link**",
|
.setThumbnail(
|
||||||
`**Invite me to your server by clicking [here](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=4231314550&scope=bot%20applications.commands)**`
|
"https://media.discordapp.net/attachments/896078559293104128/896392631565828146/nyx_logo_transparent.webp"
|
||||||
)
|
)
|
||||||
.addField(
|
|
||||||
"**Support Server Invite**",
|
|
||||||
"**Join the support server by clicking [here](https://discord.gg/SbQHChmGcp)**"
|
|
||||||
)
|
|
||||||
.addField(
|
|
||||||
"**Premium**",
|
|
||||||
"**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 **"
|
|
||||||
)
|
|
||||||
.setURL(client.web)
|
|
||||||
.setFooter(
|
.setFooter(
|
||||||
`Requested by ${interaction.user.tag}`,
|
`Requested by ${interaction.user.tag}`,
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
|
@ -103,11 +118,7 @@ module.exports = {
|
||||||
const category = categories.find(u => u.directory === directory);
|
const category = categories.find(u => u.directory === directory);
|
||||||
const newembed = new Discord.MessageEmbed()
|
const newembed = new Discord.MessageEmbed()
|
||||||
.setTitle(
|
.setTitle(
|
||||||
`${emoji[directory]}${directory} Commands${emoji[directory]}`
|
`${emoji[directory]} ${directory} Commands ${emoji[directory]}`
|
||||||
)
|
|
||||||
.setAuthor(
|
|
||||||
`Requested by ${interaction.user.tag}`,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
|
@ -125,16 +136,20 @@ module.exports = {
|
||||||
} else {
|
} else {
|
||||||
const command = client.slashCommands.get(args[0].toLowerCase());
|
const command = client.slashCommands.get(args[0].toLowerCase());
|
||||||
if (!command) {
|
if (!command) {
|
||||||
await interaction.followUp({
|
interaction.followUp({
|
||||||
content: `There isn't any command or category named "${args[0]}"`,
|
content: `There isn't any command or category named "${args[0]}"`,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (command.UserPerms && Array.isArray(command.UserPerms)) {
|
if (command.UserPerms && Array.isArray(command.UserPerms)) {
|
||||||
UserPermissions = command.UserPerms;
|
UserPermissions = command.UserPerms;
|
||||||
} else UserPermissions = [command.UserPerms ? command.UserPerms : ""];
|
} else {
|
||||||
|
UserPermissions = [command.UserPerms ? command.UserPerms : ""];
|
||||||
|
}
|
||||||
if (command.BotPerms && Array.isArray(command.BotPerms)) {
|
if (command.BotPerms && Array.isArray(command.BotPerms)) {
|
||||||
BotPermissions = command.BotPerms;
|
BotPermissions = command.BotPerms;
|
||||||
} else BotPermissions = [command.BotPerms ? command.BotPerms : ""];
|
} else {
|
||||||
|
BotPermissions = [command.BotPerms ? command.BotPerms : ""];
|
||||||
|
}
|
||||||
const BotPerms = BotPermissions.map(x =>
|
const BotPerms = BotPermissions.map(x =>
|
||||||
x
|
x
|
||||||
.split("_")
|
.split("_")
|
||||||
|
@ -167,7 +182,7 @@ module.exports = {
|
||||||
if (command.UserPerms) {
|
if (command.UserPerms) {
|
||||||
embed.addField("**Required User Permission**:", UserPerms);
|
embed.addField("**Required User Permission**:", UserPerms);
|
||||||
}
|
}
|
||||||
if (command.BotPerm) {
|
if (command.BotPerms) {
|
||||||
embed.addField("**Required Bot Permission**:", BotPerms);
|
embed.addField("**Required Bot Permission**:", BotPerms);
|
||||||
}
|
}
|
||||||
embed
|
embed
|
||||||
|
@ -178,7 +193,7 @@ module.exports = {
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setColor(client.color);
|
.setColor(client.color);
|
||||||
await interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,16 +9,17 @@ module.exports = {
|
||||||
const messageping = msg.createdTimestamp - interaction.createdTimestamp;
|
const messageping = msg.createdTimestamp - interaction.createdTimestamp;
|
||||||
await msg.delete();
|
await msg.delete();
|
||||||
const Embed = new MessageEmbed()
|
const Embed = new MessageEmbed()
|
||||||
.setTitle("🏓 Pong!")
|
.setTitle("<a:pong:897383314405605436> Pong!")
|
||||||
.setAuthor(
|
.setAuthor(
|
||||||
`${interaction.user.username}`,
|
`${interaction.user.username}`,
|
||||||
interaction.user.displayAvatarURL()
|
interaction.user.displayAvatarURL()
|
||||||
)
|
)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
`📨 • **Message Latency** \`${Math.floor(
|
`\n 📨 • **Message Latency** \`${Math.floor(messageping)}ms\`
|
||||||
messageping
|
\n🛰️ • **Bot Latency** \`${Math.round(client.ws.ping)}ms\``
|
||||||
)}ms\`\n🛰️ • **Bot Latency** \`${Math.round(client.ws.ping)}ms\``
|
|
||||||
)
|
)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
.setColor(
|
.setColor(
|
||||||
messageping < 350
|
messageping < 350
|
||||||
? "GREEN"
|
? "GREEN"
|
||||||
|
@ -26,6 +27,6 @@ module.exports = {
|
||||||
? "YELLOW"
|
? "YELLOW"
|
||||||
: "RED"
|
: "RED"
|
||||||
);
|
);
|
||||||
await interaction.followUp({ embeds: [Embed] });
|
interaction.followUp({ embeds: [Embed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: "servericon",
|
|
||||||
description: "View the icon of the server",
|
|
||||||
category: "Information",
|
|
||||||
type: "CHAT_INPUT",
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const Embed = new MessageEmbed()
|
|
||||||
.setTitle(`Icon of ${interaction.guild.name}`)
|
|
||||||
.setURL(client.web)
|
|
||||||
.setTimestamp()
|
|
||||||
.setFooter(`Requested by ${interaction.user.tag}`)
|
|
||||||
.setImage(interaction.guild.iconURL({ dynamic: true, size: 2048 }));
|
|
||||||
await interaction.followUp({ embeds: [Embed] });
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -68,86 +68,116 @@ module.exports = {
|
||||||
.setTitle("**Server Information**")
|
.setTitle("**Server Information**")
|
||||||
.setAuthor(`${g.name}`, g.iconURL({ dynamic: true }))
|
.setAuthor(`${g.name}`, g.iconURL({ dynamic: true }))
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
|
.setDescription(g.description || "No Description")
|
||||||
.setThumbnail(g.iconURL({ dynamic: true, size: 1024 }))
|
.setThumbnail(g.iconURL({ dynamic: true, size: 1024 }))
|
||||||
.addField(`🎫 Name of server:`, g.name, true)
|
.addFields(
|
||||||
.addField(`🆔 ID of server`, g.id, true)
|
{
|
||||||
.addField(`🔗 Vanity Link`, `${vanityInvite}`, true)
|
name: `<:nyx_owner:897418259433943120> Owner Info`,
|
||||||
.addField("👩💻 Owner", `${owner}`, true)
|
value: `
|
||||||
.addField("👩💻 Owner ID", `\`${owner.id}\``, true)
|
**Owner ❯** ${owner}
|
||||||
.addField(`👥 No. of Members`, g.memberCount.toString(), true)
|
🆔 **Owner ID ❯** \`${owner.id}\`
|
||||||
.addField(
|
`,
|
||||||
`🤖 No. of Bots:`,
|
inline: true,
|
||||||
members.filter(member => member.user.bot).size.toString(),
|
},
|
||||||
true
|
{
|
||||||
)
|
name: `Misc Info`,
|
||||||
.addField(
|
value: `
|
||||||
`🚶 Humans:`,
|
**🆔 Server ID ❯** \`${g.id}\`
|
||||||
members.filter(member => !member.user.bot).size.toString(),
|
**🌐 Region ❯** ${regions[g.regions]}
|
||||||
true
|
**🔗 Vanity Link ❯** [${vanityCode}](${vanityInvite})
|
||||||
)
|
`,
|
||||||
.addField(
|
inline: true,
|
||||||
"🧷 Channels",
|
},
|
||||||
`#️⃣ ${textChannel} **Text** Channels\n 🔊 ${voiceChannel} **Voice** Channels\n 📁 ${categoryChannel} **Categories**`,
|
{
|
||||||
true
|
name: `<a:nyx_last_update:897381474330873887> Creation Date`,
|
||||||
)
|
value: `
|
||||||
.addField(`😗 Emojis:`, g.emojis.cache.size.toString(), true)
|
${moment(g.createdTimestamp).format("LL")} ${moment(
|
||||||
.addField(
|
g.createdTimestamp
|
||||||
`👻 Animated Emoji\'s:`,
|
).format("LTS")} (${moment(g.createdTimestamp).fromNow()})`,
|
||||||
g.emojis.cache.filter(emoji => emoji.animated).size.toString(),
|
inline: true,
|
||||||
true
|
},
|
||||||
)
|
// Row 2
|
||||||
.addField(
|
{
|
||||||
`👔 Roles [${roles.length}]`,
|
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.length < 10
|
||||||
? roles.join(" **|** ")
|
? roles.join(" **|** ")
|
||||||
: roles.length > 10
|
: roles.length > 10
|
||||||
? `${roles.slice(0, 10).join(" **|** ")}\n+${
|
? `${roles.slice(0, 10).join(" **|** ")}\n+${
|
||||||
roles.length - 10
|
roles.length - 10
|
||||||
} roles...`
|
} roles...`
|
||||||
: "None",
|
: "None"
|
||||||
true
|
}`,
|
||||||
|
inline: true,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
.addField(`📃 Description`, g.description || "No Description", true)
|
.setURL(vanityCode ? vanityInvite : "https://cath.gq/")
|
||||||
.addField(
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL());
|
||||||
`♨ Boost`,
|
interaction.followUp({ embeds: [embed] });
|
||||||
`Tier: ${
|
|
||||||
g.premiumTier == "TIER_3"
|
|
||||||
? "3"
|
|
||||||
: g.premiumTier == "TIER_2"
|
|
||||||
? "2"
|
|
||||||
: g.premiumTier == "TIER_1"
|
|
||||||
? "1"
|
|
||||||
: "0"
|
|
||||||
}\nCount: ${g.premiumSubscriptionCount || "0"}`,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.addField(
|
|
||||||
"💢 Explicit Filter",
|
|
||||||
filterLevels[g.explicitContentFilter],
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.addField(
|
|
||||||
`🚧 Verification Level`,
|
|
||||||
verificationLevels[g.verificationLevel],
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.addField(
|
|
||||||
"🗺 Community Features",
|
|
||||||
utils.fixFeatures(g.features) || "No Community Features",
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.addField("👨🏻🤝👨🏻 Partnered", g.partnered ? "Yes" : "No", true)
|
|
||||||
.addField("✅ Verified", g.verified ? "Yes" : "No", true)
|
|
||||||
.addField(
|
|
||||||
`📅 Created at`,
|
|
||||||
`${moment(g.createdTimestamp).format("LL")} ${moment(
|
|
||||||
g.createdTimestamp
|
|
||||||
).format("LTS")} (${moment(g.createdTimestamp).fromNow()})`,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.setURL(client.web)
|
|
||||||
.setFooter(`Made by ${client.author}`);
|
|
||||||
await interaction.followUp({ embeds: [embed] });
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,27 +36,27 @@ module.exports = {
|
||||||
"Early Verified Bot Developer<:discord_bot_dev:840231906200387666>",
|
"Early Verified Bot Developer<:discord_bot_dev:840231906200387666>",
|
||||||
DISCORD_CERTIFIED_MODERATOR: "Discord Certified Moderator",
|
DISCORD_CERTIFIED_MODERATOR: "Discord Certified Moderator",
|
||||||
};
|
};
|
||||||
let status;
|
// let status;
|
||||||
switch (member.presence.status) {
|
// switch (member.presence.status) {
|
||||||
case "online":
|
// case "online":
|
||||||
status = "<:online:840231921123721237>Online";
|
// status = "<:online:840231921123721237>Online";
|
||||||
break;
|
// break;
|
||||||
case "dnd":
|
// case "dnd":
|
||||||
status = "<:do_not_disturb:840231907715448842>Do Not Disturb";
|
// status = "<:do_not_disturb:840231907715448842>Do Not Disturb";
|
||||||
break;
|
// break;
|
||||||
case "idle":
|
// case "idle":
|
||||||
status = "<:idle:840231935485149184>Idle";
|
// status = "<:idle:840231935485149184>Idle";
|
||||||
break;
|
// break;
|
||||||
case "offline":
|
// case "offline":
|
||||||
status = "<:offline:840231954897305620>Offline";
|
// status = "<:offline:840231954897305620>Offline";
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
let x = Date.now() - member.user.createdAt;
|
const x = Date.now() - member.user.createdAt;
|
||||||
let y =
|
const y =
|
||||||
Date.now() - interaction.guild.members.cache.get(member.id).joinedAt;
|
Date.now() - interaction.guild.members.cache.get(member.id).joinedAt;
|
||||||
let created = Math.floor(x / 86400000);
|
const created = Math.floor(x / 86400000);
|
||||||
let joined = Math.floor(y / 86400000);
|
const joined = Math.floor(y / 86400000);
|
||||||
let nickname =
|
const nickname =
|
||||||
member.nickname !== undefined && member.nickname !== null
|
member.nickname !== undefined && member.nickname !== null
|
||||||
? member.nickname
|
? member.nickname
|
||||||
: "None";
|
: "None";
|
||||||
|
@ -66,39 +66,39 @@ module.exports = {
|
||||||
.map(role => role.toString())
|
.map(role => role.toString())
|
||||||
.slice(0, -1);
|
.slice(0, -1);
|
||||||
const userFlags = member.user.flags.toArray();
|
const userFlags = member.user.flags.toArray();
|
||||||
let createdate = moment(member.user.createdAt).format(
|
const createdate = moment(member.user.createdAt).format(
|
||||||
"dddd, MMMM Do YYYY, HH:mm:ss"
|
"dddd, MMMM Do YYYY, HH:mm:ss"
|
||||||
);
|
);
|
||||||
let joindate = moment(member.joinedAt).format(
|
const joindate = moment(member.joinedAt).format(
|
||||||
"dddd, MMMM Do YYYY, HH:mm:ss"
|
"dddd, MMMM Do YYYY, HH:mm:ss"
|
||||||
);
|
);
|
||||||
let activities;
|
// let activities;
|
||||||
if (member.presence.activities[0] && member.presence.activities[1]) {
|
// if (member.presence.activities[0] && member.presence.activities[1]) {
|
||||||
activities = member.presence.activities[1].name;
|
// activities = member.presence.activities[1].name;
|
||||||
} else if (
|
// } else if (
|
||||||
member.presence.activities[0] &&
|
// member.presence.activities[0] &&
|
||||||
!member.presence.activities[1]
|
// !member.presence.activities[1]
|
||||||
) {
|
// ) {
|
||||||
activities = "None";
|
// activities = "None";
|
||||||
} else activities = "None";
|
// } else activities = "None";
|
||||||
const embed = new MessageEmbed()
|
const embed = new MessageEmbed()
|
||||||
.setAuthor(
|
.setAuthor(
|
||||||
member.user.tag,
|
member.user.tag,
|
||||||
member.user.displayAvatarURL({ dynamic: true, size: 2048 })
|
member.user.displayAvatarURL({ dynamic: true, size: 2048 })
|
||||||
)
|
)
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setColor(client.color)
|
.setColor(member.displayHexColor || client.color)
|
||||||
.setURL(client.web)
|
.setURL(client.web)
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 512 }))
|
.setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 512 }))
|
||||||
.setColor(member.displayHexColor || "02023a")
|
.setColor(member.displayHexColor || client.color)
|
||||||
.addField(
|
.addField(
|
||||||
"User",
|
"User",
|
||||||
`**❯ Username:** ${member.user.username}
|
`**❯ Username:** ${member.user.username}
|
||||||
**❯ Discriminator:** ${member.user.discriminator}
|
**❯ Discriminator:** ${member.user.discriminator}
|
||||||
**❯ Nickname:** ${nickname}
|
**❯ Nickname:** ${nickname}
|
||||||
**❯ ID:** ${member.id}
|
**❯ User ID:** ${member.id}
|
||||||
**❯ Flags:** ${
|
**❯ Badge:** ${
|
||||||
userFlags.length
|
userFlags.length
|
||||||
? userFlags.map(flag => flags[flag]).join(" **|** ")
|
? userFlags.map(flag => flags[flag]).join(" **|** ")
|
||||||
: "None"
|
: "None"
|
||||||
|
@ -108,10 +108,8 @@ module.exports = {
|
||||||
size: 2048,
|
size: 2048,
|
||||||
})})
|
})})
|
||||||
**❯ Time Created:** ${createdate} \nSince ${created} day(s) ago
|
**❯ Time Created:** ${createdate} \nSince ${created} day(s) ago
|
||||||
**❯ Status:** ${status}
|
|
||||||
**❯ Game:** ${activities}
|
|
||||||
\u200b`
|
\u200b`
|
||||||
)
|
) //* *❯ Status:** ${status}* *❯ Game:** ${activities}
|
||||||
.addField(
|
.addField(
|
||||||
"Member",
|
"Member",
|
||||||
`**❯ Highest Role:** ${
|
`**❯ Highest Role:** ${
|
||||||
|
@ -129,6 +127,6 @@ module.exports = {
|
||||||
}
|
}
|
||||||
\u200b`
|
\u200b`
|
||||||
);
|
);
|
||||||
await interaction.followUp({ embeds: [embed] });
|
interaction.followUp({ embeds: [embed] });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
const { MessageEmbed } = require("discord.js");
|
|
||||||
module.exports = {
|
|
||||||
name: "announce",
|
|
||||||
UserPerm: ["MANAGE_MESSAGES"],
|
|
||||||
BotPerm: ["MANAGE_MESSAGES"],
|
|
||||||
usage: "{Channel} (Message)",
|
|
||||||
description: "Announce a message to a channel.",
|
|
||||||
category: "Moderation",
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
type: 7,
|
|
||||||
name: "channel",
|
|
||||||
description: "The channel to announce",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 3,
|
|
||||||
name: "message",
|
|
||||||
description: "The message to announce",
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
run: async (client, interaction, args) => {
|
|
||||||
const channel = interaction.guild.channels.cache.get(args[0]);
|
|
||||||
if (channel.type !== "GUILD_TEXT") {
|
|
||||||
return interaction.followUp({
|
|
||||||
content: "Please provide a text channel",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
channel.send({
|
|
||||||
embeds: [
|
|
||||||
new MessageEmbed()
|
|
||||||
.setAuthor(
|
|
||||||
`Sent by ${interaction.member.displayName}`,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
|
||||||
.setDescription(args[1])
|
|
||||||
.setTimestamp()
|
|
||||||
.setColor(client.color),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
interaction.followUp({
|
|
||||||
embeds: [
|
|
||||||
new MessageEmbed()
|
|
||||||
.setTitle(`Message Announced`)
|
|
||||||
.addField("**Moderator**", interaction.user.tag, true)
|
|
||||||
.setTimestamp()
|
|
||||||
.setFooter(
|
|
||||||
interaction.member.displayName,
|
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
|
||||||
)
|
|
||||||
.setColor(client.color),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
106
command/Moderation/ban.js
Normal file
106
command/Moderation/ban.js
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "ban",
|
||||||
|
description: "Ban an user",
|
||||||
|
BotPerms: ["BAN_MEMBERS"],
|
||||||
|
UserPerms: ["BAN_MEMBERS"],
|
||||||
|
usage: "(User) {Reason}",
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to ban",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "reason",
|
||||||
|
description: "The reason you want to ban",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 4,
|
||||||
|
name: "messages",
|
||||||
|
description:
|
||||||
|
"Number of days of messages to delete, must be between 0 and 7, inclusive",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const target = interaction.guild.members.cache.get(args[0]);
|
||||||
|
let reason = args[1] || "No reason provided";
|
||||||
|
const days = args[2] || 0;
|
||||||
|
if (days > 7 || days < 0) {
|
||||||
|
interaction.followUp({
|
||||||
|
content:
|
||||||
|
"Number of days of messages to delete must be between 0 and 7, inclusive",
|
||||||
|
});
|
||||||
|
} else if (!target) {
|
||||||
|
try {
|
||||||
|
const one = await client.users.fetch(args[0]);
|
||||||
|
if (one.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't ban yourself" });
|
||||||
|
}
|
||||||
|
if (reason.length > 1024) reason = reason.slice(0, 1021) + "...";
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Banned")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", one.tag, true)
|
||||||
|
.addField("**Reason**", reason, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
await interaction.guild.members.ban(one.id, {
|
||||||
|
reason,
|
||||||
|
days,
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (target.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't ban yourself" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.member.roles.highest.position <
|
||||||
|
target.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "You don't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.guild.me.roles.highest.position <
|
||||||
|
target.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "Bot doesn't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (reason.length > 1024) reason = reason.slice(0, 1021) + "...";
|
||||||
|
try {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Banned")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", target.user.tag, true)
|
||||||
|
.addField("**Reason**", reason, true)
|
||||||
|
.addField(
|
||||||
|
"Number of days of messages to delete",
|
||||||
|
days.toString(),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
await interaction.guild.members.ban(target.id, {
|
||||||
|
reason,
|
||||||
|
days,
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
58
command/Moderation/kick.js
Normal file
58
command/Moderation/kick.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "kick",
|
||||||
|
description: "Kick an user",
|
||||||
|
UserPerms: ["KICK_MEMBERS"],
|
||||||
|
BotPems: ["KICK_MEMBERS"],
|
||||||
|
usage: "(User) {Reason}",
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to kick",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "reason",
|
||||||
|
description: "The reason you want to kick",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
const target = interaction.guild.members.cache.get(args[0]);
|
||||||
|
let reason = args[1] || "No reason provided";
|
||||||
|
if (target.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't kick yourself" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.member.roles.highest.position < target.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "You don't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.guild.me.roles.highest.position <
|
||||||
|
target.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "Bot doesn't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (reason.length > 1024) reason = reason.slice(0, 1021) + "...";
|
||||||
|
try {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Kicked")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", target.user.tag, true)
|
||||||
|
.addField("**Reason**", reason, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
await target.kick(reason);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
53
command/Moderation/lock.js
Normal file
53
command/Moderation/lock.js
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "lockdown",
|
||||||
|
description: "Lock a channel",
|
||||||
|
UserPerms: ["MANAGE_CHANNELS"],
|
||||||
|
BotPerms: ["MANAGE_CHANNELS"],
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 5,
|
||||||
|
name: "choice",
|
||||||
|
description: "Whether lock or unlock the channel",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
if (args[0]) {
|
||||||
|
interaction.channel.permissionOverwrites
|
||||||
|
.create(interaction.guild.id, { SEND_MESSAGES: false })
|
||||||
|
.then(() => {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Channel Locked")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**Channel**", `<#${interaction.channel.id}>`, true)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
interaction.channel.permissionOverwrites
|
||||||
|
.create(interaction.guild.id, { SEND_MESSAGES: true })
|
||||||
|
.then(() => {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Channel Unlocked")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**Channel**", `<#${interaction.channel.id}>`, true)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
119
command/Moderation/mute.js
Normal file
119
command/Moderation/mute.js
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "mute",
|
||||||
|
description: "Mute an user.",
|
||||||
|
usage: "(User) (Time) {Reason}",
|
||||||
|
UserPerms: ["MANAGE_MESSAGES"],
|
||||||
|
BotPerms: ["MANAGE_ROLES"],
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to mute",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "reason",
|
||||||
|
description: "The reason you want to mute",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 3,
|
||||||
|
name: "time",
|
||||||
|
description: "The time you want to mute",
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils, data) => {
|
||||||
|
try {
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
const reason = args[1];
|
||||||
|
const time = args[2] || "gg";
|
||||||
|
const mutedrole = interaction.guild.roles.cache.get(data.Guild.Muterole);
|
||||||
|
if (user.id === interaction.user.id) {
|
||||||
|
interaction.followUp({ content: "You can't mute yourself" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.member.roles.highest.position < user.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "You don't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
interaction.guild.me.roles.highest.position <
|
||||||
|
user.roles.highest.position
|
||||||
|
) {
|
||||||
|
interaction.followUp({ content: "Bot doesn't have enough hierarchy" });
|
||||||
|
}
|
||||||
|
if (reason.length > 1024) reason = reason.slice(0, 1021) + "...";
|
||||||
|
if (!utils.ms(time)) {
|
||||||
|
if (!mutedrole) {
|
||||||
|
const newrole = await interaction.guild.roles.create({
|
||||||
|
name: "Muted",
|
||||||
|
reason: "For muted people",
|
||||||
|
permissions: [],
|
||||||
|
});
|
||||||
|
await client.data.setMuterole(interaction.guild.id, newrole.id);
|
||||||
|
interaction.guild.channels.cache
|
||||||
|
.filter(c => c.type === "GUILD_TEXT")
|
||||||
|
.forEach(async channel => {
|
||||||
|
await channel.permissionOverwrites.create(newrole, {
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
ADD_REACTIONS: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await user.roles.add(mutedrole.id);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Muted")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", user.user.tag, true)
|
||||||
|
.addField("**Reason**", reason, true)
|
||||||
|
.setFooter(
|
||||||
|
`Made by ${client.author}`,
|
||||||
|
client.user.displayAvatarURL()
|
||||||
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
}
|
||||||
|
} else if (!mutedrole) {
|
||||||
|
const newrole = await interaction.guild.roles.create({
|
||||||
|
name: "Muted",
|
||||||
|
reason: "For muted people",
|
||||||
|
permissions: [],
|
||||||
|
});
|
||||||
|
await client.data.setMuterole(interaction.guild.id, newrole.id);
|
||||||
|
interaction.guild.channels.cache
|
||||||
|
.filter(c => c.type === "GUILD_TEXT")
|
||||||
|
.forEach(async channel => {
|
||||||
|
await channel.permissionOverwrites.create(newrole, {
|
||||||
|
SEND_MESSAGES: false,
|
||||||
|
ADD_REACTIONS: false,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await user.roles.add(mutedrole.id);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Muted")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", user.user.tag, true)
|
||||||
|
.addField("**Time**", utils.ms(utils.ms(time), { long: true }), true)
|
||||||
|
.addField("**Reason**", reason, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
setTimeout(async () => {
|
||||||
|
await user.roles.remove(mutedrole.id);
|
||||||
|
}, utils.ms(time));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
67
command/Moderation/nuke.js
Normal file
67
command/Moderation/nuke.js
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
const { MessageAttachment } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "nuke",
|
||||||
|
description: "Destroy a channel and create a new one",
|
||||||
|
usage: "{Channel}",
|
||||||
|
UserPerms: ["MANAGE_CHANNELS"],
|
||||||
|
BotPerms: ["MANAGE_CHANNELS"],
|
||||||
|
category: "Moderation",
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
try {
|
||||||
|
const filter = m => m.author.id === interaction.user.id;
|
||||||
|
interaction.followUp({
|
||||||
|
content: "Do you want to nuke this channel?\n (Type `Yes` or `no`)",
|
||||||
|
});
|
||||||
|
interaction.channel
|
||||||
|
.awaitMessages({
|
||||||
|
filter,
|
||||||
|
max: 1,
|
||||||
|
time: 99999,
|
||||||
|
errors: ["time"],
|
||||||
|
})
|
||||||
|
.then(msg => {
|
||||||
|
const message = msg.first();
|
||||||
|
if (
|
||||||
|
message.content.toLowerCase() == "yes" ||
|
||||||
|
message.content.toLowerCase() == "y"
|
||||||
|
) {
|
||||||
|
const channel = message.guild.channels.cache.get(
|
||||||
|
message.channel.id
|
||||||
|
);
|
||||||
|
channel.clone().then(ch => {
|
||||||
|
if (channel.parent) {
|
||||||
|
ch.setParent(channel.parent.id);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
ch.setPosition(channel.position);
|
||||||
|
channel.delete();
|
||||||
|
ch.send({
|
||||||
|
files: [
|
||||||
|
new MessageAttachment(
|
||||||
|
"https://i.pinimg.com/originals/06/c3/92/06c392b847166a9a671bfcd590d8fff7.gif"
|
||||||
|
),
|
||||||
|
],
|
||||||
|
content: "\nFriendly nuke has been launched.",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
message.content.toLowerCase() == "no" ||
|
||||||
|
message.content.toLowerCase() == "n"
|
||||||
|
) {
|
||||||
|
message.delete();
|
||||||
|
return message.channel.send({
|
||||||
|
content: "The process has been cancelled",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
message.delete();
|
||||||
|
return message.channel.send({
|
||||||
|
content: `The process has been cancelled due to invalid response`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -5,25 +5,25 @@ module.exports = {
|
||||||
description: "Clear messages in a specific channel",
|
description: "Clear messages in a specific channel",
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
name: 7,
|
name: "channel",
|
||||||
description: "Channel where the messages to be deleted",
|
description: "Channel where the messages to be deleted",
|
||||||
type: "CHANNEL",
|
type: 7,
|
||||||
required: true,
|
required: true,
|
||||||
|
channelTypes: ["GUILD_TEXT"],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 4,
|
name: "amount",
|
||||||
description: "Amount of message in range of 1-100 to be deleted",
|
description: "Amount of message in range of 1-100 to be deleted",
|
||||||
type: "NUMBER",
|
type: 4,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
type: "CHAT_INPUT",
|
type: "CHAT_INPUT",
|
||||||
run: async (client, interaction, args) => {
|
run: async (client, interaction, args) => {
|
||||||
try {
|
try {
|
||||||
let query = interaction.options.get("amount");
|
const query = args[1];
|
||||||
let ch = interaction.options.get("channel");
|
const channel = interaction.guild.channels.cache.get(args[0]);
|
||||||
let channel = interaction.guild.channels.cache.get(ch.value);
|
if (query > 100) {
|
||||||
if (query.value > 100) {
|
|
||||||
return interaction.followUp({
|
return interaction.followUp({
|
||||||
content: "The amount of messages must be in range of 1-100",
|
content: "The amount of messages must be in range of 1-100",
|
||||||
});
|
});
|
||||||
|
@ -34,7 +34,7 @@ module.exports = {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const limit = await interaction.channel.messages.fetch({
|
const limit = await interaction.channel.messages.fetch({
|
||||||
limit: query.value,
|
limit: query,
|
||||||
});
|
});
|
||||||
await channel.bulkDelete(limit, true).then(async m => {
|
await channel.bulkDelete(limit, true).then(async m => {
|
||||||
const results = {};
|
const results = {};
|
||||||
|
@ -57,11 +57,7 @@ module.exports = {
|
||||||
}`,
|
}`,
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
.addField(
|
.addField("Amount of Message Deleted", `${m.size}/${query}`, true)
|
||||||
"Amount of Message Deleted",
|
|
||||||
`${m.size}/${query.value}`,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.addField(
|
.addField(
|
||||||
"Authors",
|
"Authors",
|
||||||
`${userMessageMap
|
`${userMessageMap
|
||||||
|
@ -69,11 +65,12 @@ module.exports = {
|
||||||
.join("\n")}`,
|
.join("\n")}`,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
.setTimestamp()
|
|
||||||
.setFooter(
|
.setFooter(
|
||||||
interaction.member.nickname
|
`Made by ${client.author}`,
|
||||||
? interaction.member.nickname
|
client.user.displayAvatarURL()
|
||||||
: interaction.user.username,
|
)
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(
|
||||||
interaction.user.displayAvatarURL({ dynamic: true })
|
interaction.user.displayAvatarURL({ dynamic: true })
|
||||||
)
|
)
|
||||||
.setColor(client.color),
|
.setColor(client.color),
|
||||||
|
@ -82,6 +79,7 @@ module.exports = {
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
59
command/Moderation/role.js
Normal file
59
command/Moderation/role.js
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "role",
|
||||||
|
UserPerms: ["MANAGE_ROLES"],
|
||||||
|
BotPerms: ["MANAGE_ROLES"],
|
||||||
|
usage: "(Role) (User)",
|
||||||
|
description: "Add/Remove a role for an user",
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The person you want to add/remove role",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 8,
|
||||||
|
name: "role",
|
||||||
|
description: "The role you want to add/remove",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
try {
|
||||||
|
const target = interaction.guild.members.cache.get(args[0]);
|
||||||
|
const role = interaction.guild.roles.cache.get(args[1]);
|
||||||
|
if (role.managed) {
|
||||||
|
interaction.followUp({ content: "You must provide a non bot role" });
|
||||||
|
} else if (target.roles.cache.has(role.id)) {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Role Removed")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", target.user.tag, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction
|
||||||
|
.followUp({ embeds: [embed] })
|
||||||
|
.then(await target.roles.remove(role.id));
|
||||||
|
} else {
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("Role Added")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", target.user.tag, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction
|
||||||
|
.followUp({ embeds: [embed] })
|
||||||
|
.then(await target.roles.add(role.id));
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
|
@ -3,7 +3,7 @@ module.exports = {
|
||||||
name: "slowmode",
|
name: "slowmode",
|
||||||
UserPerms: ["MANAGE_CHANNELS"],
|
UserPerms: ["MANAGE_CHANNELS"],
|
||||||
description: "Set slowmode at a specific channel",
|
description: "Set slowmode at a specific channel",
|
||||||
BotPerm: "MANAGE_CHANNELS",
|
BotPerms: ["MANAGE_CHANNELS"],
|
||||||
usage: "(Time)",
|
usage: "(Time)",
|
||||||
category: "Moderation",
|
category: "Moderation",
|
||||||
run: async (client, interaction, args, utils) => {
|
run: async (client, interaction, args, utils) => {
|
||||||
|
@ -31,7 +31,7 @@ module.exports = {
|
||||||
const slowmoEmbed = new Discord.MessageEmbed()
|
const slowmoEmbed = new Discord.MessageEmbed()
|
||||||
.setColor(client.color)
|
.setColor(client.color)
|
||||||
.setTitle("Slowmode")
|
.setTitle("Slowmode")
|
||||||
.setFooter(`Made by ${client.author}`)
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
.setTimestamp()
|
.setTimestamp()
|
||||||
.setAuthor(
|
.setAuthor(
|
||||||
`Requested by ${interaction.user.tag}`,
|
`Requested by ${interaction.user.tag}`,
|
||||||
|
|
34
command/Moderation/unban.js
Normal file
34
command/Moderation/unban.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "unban",
|
||||||
|
description: "Unban an user",
|
||||||
|
UserPerms: ["BAN_MEMBERS"],
|
||||||
|
BotPerms: ["BAN_MEMBERS"],
|
||||||
|
usage: "(User)",
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The person you want to unban",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args) => {
|
||||||
|
try {
|
||||||
|
const user = await interaction.guild.members.unban(args[0]);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Unbanned")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", user.tag, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
39
command/Moderation/unmute.js
Normal file
39
command/Moderation/unmute.js
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
const { MessageEmbed } = require("discord.js");
|
||||||
|
module.exports = {
|
||||||
|
name: "unmute",
|
||||||
|
UserPerms: ["MANAGE_MESSAGES"],
|
||||||
|
BotPerms: ["MANAGE_ROLES"],
|
||||||
|
usage: "(User)",
|
||||||
|
description: "Unmute an user",
|
||||||
|
category: "Moderation",
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
type: 6,
|
||||||
|
name: "user",
|
||||||
|
description: "The user you want to unmute",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
run: async (client, interaction, args, utils, data) => {
|
||||||
|
try {
|
||||||
|
const user = interaction.guild.members.cache.get(args[0]);
|
||||||
|
const mutedrole = interaction.guild.roles.cache.get(data.Guild.Muterole);
|
||||||
|
if (!mutedrole) {
|
||||||
|
interaction.followUp({ content: "Mute role not found in database" });
|
||||||
|
}
|
||||||
|
await user.roles.remove(mutedrole);
|
||||||
|
const embed = new MessageEmbed()
|
||||||
|
.setTitle("User Unmuted")
|
||||||
|
.addField("**Moderator**", interaction.user.tag, true)
|
||||||
|
.addField("**User**", user.user.tag, true)
|
||||||
|
.setFooter(`Made by ${client.author}`, client.user.displayAvatarURL())
|
||||||
|
.setTimestamp()
|
||||||
|
.setThumbnail(interaction.user.displayAvatarURL({ dynamic: true }))
|
||||||
|
.setColor(client.color);
|
||||||
|
interaction.followUp({ embeds: [embed] });
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
interaction.followUp({ content: `**Error**: ${e.message}` });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue