42 Commits
Author SHA1 Message Date
SowinskiBraeden 80c065c408 Merge pull request #5 from SowinskiBraeden/update/redirect-login
update/redirect-login
2021-12-28 19:06:53 -08:00
SowinskiBraeden d3d5f94df2 update/redirect-login 2021-12-28 19:06:22 -08:00
SowinskiBraeden e8bb22b69f Merge pull request #4 from SowinskiBraeden/update_login
Update login
2021-12-27 16:37:44 -08:00
SowinskiBraeden 57522a03ad update/version-2.0.0 2021-12-27 10:09:59 -08:00
SowinskiBraeden 1a4d130ad9 update/disonnect-discord 2021-12-27 10:08:11 -08:00
SowinskiBraeden c37133211c Merge pull request #3 from SowinskiBraeden/revert-2-update_login
Revert "update login"
2021-12-25 11:41:35 -08:00
SowinskiBraeden 1da3f590e2 Revert "update login" 2021-12-25 11:41:13 -08:00
SowinskiBraeden a78e1cdd77 Merge pull request #2 from SowinskiBraeden/update_login
update login for new website Oauth2 handler
2021-12-24 18:21:23 -08:00
SowinskiBraeden 2ff1aa5153 update login 2021-12-24 18:15:14 -08:00
SowinskiBraeden dd1db5c9c9 Remove Repeated Command 2021-11-29 21:14:39 -08:00
SowinskiBraeden 7838cf3fbb Bug Fixes 2021-11-20 13:16:52 -08:00
SowinskiBraeden 9f75974b7e Revoke/Reinstate license + reformat help 2021-11-20 12:55:16 -08:00
SowinskiBraeden 7c8a339e27 PingOnPanic feature 2021-11-17 16:58:19 -08:00
SowinskiBraeden 0b312947f1 Have multiple preferred channels 2021-11-09 20:05:02 -08:00
SowinskiBraeden c09484f617 1.8.7 allowedRoles 2021-11-09 09:16:19 -08:00
SowinskiBraeden 13e830e439 Update Discord Invite LINK 2021-10-31 12:09:44 -07:00
SowinskiBraeden 7bab3836f7 Update Version # & fix spelling mistake 2021-10-20 17:44:37 -07:00
SowinskiBraeden c4644ce44d New preferred channels 2021-10-19 12:01:57 -07:00
SowinskiBraeden 4f4de80ed7 Merge branch 'master' of https://github.com/Braeden57/LPS-Bot 2021-10-18 20:12:29 -07:00
SowinskiBraeden 02c0e0c554 Update version # 2021-10-18 20:12:00 -07:00
SowinskiBraeden d745ec29ad Merge pull request #1 from SowinskiBraeden/join-leave-community
Join leave community
2021-10-18 20:06:49 -07:00
SowinskiBraeden d0b8c802d1 Add community check 2021-10-18 20:05:58 -07:00
SowinskiBraeden f54dd72317 Neater Visuals + join/leave community 2021-10-18 19:47:26 -07:00
SowinskiBraeden 65c5f88e94 Merge branch 'master' of https://github.com/Braeden57/LPS-Bot 2021-10-18 09:24:20 -07:00
SowinskiBraeden 60630c77e6 Add basic viewable Statistics 2021-10-18 09:23:46 -07:00
Braeden Sowinski 79db375eba Update README.md 2021-10-16 11:01:50 -07:00
Braeden Sowinski dc55d3876c Update README 2021-10-16 11:00:58 -07:00
SowinskiBraeden 7119d01096 hotfix 2021-10-15 18:32:38 -07:00
SowinskiBraeden 6a1d1bf167 Hotfix 2021-10-15 18:17:33 -07:00
SowinskiBraeden ad7bd3e8b7 Update Procfile 2021-10-15 18:08:26 -07:00
SowinskiBraeden 44fae74f40 update .gitignore 2021-10-15 18:05:25 -07:00
SowinskiBraeden 3872a5d242 Add beta worker 2021-10-15 18:02:43 -07:00
SowinskiBraeden 1b56608d07 fix spelling mistake 2021-10-15 17:53:09 -07:00
SowinskiBraeden f174e603a3 Merge branch 'master' of https://github.com/Braeden57/LPS-Bot 2021-10-15 17:51:38 -07:00
SowinskiBraeden 2a300a2bb6 update .gitignore 2021-10-15 17:51:21 -07:00
Braeden Sowinski a15a598459 Remove dev config 2021-10-15 17:47:56 -07:00
SowinskiBraeden 5960153618 Updtate for Alpha Beta & Master release 2021-10-15 17:46:40 -07:00
SowinskiBraeden 267eab304d Update Help 2021-09-27 10:38:25 -07:00
Braeden Sowinski 9aa714a7c7 Create README.md
Adds Basic README.md
2021-09-27 10:35:49 -07:00
Braeden Sowinski 3df5e4d617 Update issue & Feature templates
Adds templates for Bug reports and Feature requests.
2021-09-27 10:34:55 -07:00
SowinskiBraeden 1c3a5ae83a 1.7.1 Production improvments 2021-09-27 10:27:00 -07:00
SowinskiBraeden 8dac1d4262 1.7.1 Production improvments 2021-09-27 10:26:35 -07:00
13 changed files with 798 additions and 692 deletions

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Use command.....
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+4 -1
View File
@@ -4,5 +4,8 @@ node_modules/*
# test file
test.js
# Dev version
# Dev Launch
dev.js
# Dev config
dev-config.json
+602 -211
View File
@@ -1,4 +1,5 @@
const MongoClient = require('mongodb').MongoClient;
const ObjectId = require('mongodb').ObjectID
const randomstring = require('randomstring');
const io = require('socket.io-client');
const Discord = require('discord.js');
@@ -6,21 +7,21 @@ const client = new Discord.Client();
class Bot {
constructor(dev, token, config) {
constructor(dev, token, config, mongoURI, dbo) {
this.dev = dev;
this.token = token;
this.config = require(config);
this.connectMongo();
this.connectMongo(mongoURI, dbo);
}
async connectMongo() {
this.db = await MongoClient.connect(this.config.mongoURI,{useUnifiedTopology:true});
this.dbo = this.db.db(this.config.dbo);
async connectMongo(mongoURI, dbo) {
this.db = await MongoClient.connect(mongoURI,{useUnifiedTopology:true});
this.dbo = this.db.db(dbo);
}
// Updates Prefix
async newPrefix(message, n) {
if (n[0]==undefined) return message.channel.send(`You must provide a **new prefix** ${message.author}!`);
if (n[0]==undefined) return message.channel.send(`You must provide a \`new prefix\` ${message.author}`);
if (n[0].length<1) return message.channel.send('Your new prefix must be \`1\` character!')
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$set:{"server.prefix":n[0]}},function(err, res) {
if (err) throw err;
@@ -30,67 +31,35 @@ class Bot {
// Remote Login
async remoteLogin(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (user) return message.author.send(`You are already logged in ${message.author}! Use \`?logout\` to logout or \`?account\` to see your logged in account.`);
if (args.length==0) return message.author.send(`You must provide a **email** and **login token** ${message.author}!`);
if (!args[0]==null||!args[0]==undefined&&args[1]==null||args[1]==undefined) return message.author.send(`You must provide a **login token** ${message.author}!`);
user = await this.dbo.collection("users").findOne({"user.email":args[0]}).then(user => user);
if (user==null||user==undefined) return message.author.send(`Cannot find the email **${args[0]}** ${message.author}!`);
// Check discord Login Token
if (args[1]==user.user.discordLoginToken) {
// Modify user to include user.user.discord
let discord = {
id: message.author.id,
username: message.author.username,
discriminator: message.author.discriminator
}
let newToken = randomstring.generate(12);
this.dbo.collection("users").updateOne(
{
"user.email": args[0]
},
{
$set: {
"user.discord": discord,
"user.discordLoginToken": newToken
}
}, function(err,res) {
if (err) throw err;
return message.author.send(`Logged in as **${user.user.username}** ${message.author}!`);
}
);
} else {
return message.author.send(`Incorrect login token ${message.author}! Try again or Regenerate your Discord Login Token.`);
}
return message.channel.send('Login from Lines Police CAD account management https://www.linespolice-cad.com/');
}
async remoteLogout(message) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You cannot logout if your not logged in ${message.author}!`);
this.dbo.collection("users").updateOne({"user.discord.id":message.author.id},{$unset:{"user.discord":""}},function(err,res) {
if (!user) return message.channel.send(`You cannot logout if your not logged in ${message.author}`);
this.dbo.collection("users").updateOne({"user.discord.id":message.author.id},{$unset:{"user.discord":""}, $set:{"user.discordConnected":false}},function(err,res) {
if (err) throw err;
message.channel.send(`Succesfully logged out ${message.author}!`);
message.channel.send(`Succesfully disconnected you Discord account ${message.author}`);
});
}
async account(message) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (user==null) return message.channel.send(`You are not logged in ${message.author}!`);
if (user==null) return message.channel.send(`You are not logged in ${message.author}`);
message.author.send(`${message.author} Logged in as **${user.user.username}** | **${user.user.email}**`);
}
async nameSearch(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
let data;
if (user.user.activeCommunity=='' || user.user.activeCommunity==null) {
if (args.length==0) return message.channel.send(`You must provide a **First Name**, **Last Name** and **DOB**(mm/dd/yyyy) ${message.author}!`);
if (args.length==1) return message.channel.send(`You're missing a **Last Name** and **DOB**(mm/dd/yyyy) ${message.author}!`);
if (args.length==2) return message.channel.send(`You're missing a **DOB**(mm/dd/yyyy) ${message.author}!`);
if (args.length==0) return message.channel.send(`You must provide a \`First Name\`, \`Last Name\` and \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args.length==1) return message.channel.send(`You're missing a \`Last Name\` and \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args.length==2) return message.channel.send(`You're missing a \`DOB\`(yyyy-mm-dd) ${message.author}`);
}
if (args.length==0) return message.channel.send(`You must provide a **First Name** and **Last Name** ${message.author}!`);
if (args.length==1) return message.channel.send(`You're missing a **Last Name** ${message.author}!`);
if (args.length==0) return message.channel.send(`You must provide a \`First Name\` and \`Last Name\` ${message.author}`);
if (args.length==1) return message.channel.send(`You're missing a \`Last Name\` ${message.author}`);
if (user.user.activeCommunity=='' || user.user.activeCommunity==null) {
data = {
@@ -119,7 +88,7 @@ class Bot {
if (results.user._id==user._id) {
if (results.civilians.length == 0) {
return message.channel.send(`Name **${args[0]} ${args[1]}** not found ${message.author}`);
return message.channel.send(`Name \`${args[0]} ${args[1]}\` not found ${message.author}`);
}
for (let i = 0; i < results.civilians.length; i++) {
@@ -140,12 +109,12 @@ class Bot {
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Name Search Results')
.addFields(
{ name: `**First Name**`, value: `**${results.civilians[i].civilian.firstName}**`, inline: true },
{ name: `**Last Name**`, value: `**${results.civilians[i].civilian.lastName}**`, inline: true },
{ name: `**DOB**`, value: `**${results.civilians[i].civilian.birthday}**`, inline: true },
{ name: `**Drivers License**`, value: `**${licenceStatus}**`, inline: true },
{ name: `**Firearm Licence**`, value: `**${firearmLicence}**`, inline: true },
{ name: `**Gender**`, value: `**${results.civilians[i].civilian.gender}**`, inline: true }
{ name: `**First Name**`, value: `\`${results.civilians[i].civilian.firstName}\``, inline: true },
{ name: `**Last Name**`, value: `\`${results.civilians[i].civilian.lastName}\``, inline: true },
{ name: `**DOB**`, value: `\`${results.civilians[i].civilian.birthday}\``, inline: true },
{ name: `**Drivers License**`, value: `\`${licenceStatus}\``, inline: true },
{ name: `**Firearm Licence**`, value: `\`${firearmLicence}\``, inline: true },
{ name: `**Gender**`, value: `\`${results.civilians[i].civilian.gender}\``, inline: true }
)
// Check Other details
let address = results.civilians[i].civilian.address;
@@ -154,28 +123,28 @@ class Bot {
let weight = results.civilians[i].civilian.weight;
let eyeColor = results.civilians[i].civilian.eyeColor;
let hairColor = results.civilians[i].civilian.hairColor;
if (address != null && address != undefined && address != '') nameResult.addFields({ name: `**Address**`, value: `**${address}**`, inline: true });
if (occupation != null && occupation != undefined && occupation != '') nameResult.addFields({ name: `**Occupation**`, value: `**${occupation}**`, inline: true });
if (address != null && address != undefined && address != '') nameResult.addFields({ name: `**Address**`, value: `\`${address}\``, inline: true });
if (occupation != null && occupation != undefined && occupation != '') nameResult.addFields({ name: `**Occupation**`, value: `\`${occupation}\``, inline: true });
if (height!=null&&height!=undefined&&height!="NaN"&&height!='') {
if (results.civilians[i].civilian.heightClassification=='imperial') {
let ft = Math.floor(height/12);
let inch = height%12;
nameResult.addFields({ name: '**Height**', value: `**${ft}'${inch}"**`, inline: true });
nameResult.addFields({ name: '**Height**', value: `\`${ft}'${inch}"\``, inline: true });
} else {
nameResult.addFields({ name: '**Height**', value: `**${height}cm**`, inline: true });
nameResult.addFields({ name: '**Height**', value: `\`${height}cm\``, inline: true });
}
}
if (weight!=null&&weight!=undefined&&weight!='') {
if (results.civilians[i].civilian.weightClassification=='imperial') {
nameResult.addFields({ name: '**Weight**', value: `**${weight}lbs.**`, inline: true });
nameResult.addFields({ name: '**Weight**', value: `\`${weight}lbs.\``, inline: true });
} else {
nameResult.addFields({ name: '**Weight**', value: `**${weight}kgs.**`, inline: true });
nameResult.addFields({ name: '**Weight**', value: `\`${weight}kgs.\``, inline: true });
}
}
if (eyeColor!=null&&eyeColor!=undefined&&eyeColor!='') nameResult.addFields({name:'**Eye Color**',value:`**${eyeColor}**`,inline:true});
if (hairColor!=null&&hairColor!=undefined&&hairColor!='') nameResult.addFields({name:'**Hair Color**',value:`**${hairColor}**`,inline:true});
nameResult.addFields({name:'**Organ Donor**',value:`**${results.civilians[i].civilian.organDonor}**`,inline:true});
nameResult.addFields({name:'**Veteran**',value:`**${results.civilians[i].civilian.veteran}**`,inline:true});
if (eyeColor!=null&&eyeColor!=undefined&&eyeColor!='') nameResult.addFields({name:'**Eye Color**',value:`\`${eyeColor}\``,inline:true});
if (hairColor!=null&&hairColor!=undefined&&hairColor!='') nameResult.addFields({name:'**Hair Color**',value:`\`${hairColor}\``,inline:true});
nameResult.addFields({name:'**Organ Donor**',value:`\`${results.civilians[i].civilian.organDonor}\``,inline:true});
nameResult.addFields({name:'**Veteran**',value:`\`${results.civilians[i].civilian.veteran}\``,inline:true});
message.channel.send(nameResult);
}
}
@@ -185,8 +154,8 @@ class Bot {
async plateSearch(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
if (args.length==0) return message.channel.send(`You are missing a **Plate #** ${message.author}`);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (args.length==0) return message.channel.send(`You are missing a \`Plate #\` ${message.author}`);
let data = {
user: user,
query: {
@@ -200,7 +169,7 @@ class Bot {
if (results.user._id==user._id) {
if (results.vehicles.length == 0) {
return message.channel.send(`Plate Number **${args[0]}** not found ${message.author}`);
return message.channel.send(`Plate Number \`${args[0]}\` not found ${message.author}`);
}
for (let i = 0; i < results.vehicles.length; i++) {
@@ -211,22 +180,22 @@ class Bot {
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Plate Search Results')
.addFields(
{ name: `**Plate #**`, value: `**${results.vehicles[i].vehicle.plate}**`, inline: true },
{ name: `**Vin #**`, value: `**${results.vehicles[i].vehicle.vin}**`, inline: true },
{ name: `**Model**`, value: `**${results.vehicles[i].vehicle.model}**`, inline: true },
{ name: `**Color**`, value: `**${results.vehicles[i].vehicle.color}**`, inline: true },
{ name: `**Owner**`, value: `**${results.vehicles[i].vehicle.registeredOwner}**`, inline: true },
{ name: `**Plate #**`, value: `\`${results.vehicles[i].vehicle.plate}\``, inline: true },
{ name: `**Vin #**`, value: `\`${results.vehicles[i].vehicle.vin}\``, inline: true },
{ name: `**Model**`, value: `\`${results.vehicles[i].vehicle.model}\``, inline: true },
{ name: `**Color**`, value: `\`${results.vehicles[i].vehicle.color}\``, inline: true },
{ name: `**Owner**`, value: `\`${results.vehicles[i].vehicle.registeredOwner}\``, inline: true },
)
// Other details
let validRegistration = results.vehicles[i].vehicle.validRegistration;
let validInsurance = results.vehicles[i].vehicle.validInsurance;
let stolen = results.vehicles[i].vehicle.isStolen;
if (validRegistration=='1') plateResult.addFields({ name: `**Registration**`, value: `**Valid**`, inline: true });
if (validRegistration=='2') plateResult.addFields({ name: `**Registration**`, value: `**InValid**`, inline: true });
if (validInsurance=='1') plateResult.addFields({ name: `**Insurance**`, value: `**Valid**`, inline: true });
if (validInsurance=='2') plateResult.addFields({ name: `**Insurance**`, value: `**InValid**`, inline: true });
if (stolen=='1') plateResult.addFields({ name: `**Stolen**`, value: `**No**`, inline: true });
if (stolen=='2') plateResult.addFields({ name: `**Stolen**`, value: `**Yes**`, inline: true });
if (validRegistration=='1') plateResult.addFields({ name: `**Registration**`, value: `\`Valid\``, inline: true });
if (validRegistration=='2') plateResult.addFields({ name: `**Registration**`, value: `\`InValid\``, inline: true });
if (validInsurance=='1') plateResult.addFields({ name: `**Insurance**`, value: `\`Valid\``, inline: true });
if (validInsurance=='2') plateResult.addFields({ name: `**Insurance**`, value: `\`InValid\``, inline: true });
if (stolen=='1') plateResult.addFields({ name: `**Stolen**`, value: `\`No\``, inline: true });
if (stolen=='2') plateResult.addFields({ name: `**Stolen**`, value: `\`Yes\``, inline: true });
message.channel.send(plateResult);
}
}
@@ -236,8 +205,8 @@ class Bot {
async firearmSearch(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
if (args.length==0) return message.channel.send(`You are missing a **Serial Number** ${message.author}`);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (args.length==0) return message.channel.send(`You are missing a \`Serial Number\` ${message.author}`);
let data = {
user: user,
query: {
@@ -261,14 +230,14 @@ class Bot {
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Firearm Search Results')
.addFields(
{ name: `**Serial Number**`, value: `**${results.firearms[i].firearm.serialNumber}**`, inline: true },
{ name: `**Type**`, value: `**${results.firearms[i].firearm.weaponType}**`, inline: true },
{ name: `**Owner**`, value: `**${results.firearms[i].firearm.registeredOwner}**`, inline: true },
{ name: `**Serial Number**`, value: `\`${results.firearms[i].firearm.serialNumber}\``, inline: true },
{ name: `**Type**`, value: `\`${results.firearms[i].firearm.weaponType}\``, inline: true },
{ name: `**Owner**`, value: `\`${results.firearms[i].firearm.registeredOwner}\``, inline: true },
)
// Other details
let isStolen = results.firearms[i].firearm.isStolen;
if (isStolen=="false"||isStolen==false) firearmResult.addFields({name:`**Stolen**`,value:'**No**',inline: true});
if (isStolen=="true"||isStolen==true) firearmResult.addFields({name:`**Stolen**`,value:'**Yes**',inline: true});
if (isStolen=="false"||isStolen==false) firearmResult.addFields({name:`**Stolen**`,value:'\`No\`',inline: true});
if (isStolen=="true"||isStolen==true) firearmResult.addFields({name:`**Stolen**`,value:'\`Yes\`',inline: true});
message.channel.send(firearmResult);
}
}
@@ -277,25 +246,31 @@ class Bot {
}
async checkStatus(message, args) {
if (args.length==0) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
message.channel.send(`${message.author}'s status: ${user.user.dispatchStatus} | Set by: ${user.user.dispatchStatusSetBy}`);
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (user.user.activeCommunity == null) return message.channel.send(`You must join a community to use this command ${message.author}`);
if (args.length == 0) {
message.channel.send(`${message.author}'s status: \`${user.user.dispatchStatus}\` | Set by: \`${user.user.dispatchStatusSetBy}\``);
} else {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`Cannot find **${args[0]}** ${message.author}!`);
let targetUserID = args[0].replace('<@!', '').replace('>', '');
let targetUser = await this.dbo.collection("users").findOne({"user.discord.id":targetUserID}).then(user => user);
// This lame line of code to get username without ping on discord
const User = client.users.cache.get(args[0].replace('<@!', '').replace('>', ''));
message.channel.send(`${message.author}, **${User.tag}'s** status: ${user.user.dispatchStatus} | Set by: ${user.user.dispatchStatusSetBy}`);
if (!targetUser) return message.channel.send(`Cannot find **${User.tag}** ${message.author}`);
if (targetUser.user.activeCommunity!=user.user.activeCommunity) {
return message.channel.send(`You are not in the same community as \`${User.tag}\` ${message.author}`);
}
return message.channel.send(`${message.author}, \`${User.tag}'s\` status: \`${targetUser.user.dispatchStatus}\` | Set by: \`${targetUser.user.dispatchStatusSetBy}\``);
}
}
async updateStatus(message, args, prefix) {
let validStatus=['10-8','10-7','10-6','10-11','10-23','10-97','10-15','10-70','10-80', 'Panic', '10-41', '10-42'];
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (user.user.activeCommunity==null) return message.channel.send(`You must join a community to use this command ${message.author}`);
if (args.length==0) return message.channel.send(`You must provide a new status ${message.author} | To see a list of valid statuses, use command \`${prefix}validStatus\`.`);
if (!validStatus.includes(args[0])) return message.channel.send(`**${args[0]}** is a Invalid Status ${message.author}! To see a list of valid statuses, use command \`${prefix}validStatus\`.`);
if (!validStatus.includes(args[0])) return message.channel.send(`\`${args[0]}\` is a Invalid Status ${message.author}! To see a list of valid statuses, use command \`${prefix}validStatus\`.`);
let onDuty=null;
let updateDuty=false;
let status = args[0]
@@ -319,33 +294,22 @@ class Bot {
const socket = io.connect(this.config.socket);
socket.emit('bot_update_status', req);
socket.on('bot_updated_status', (res) => {
message.channel.send(`Succesfully updated status to **${args[0]}** ${message.author}!`);
socket.disconnect();
message.channel.send(`Succesfully updated status to \`${args[0]}\` ${message.author}`);
socket.disconnect();
});
}
async enablePanic(message) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}!`);
// If panic isn't enabled, enable panic
if (user.user.dispatchStatus!='Panic') {
this.updateStatus(message, ['Panic'], null);
let myReq = {
userID: user._id,
userUsername: user.user.username,
activeCommunity: user.user.activeCommunity
}
const socket = io.connect(this.config.socket);
socket.emit('botping');
socket.emit('panic_button_update', myReq);
message.channel.send(`Enabled Panic ${message.author}!`);
// If panic is enabled, set status to Online (panic off)
} else if (user.user.dispatchStatus=='Panic') {
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (user.user.activeCommunity==null) return message.channel.send(`You must join a community to use this command ${message.author}`);
const socket = io.connect(this.config.socket);
// If panic is enabled, disable panic
if (user.user.dispatchStatus=='Panic') {
let myReq = {
userID: user._id,
communityID: user.user.activeCommunity
};
const socket = io.connect(this.config.socket);
socket.emit('clear_panic', myReq);
let myUpdateReq = {
@@ -355,31 +319,326 @@ class Bot {
onDuty: null,
updateDuty: false
};
socket.emit('update_status', myUpdateReq);
message.channel.send(`Disabled Panic ${message.author} and set status to 10-8.`);
socket.emit('bot_update_status', myUpdateReq);
socket.on('bot_updated_status', (res) => {
message.channel.send(`Disabled Panic ${message.author} and set status to \`10-8\`.`);
socket.disconnect();
});
return;
// If panic is disabled, enable panic
} else {
this.updateStatus(message, ['Panic'], null);
let myReq = {
userID: user._id,
userUsername: user.user.username,
activeCommunity: user.user.activeCommunity
}
socket.emit('panic_button_update', myReq);
socket.disconnect();
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.pingOnPanic) return message.channel.send(`Attention <@&${guild.server.pingRole}>! \`${user.user.username}\` has activated panic`);
return;
}
}
async getPrefix(message) {
async updateLicense(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
let data;
if (user.user.activeCommunity=='' || user.user.activeCommunity==null) {
if (args.length==0) return message.channel.send(`You must provide a \`License Status\`, \`First Name\`, \`Last Name\`, \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args.length==1) return message.channel.send(`You're missing a \`First Name\`, \`Last Name\` and \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args.length==2) return message.channel.send(`You're missing a \`Last Name\` and \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args.length==3) return message.channel.send(`You're missing a \`DOB\`(yyyy-mm-dd) ${message.author}`);
if (args[0].toLowerCase()!='revoke'&&args[0].toLowerCase()!='reinstate') return message.channel.send(`Invalid License Status, choose \`revoke\` or \`reinstate\` ${message.author}`);
}
if (args.length==0) return message.channel.send(`You must provide a \`License Status\`, \`First Name\` and \`Last Name\` ${message.author}`);
if (args.length==1) return message.channel.send(`You're missing a \`First Name\` and \`Last Name\` ${message.author}`);
if (args.length==2) return message.channel.send(`You're missing a \`Last Name\` ${message.author}`);
if (args[0].toLowerCase()!='revoke'&&args[0].toLowerCase()!='reinstate') return message.channel.send(`Invalid License Status, choose \`revoke\` or \`reinstate\` ${message.author}`);
if (user.user.activeCommunity=='' || user.user.activeCommunity==null) {
data = {
user: user,
query: {
firstName: args[1],
lastName: args[2],
dateOfBirth: args[3],
activeCommunityID: user.user.activeCommunity
}
}
} else {
data = {
user: user,
query: {
firstName: args[1],
lastName: args[2],
activeCommunityID: user.user.activeCommunity
}
}
}
const socket = io.connect(this.config.socket);
socket.emit("bot_name_search", data);
socket.on("bot_name_search_results", (results) => {
if (results.user._id==user._id) {
if (results.civilians.length == 0) {
return message.channel.send(`Name \`${args[1]} ${args[2]}\` not found ${message.author}`);
}
}
let query = {
_id: results.civilians[0]._id,
status: null,
bot_request: true
};
if (args[0]=='revoke') query.status = 2;
if (args[0]=='reinstate') query.status = 1;
socket.emit("update_drivers_license_status", query);
socket.on("bot_updated_drivers_license_status", (res) => {
if (!res.success) return message.channel.send(`Failed to update license of \`${args[1]} ${args[2]}\` ${message.author}`);
message.channel.send(`Successfully updated license of \`${args[1]} ${args[2]}\` ${message.author}`);
socket.disconnect();
return;
});
});
}
async joinCommunity(message, args) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (args.length==0) return message.channel.send(`You must provide a \`Community Code\` ${message.author}`);
let myReq = {
userID: user._id,
communityCode: args[0]
};
const socket = io.connect(this.config.socket);
socket.emit('bot_join_community', myReq);
socket.on('bot_joined_community', (data) => {
socket.disconnect()
if (data.error) {
return message.channel.send(`${data.error} ${message.author}`);
}
return message.channel.send(`Successfully joined the community \` ${data.commName} \` ${message.author}`)
});
}
async leaveCommunity(message) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
let myReq = {
userID: user._id
};
const socket = io.connect(this.config.socket);
socket.emit('bot_leave_community', myReq);
socket.on('bot_left_community', (data) => {
socket.disconnect()
if (data.error) {
return message.channel.send(`${data.error} ${message.author}`);
}
return message.channel.send(`${data.message} ${message.author}`)
});
}
async community(message) {
let user = await this.dbo.collection("users").findOne({"user.discord.id":message.author.id}).then(user => user);
if (!user) return message.channel.send(`You are not logged in ${message.author}`);
if (user.user.activeCommunity==null) return message.channel.send(`You are not in a community ${message.author}`);
let community = await this.dbo.collection("communities").findOne({_id:ObjectId(user.user.activeCommunity)}).then(community => community);
if (!community) return message.channel.send(`Community not found ${message.author}`);
return message.channel.send(`You are in the community \`${community.community.name}\` ${message.author}`);
}
async setRole(message, args) {
if (args.length==0) return message.channel.send(`You must provide a role ${message.author}`);
let roleid = args[0].replace('<@&', '').replace('>', '');
let role = message.guild.roles.cache.find(x => x.id == roleid);
if (role == undefined) {
return message.channel.send(`Uh Oh! The role ${args[0]} connot be found.`);
} else {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.allowedRole!=undefined&&guild.server.allowedRoles.includes(roleid)) return message.channel.send(`The role ${args[0]} has already been added ${message.author}`);
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$push:{"server.allowedRoles":roleid},$set:{"server.hasCustomRoles":true}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully added ${args[0]} to allowed roles ${message.author}`);
});
}
}
async removeRole(message, args) {
if (args.length==0) return message.channel.send(`You must provide a role ${message.author}`);
let roleid = args[0].replace('<@&', '').replace('>', '');
let role = message.guild.roles.cache.find(x => x.id == roleid);
if (role == undefined) {
return message.channel.send(`Uh Oh! The role ${args[0]} connot be found.`);
} else {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.hasCustomRoles==false) return message.channel.send(`There are no roles to be removed ${message.author}`);
if (!guild.server.allowedRoles.includes(roleid)) return message.channel.send(`The role ${args[0]} is not added to your roles ${message.author}`);
for (let i = 0; i < guild.server.allowedRoles.length; i++) {
if (guild.server.allowedRoles[i]==roleid) {
if ((guild.server.allowedRoles.length-1)==0) {
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$pull:{"server.allowedRoles":roleid},$set:{"server.hasCustomRoles":false}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully removed ${args[0]} from allowed roles ${message.author}! There are no more allowed roles.`);
});
} else if ((guild.server.allowedRoles.length-1)>0) {
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$pull:{"server.allowedRoles":roleid}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully removed ${args[0]} from allowed roles ${message.author}`);
});
}
}
}
}
}
async roles(message) {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.hasCustomRoles==false) {
return message.channel.send('There are no roles set for the bot.');
}
let roles = "Allowed Roles:";
for (let i = 0; i < guild.server.allowedRoles.length; i++) {
if (guild.server.allowedRoles[i] == undefined) break;
roles += `\n<@&${guild.server.allowedRoles[i]}>`;
}
return message.channel.send(roles);
}
async setChannel(message, args) {
if (args.length==0) return message.channel.send(`You must provide a channel ${message.author}`);
let channelid = args[0].replace('<#', '').replace('>', '');
let channel = client.channels.cache.get(channelid);
if (!channel) return message.channel.send(`Cannot find that channel ${message.author}`);
if (channel.type=="voice") return message.channel.send(`Connot set voice channel to preferred channel ${message.author}`);
if (channel.deleted) return message.channel.send(`Connot set deleted channel to preferred channel ${message.author}`);
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.allowedChannels!=undefined&&guild.server.allowedChannels.includes(channelid)) return message.channel.send(`The channel ${args[0]} has already been added ${message.author}`);
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$push:{"server.allowedChannels":channelid},$set:{"server.hasCustomChannels":true}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully added ${args[0]} to allowed channels ${message.author}`);
});
}
async removeChannel(message, args) {
if (args.length==0) return message.channel.send(`You must provide a channel ${message.author}`);
let channelid = args[0].replace('<#', '').replace('>', '');
let channel = client.channels.cache.get(channelid);
if (!channel) return message.channel.send(`Uh Oh! The channel ${args[0]} connot be found.`);
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.hasCustomChannels==false) return message.channel.send(`There are no channels to be removed ${message.author}`);
if (!guild.server.allowedChannels.includes(channelid)) return message.channel.send(`The channel ${args[0]} is not added to your roles ${message.author}`);
for (let i = 0; i < guild.server.allowedChannels.length; i++) {
if (guild.server.allowedChannels[i]==channelid) {
if ((guild.server.allowedChannels.length-1)==0) {
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$pull:{"server.allowedChannels":channelid},$set:{"server.hasCustomChannels":false}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully removed ${args[0]} from allowed channels ${message.author}! There are no more allowed channels.`);
});
} else if ((guild.server.allowedChannels.length-1)>0) {
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$pull:{"server.allowedChannels":channelid}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully removed ${args[0]} from allowed channels ${message.author}`);
});
}
}
}
}
async channels(message) {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
if (guild.server.hasCustomChannels==false) {
return message.channel.send('There are no channels set for the bot.');
}
let channels = "Allowed Channels:";
for (let i = 0; i < guild.server.allowedChannels.length; i++) {
if (guild.server.allowedChannels[i] == undefined) break;
channels += `\n<#${guild.server.allowedChannels[i]}>`;
}
return message.channel.send(channels);
}
async getGuildPresets(message) {
let prefix;
let channelId;
let customRoleStatus;
let customChannelStatus;
let allowedChannels;
if (message.channel.type!="dm") {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
// If not prefix, generate server default
// If guild not found, generate guild default
if (!guild) {
let newGuild = {
server: {
serverID: message.guild.id,
prefix: this.config.defaultPrefix
prefix: this.config.defaultPrefix,
hasCustomRoles: false,
hasCustomChannels: false,
}
}
this.dbo.collection("prefixes").insertOne(newGuild, function(err, res) {
if (err) throw err;
});
prefix = newGuild.server.serverID;
} else prefix = guild.server.prefix;
} else prefix = this.config.defaultPrefix;
return prefix
prefix = newGuild.server.prefix;
customRoleStatus = newGuild.server.hasCustomRoles;
customChannelStatus = newGuild.server.hasCustomChannels;
allowedChannels = null;
} else {
prefix = guild.server.prefix;
customRoleStatus = guild.server.hasCustomRoles;
customChannelStatus = guild.server.hasCustomChannels;
if (guild.server.allowedChannels!=undefined||guild.server.allowedChannels!=null&&guild.server.allowedChannels.length>0) {
allowedChannels = guild.server.allowedChannels;
} else allowedChannels = null;
}
} else {
prefix = this.config.defaultPrefix;
customRoleStatus = false;
customChannelStatus = false;
allowedChannels = null;
}
return {prefix, channelId, customRoleStatus, customChannelStatus, allowedChannels};
}
async checkRoleStatus(message) {
let hasRole = false;
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
// If user has one of any in the list of allowed roles, hasRole is true
for (let i = 0; i < guild.server.allowedRoles.length; i++) {
if (message.member.roles.cache.some(role => role.id == guild.server.allowedRoles[i])) hasRole = true;
}
return hasRole;
}
async togglePingOnPanic(message, args) {
if (args.length==0) return message.channel.send(`You must provide a \`Ping On Role Status\` and a \`role\` to ping ${message.author}`);
if (args[0]=="false") {
// disable ping on panic and remove ping role
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$set:{"server.pingOnPanic":false,"server.pingRole":null}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully disabled ping role on panic ${message.author}`);
});
} else if (args[0]=="true") {
let roleid = args[1].replace('<@&', '').replace('>', '');
let role = message.guild.roles.cache.find(x => x.id == roleid);
if (role == undefined) {
return message.channel.send(`Uh Oh! The role ${args[1]} connot be found.`);
} else {
this.dbo.collection("prefixes").updateOne({"server.serverID":message.guild.id},{$set:{"server.pingRole":roleid,"server.pingOnPanic":true}},function(err, res) {
if (err) throw err;
return message.channel.send(`Successfully set ${args[1]} to be pinged on panic ${message.author}`);
});
}
} else return message.channel.send(`\`${args[0]}\` is an invalid status, use \`true\` or \`false\` ${message.author}`);
}
async getPingOnPanicStatus(message) {
let guild = await this.dbo.collection("prefixes").findOne({"server.serverID":message.guild.id}).then(guild => guild);
return message.channel.send(`Current Ping on Panic Status: ${guild.server.pingOnPanic} ${message.author}`);
}
main() {
@@ -388,101 +647,233 @@ class Bot {
});
// Basic Commands
client.on('message', (message) => {
this.getPrefix(message).then(prefix => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
client.on('message', async (message) => {
let { prefix, channelId, customRoleStatus, customChannelStatus, allowedChannels } = await this.getGuildPresets(message);
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(' ');
const command = args.shift().toLowerCase();
if (customChannelStatus==true&&!allowedChannels.includes(message.channel.id)) {
return message.channel.send(`This is not the preferred channel, please one of the allowed channels. Use \`${prefix}channels\` to see a list of allowed channels ${message.author}`);
}
const args = message.content.slice(prefix.length).trim().split(' ');
const command = args.shift().toLowerCase();
// Valid Statuses Embed
let validStatus = new Discord.MessageEmbed()
// Valid Statuses Embed
const validStatus = new Discord.MessageEmbed()
.setColor('#0099ff')
.setTitle('Lines Police CAD')
.setURL('https://www.linespolice-cad.com/')
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Valid Statuses')
.addFields(
{ name: 'Statuses:', value: `
10-8 | \`On Duty\`
10-7 | \`Off Duty\`
10-6 | \`Busy\`
10-11 | \`Traffic Stop\`
10-23 | \`Arrive on Scene\`
10-97 | \`In Route\`
10-15 | \`Subject in Custody\`
10-70 | \`Foot Pursuit\`
10-80 | \`Vehicle Pursiut\`
`
}
)
// Help Embed
const help = new Discord.MessageEmbed()
.setColor('#0099ff')
.setTitle('**Commands:**')
.setURL('https://discord.gg/w2g2FFmHbF')
.setAuthor('LPS Website & Bot Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Lines Police CAD Bot Commands')
.addFields({
name: `**__Bot Commands:__**`,
value: `
**${prefix}help** - \`Displays this help page\`
**${prefix}stats** - \`Displays current Bot statistics\`
**${prefix}ping** - \`Responds with Pong to check Bot responce\`
`,
inline: false
},
{
name: `**__LPC Commands (1/2):__**`,
value: `
**${prefix}login** <email> <login token> - \`Login to LPS account (DM only command)\`
**${prefix}logout** - \`Logs out of your current logged in account\`
**${prefix}validStatus** - \`Shows list of valid statuses to updade to\`
**${prefix}checkStatus** <user> - \`Check your own or other status\`
**${prefix}updateStatus** <status> - \`Updates your status\`
**${prefix}account** - \`returns logged in account\`
**${prefix}penalCodes** - \`Provides Link to penal codes\`
**${prefix}namedb** <firstName> <lastName> <dob> - \`Searches for Civilian by Name\`
**${prefix}platedb** <licence plate #> - \`Searches for Vehicle by Licence Plate #\`
**${prefix}firearmdb** <Serial #> - \`Searches for Firearms by Serial #\`
**${prefix}panic** - \`Enables/Disables your panic button\`
**${prefix}license** <revoke|reinstate> <firstName> <lastName> <dob> - \`Revoke/Reinstate License\`
`,
inline: true
},
{
name: `**__LPC Command (2/2):__**`,
value: `
**${prefix}roles** - \`Shows a list of allowed roles\`
**${prefix}channels** - \`Shows a list of allowed channels\`
**${prefix}joincommunity** <community code> - \`Joins a community with the given code\`
**${prefix}leavecommunity** - \`Leaves your current active community\`
**${prefix}community** - \`Returns the name of the Community your currenty in\`
`,
inline: false
},
{
name: `**__Admin Commands:__**`,
value: `
**${prefix}setPrefix** <new prefix> - \`Sets new prefix\`
**${prefix}setChannel** <channel> - \`Adds channel to list of allowed channels\`
**${prefix}removeChannel** <channel> - \`Removes channel from list of allowed channels\`
**${prefix}setRole** <role> - \`Adds role to list of allowed roles\`
**${prefix}removeRole** <role> - \`Removes role from list of allowed roles\`
**${prefix}togglePingOnPanic** <true|false> <role> - \`Enable/disable ping role on panic\`
`,
inline: false
})
const stats = new Discord.MessageEmbed()
.setColor('#0099ff')
.setTitle('Lines Police CAD')
.setURL('https://www.linespolice-cad.com/')
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Valid Statuses')
.addFields(
{ name: 'Statuses:', value: `
10-8 | On Duty
10-7 | Off Duty
10-6 | Busy
10-11 | Traffic Stop
10-23 | Arrive on Scene
10-97 | In Route
10-15 | Subject in Custody
10-70 | Foot Pursuit
10-80 | Vehicle Pursiut
`
}
)
.setTitle("Current LPC-Bot Statistics")
.setURL('https://discord.gg/w2g2FFmHbF')
.addField(" \u200B ", "**Channels** : ` " + `${client.channels.cache.size}` + " `")
.addField(" \u200B ", "**Servers** : ` " + `${client.guilds.cache.size}` + " `")
.addField(" \u200B ", "**Users** : ` " + `${client.users.cache.size}` + " `")
// Help Embed
let help = new Discord.MessageEmbed()
.setColor('#0099ff')
.setTitle('**Commands:**')
.setURL('https://discord.gg/jgUW656v2t')
.setAuthor('LPS Website Support', 'https://raw.githubusercontent.com/Linesmerrill/police-cad/master/lines-police-server.png', 'https://discord.gg/jgUW656v2t')
.setDescription('Lines Police CAD Bot Commands')
.addFields(
{ name: `**${prefix}help**`, value: 'Displays this help page', inline: true },
{ name: `**${prefix}ping**`, value: 'Responds with Pong to check Bot responce', inline: true },
{ name: `**${prefix}setPrefix** <new prefix>`, value: 'Sets new prefix (Admin only command)', inline: true },
{ name: `**${prefix}login** <email> <login token>`, value: 'Login to LPS account (DM only command)', inline: true },
{ name: `**${prefix}logout**`, value: 'Logs out of your current logged in account', inline: true },
{ name: `**${prefix}validStatus**`, value: 'Shows list of valid statuses to updade to', inline: true },
{ name: `**${prefix}checkStatus** <user>`, value: 'Leave user blank to check own status', inline: true },
{ name: `**${prefix}updateStatus** <status>`, value: 'Updates your status', inline: true },
{ name: `**${prefix}account**`, value: 'returns logged in account', inline: true },
{ name: `**${prefix}penalCodes**`, value: 'Provides Link to penal codes', inline: true },
{ name: `**${prefix}namedb <firstName> <lastName> <dob>**`, value: 'Searches in your community for name (dob only required if not in a community)', inline: true },
{ name: `**${prefix}platedb <licence plate #>**`, value: 'Searches in your community for Vehicles with the given Licence plate #', inline: true },
{ name: `**${prefix}firearmdb <Serial #>**`, value: 'Searches for Firearms with the given Serial #', inline: true },
{ name: `**${prefix}panic**`, value: 'Enables or disables your panic button', inline: true }
)
if (command == 'ping') message.channel.send('Pong!');
if (command == 'help') message.channel.send(help);
if (command == 'stats') message.channel.send(stats);
if (command == 'setprefix') {
if (message.channel.type=="dm") return message.author.send(`You cannot set a prefix in a dm ${message.author}`);
if(!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.newPrefix(message, args);
}
if (command == 'setchannel') {
if (message.channel.type=="dm") return message.author.send(`You cannot set a channel in a dm ${message.author}`);
if (!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.setChannel(message, args);
}
if (command == 'removechannel') {
if (message.channel.type=="dm") return message.author.send(`You cannot remove a channel in a dm ${message.author}`);
if (!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.removeChannel(message, args);
}
if (command == 'setrole') {
if (message.channel.type=="dm") return message.author.send(`You cannot set a role in a dm ${message.author}`);
if (!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.setRole(message, args);
}
if (command == 'removerole') {
if (message.channel.type=="dm") return message.author.send(`You cannot remove a role in a dm ${message.author}`);
if (!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.removeRole(message, args);
}
if (command == 'togglepingonpanic') {
if (message.channel.type=="dm") return message.author.send(`You cannot remove a role in a dm ${message.author}`);
if (!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.togglePingOnPanic(message, args);
}
if (command == 'roles') {
if (message.channel.type=="dm") return message.author.send(`You cannot see allowed roles in a dm ${message.author}`);
this.roles(message);
}
if (command == 'channels') {
if (message.channel.tpye=="dm") return message.channel.send(`You cannot see allowed channels in a dm ${message.author}`);
this.channels(message);
}
if (command == 'pingonpanic') {
if (message.channel.type=="dm") return message.channel.send(`You cannot see allowed channels in a dm ${message.author}`);
this.getPingOnPanicStatus(message);
}
if (command == 'ping') message.channel.send('Pong!');
if (command == 'help') message.channel.send(help);
if (command == 'setprefix') {
if (message.channel.type=="dm") return message.author.send(`You cannot set a prefix in a dm ${message.author}!`);
if(!message.member.hasPermission(["ADMINISTRATOR","MANAGE_GUILD"])) return message.channel.send(`You don't have permission to used this command ${message.author}`);
this.newPrefix(message, args);
}
// Login
if (command == 'login') {
if (message.channel.type=="text") return message.channel.send(`You must direct message me to use this command ${message.author}!`);
this.remoteLogin(message, args);
}
if (command == 'logout') this.remoteLogout(message);
if (command == 'validstatus') message.channel.send(validStatus);
if (command == 'checkstatus') this.checkStatus(message, args);
if (command == 'updatestatus') this.updateStatus(message, args, prefix);
if (command == 'account') this.account(message);
if (command == 'penalcodes') return message.channel.send('https://www.linespolice-cad.com/penal-code');
if (command == 'namedb') this.nameSearch(message, args);
if (command == 'platedb') this.plateSearch(message, args);
if (command == 'firearmdb') this.firearmSearch(message, args);
if (command == 'panic') this.enablePanic(message);
// Login
if (command == 'login') {
if (message.channel.type=="text") return message.channel.send(`You must direct message me to use this command ${message.author}`);
this.remoteLogin(message, args);
}
if (command == 'logout') this.remoteLogout(message);
if (command == 'validstatus') message.channel.send(validStatus);
if (command == 'checkstatus') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.checkStatus(message, args);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.checkStatus(message, args);
}
if (command == 'updatestatus') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.updateStatus(message, args, prefix);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.updateStatus(message, args, prefix);
}
if (command == 'account') this.account(message);
if (command == 'penalcodes') return message.channel.send('https://www.linespolice-cad.com/penal-code');
if (command == 'namedb') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.nameSearch(message, args);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.nameSearch(message, args);
}
if (command == 'platedb') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.plateSearch(message, args);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.plateSearch(message, args);
}
if (command == 'firearmdb') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.firearmSearch(message, args);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.firearmSearch(message, args);
}
if (command == 'panic') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.enablePanic(message);
} else return message.channel.send(`You don't have permission to use this command ${message.author}`);
} else this.enablePanic(message);
}
if (command == 'license') {
if (customRoleStatus) {
let hasRole = await this.checkRoleStatus(message);
if (hasRole) {
this.updateLicense(message, args);
} else return message.channel.send(`You don't have permission to use this command ${message.author}! `);
} else this.updateLicense(message, args);
}
if (command == 'joincommunity') this.joinCommunity(message, args);
if (command == 'leavecommunity') this.leaveCommunity(message);
if (command == 'community') this.community(message);
// Disabled for dev
// if (command == 'createbolo') this.createBolo(message, args);
// Dev Commands (not visible in help) && easter egg commands
if (command == 'version') message.channel.send(`**LPS-BOT Version : ${this.dev}-${this.config.version}**`)
if (command == 'whatisthemeaningoflife') message.channel.send('42');
if (command == 'whatareyou' || command == 'whoareyou') message.channel.send('Im your friendly neighborhood Lines Police CAD Bot');
if (command == 'whocreatedyou') message.channel.send('Lines Police CAD Developer McDazzzled | https://github.com/SowinskiBraeden');
if (command == 'pingserver') {
const socket = io.connect(this.config.socket);
socket.emit('botping', {message:'hello there'});
socket.on('botpong', (data) => {
console.log(data);
socket.disconnect();
});
}
});
// Dev Commands (not visible in help) && easter egg commands
if (command == 'version') message.channel.send(`**LPS-BOT Version : ${this.dev}-${this.config.version}**`)
if (command == 'whatisthemeaningoflife') message.channel.send('42');
if (command == 'whatareyou' || command == 'whoareyou') message.channel.send('Im your friendly neighborhood Lines Police CAD Bot');
if (command == 'whocreatedyou') message.channel.send('Lines Police CAD Developer McDazzzled | https://github.com/SowinskiBraeden');
if (command == 'pingserver') {
const socket = io.connect(this.config.socket);
socket.emit('botping', {message:'hello there'});
socket.on('botpong', (data) => {
console.log(data);
socket.disconnect();
});
}
});
client.login(this.token);
}
}
+1
View File
@@ -1 +1,2 @@
Worker: node index.js
BetaWorker: node beta.js
+32
View File
@@ -0,0 +1,32 @@
### Lines Police CAD Discord Bot
![lines police cad logo](https://github.com/Linesmerrill/police-cad/blob/master/lines-police-cad.png)
This is the official Lines Police CAD bot for discord integration. It allows you to use Lines Police CAD website features right in your discord channel!
### Requirements :
1. [Node.js](https://nodejs.org/en/)
1. [MongoDB](https://docs.mongodb.com/manual/administration/install-community/)
### Getting Started with Code :
1. [Set Up MongoDB](#setting-up-mongodb) and start mongodb
2. Clone repo from https://github.com/SowinskiBraeden/LPC-Bot.git
3. Run `npm install` to install dependencies.
4. Edit the `index.js` file to have the your correct parameters to run the bot.
The parameters are as follows:
1. Version
2. Bot Token
3. path to config
4. mongoURI
5. mongoDBO
1. Run `npm start` to run the `index.js` file and start the bot.
1. The bot is now ready to use.
### Setting up MongoDB
1. Install mongodb via brew [Step by step instructions](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
1. Start mongodb via brew [Step by step instructions](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/#run-mongodb-community-edition)
### Accessing the Database
1. Locally this will use the knoldus db (or whatever you specify manually)
1. launch mongo via your command-line: `mongo`
1. Use `show dbs` to see all that are available. You should see `knoldus` in the list.
1. Lets use that db: `use knoldus`.
+5
View File
@@ -0,0 +1,5 @@
{
"defaultPrefix": "?",
"version": "Beta 2.0.0",
"socket": "https://police-cad-dev.herokuapp.com/"
}
+4
View File
@@ -0,0 +1,4 @@
const Bot = require('./LPS').Bot;
let client = new Bot('DEVELOPMENT', process.env.token, './beta-config', process.env.mongoURI, process.env.dbo);
client.main()
+2 -5
View File
@@ -1,8 +1,5 @@
{
"defaultPrefix": "?",
"botID": "860298681047056434",
"mongoURI": "mongodb+srv://lps_bot:ktSkHml2BU9EIQ0a@heroku-police-cad-dev.j7aom.mongodb.net/heroku_8pc4g86l?retryWrites=true&w=majority",
"version": "Beta 1.7.0",
"socket": "https://police-cad-dev.herokuapp.com/",
"dbo": "heroku_8pc4g86l"
"version": "2.0.0",
"socket": "https://www.linespolice-cad.com/"
}
-8
View File
@@ -1,8 +0,0 @@
{
"defaultPrefix": "?",
"botID": "860298681047056434",
"mongoURI": "mongodb+srv://lps_bot:ktSkHml2BU9EIQ0a@heroku-police-cad-dev.j7aom.mongodb.net/heroku_8pc4g86l?retryWrites=true&w=majority",
"version": "Beta 1.7.0",
"socket": "http://localhost:8080",
"dbo": "heroku_8pc4g86l"
}
+1 -1
View File
@@ -1,4 +1,4 @@
const Bot = require('./LPS').Bot;
client = new Bot('PRODUCTION', process.env.token, './config');
let client = new Bot('PRODUCTION', process.env.token, './config', process.env.mongoURI, process.env.dbo);
client.main()
+102 -465
View File
@@ -19,40 +19,6 @@
"mime-types": "^2.1.12"
}
},
"@mapbox/node-pre-gyp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz",
"integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==",
"requires": {
"detect-libc": "^1.0.3",
"https-proxy-agent": "^5.0.0",
"make-dir": "^3.1.0",
"node-fetch": "^2.6.1",
"nopt": "^5.0.0",
"npmlog": "^4.1.2",
"rimraf": "^3.0.2",
"semver": "^7.3.4",
"tar": "^6.1.0"
},
"dependencies": {
"nopt": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
"requires": {
"abbrev": "1"
}
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
"lru-cache": "^6.0.0"
}
}
}
},
"@sindresorhus/is": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
@@ -93,76 +59,18 @@
"negotiator": "0.6.2"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"requires": {
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"ansi-align": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
"integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
"integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"requires": {
"string-width": "^3.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
},
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"requires": {
"ansi-regex": "^4.1.0"
}
}
"string-width": "^4.1.0"
}
},
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "4.3.0",
@@ -181,20 +89,6 @@
"picomatch": "^2.0.4"
}
},
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"are-we-there-yet": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
"integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -225,15 +119,6 @@
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
"integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
},
"bcrypt": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz",
"integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==",
"requires": {
"@mapbox/node-pre-gyp": "^1.0.0",
"node-addon-api": "^3.1.0"
}
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -281,18 +166,18 @@
}
},
"boxen": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
"integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
"integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
"requires": {
"ansi-align": "^3.0.0",
"camelcase": "^5.3.1",
"chalk": "^3.0.0",
"cli-boxes": "^2.2.0",
"string-width": "^4.1.0",
"term-size": "^2.1.0",
"type-fest": "^0.8.1",
"widest-line": "^3.1.0"
"camelcase": "^6.2.0",
"chalk": "^4.1.0",
"cli-boxes": "^2.2.1",
"string-width": "^4.2.2",
"type-fest": "^0.20.2",
"widest-line": "^3.1.0",
"wrap-ansi": "^7.0.0"
}
},
"brace-expansion": {
@@ -352,14 +237,14 @@
}
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
},
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -395,11 +280,6 @@
"readdirp": "~3.6.0"
}
},
"chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
},
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -418,11 +298,6 @@
"mimic-response": "^1.0.0"
}
},
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -467,11 +342,6 @@
"xdg-basedir": "^4.0.0"
}
},
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"content-disposition": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
@@ -538,11 +408,6 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"denque": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
@@ -558,11 +423,6 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"detect-libc": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
"discord.js": {
"version": "12.5.3",
"resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz",
@@ -787,73 +647,12 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"requires": {
"minipass": "^3.0.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"optional": true
},
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
"number-is-nan": "^1.0.0"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
"ansi-regex": "^2.0.0"
}
}
}
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -862,19 +661,6 @@
"pump": "^3.0.0"
}
},
"glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -884,11 +670,11 @@
}
},
"global-dirs": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
"integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
"integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
"requires": {
"ini": "1.3.7"
"ini": "2.0.0"
}
},
"got": {
@@ -910,9 +696,9 @@
}
},
"graceful-fs": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
},
"has-cors": {
"version": "1.1.0",
@@ -924,11 +710,6 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"has-yarn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
@@ -958,30 +739,6 @@
}
}
},
"https-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
"requires": {
"agent-base": "6",
"debug": "4"
},
"dependencies": {
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1005,24 +762,15 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
"integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
"integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
},
"ipaddr.js": {
"version": "1.9.1",
@@ -1056,26 +804,26 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"requires": {
"is-extglob": "^2.1.1"
}
},
"is-installed-globally": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
"integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
"integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
"requires": {
"global-dirs": "^2.0.1",
"is-path-inside": "^3.0.1"
"global-dirs": "^3.0.0",
"is-path-inside": "^3.0.2"
}
},
"is-npm": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
"integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig=="
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
"integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA=="
},
"is-number": {
"version": "7.0.0",
@@ -1213,28 +961,6 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"minipass": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
"integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
"requires": {
"yallist": "^4.0.0"
}
},
"minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
"requires": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
}
},
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
},
"mongodb": {
"version": "3.6.8",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.8.tgz",
@@ -1258,20 +984,15 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"node-addon-api": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
"integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
},
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"nodemon": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.9.tgz",
"integrity": "sha512-6O4k7C8f2HQArGpaPBOqGGddjzDLQAqCYmq3tKMeNIbz7Is/hOphMHy2dcY10sSq5wl3cqyn9Iz+Ep2j51JOLg==",
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz",
"integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==",
"requires": {
"chokidar": "^3.2.2",
"debug": "^3.2.6",
@@ -1282,7 +1003,7 @@
"supports-color": "^5.5.0",
"touch": "^3.1.0",
"undefsafe": "^2.0.3",
"update-notifier": "^4.1.0"
"update-notifier": "^5.1.0"
}
},
"nopt": {
@@ -1303,27 +1024,6 @@
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
"integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
},
"npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -1383,11 +1083,6 @@
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
@@ -1488,6 +1183,13 @@
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
}
}
},
"readable-stream": {
@@ -1543,14 +1245,6 @@
"lowercase-keys": "^1.0.0"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -1643,11 +1337,6 @@
"send": "0.17.1"
}
},
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -1659,9 +1348,9 @@
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
"integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ=="
},
"socket.io-client": {
"version": "4.1.2",
@@ -1732,13 +1421,13 @@
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
"strip-ansi": "^6.0.1"
}
},
"string_decoder": {
@@ -1757,11 +1446,11 @@
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"requires": {
"ansi-regex": "^5.0.0"
"ansi-regex": "^5.0.1"
}
},
"strip-json-comments": {
@@ -1777,24 +1466,6 @@
"has-flag": "^3.0.0"
}
},
"tar": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
"minipass": "^3.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
}
},
"term-size": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
"integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="
},
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -1827,9 +1498,9 @@
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
"type-fest": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
},
"type-is": {
"version": "1.6.18",
@@ -1849,27 +1520,9 @@
}
},
"undefsafe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
"integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
"requires": {
"debug": "^2.2.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
},
"unique-string": {
"version": "2.0.0",
@@ -1885,23 +1538,34 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"update-notifier": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
"integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
"integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
"requires": {
"boxen": "^4.2.0",
"chalk": "^3.0.0",
"boxen": "^5.0.0",
"chalk": "^4.1.0",
"configstore": "^5.0.1",
"has-yarn": "^2.1.0",
"import-lazy": "^2.1.0",
"is-ci": "^2.0.0",
"is-installed-globally": "^0.3.1",
"is-npm": "^4.0.0",
"is-installed-globally": "^0.4.0",
"is-npm": "^5.0.0",
"is-yarn-global": "^0.3.0",
"latest-version": "^5.0.0",
"pupa": "^2.0.1",
"latest-version": "^5.1.0",
"pupa": "^2.1.1",
"semver": "^7.3.4",
"semver-diff": "^3.1.1",
"xdg-basedir": "^4.0.0"
},
"dependencies": {
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
"lru-cache": "^6.0.0"
}
}
}
},
"url-parse-lax": {
@@ -1927,43 +1591,6 @@
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
"requires": {
"string-width": "^1.0.2 || 2"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
"string-width": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"requires": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"requires": {
"ansi-regex": "^3.0.0"
}
}
}
},
"widest-line": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
@@ -1972,6 +1599,16 @@
"string-width": "^4.0.0"
}
},
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+1 -1
View File
@@ -13,7 +13,7 @@
"discord.js": "^12.5.3",
"express": "^4.17.1",
"mongodb": "^3.6.8",
"nodemon": "^2.0.9",
"nodemon": "^2.0.14",
"randomstring": "^1.2.1",
"socket.io-client": "^4.1.2"
}