209 lines
7.6 KiB
JavaScript
209 lines
7.6 KiB
JavaScript
const { MongoClient, ServerApiVersion } = require('mongodb');
|
|
require('dotenv').config();
|
|
const uri = process.env.URI
|
|
const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
const client = new MongoClient(uri, {
|
|
useNewUrlParser: true,
|
|
useUnifiedTopology: true,
|
|
serverApi: ServerApiVersion.v1
|
|
});
|
|
const expansions = new Map([
|
|
["ARR", { "min": 0, "max": 50 }],
|
|
["HW", { "min": 51, "max": 60 }],
|
|
["SB", { "min": 61, "max": 70 }],
|
|
["ShB", { "min": 71, "max": 80 }],
|
|
["EW", { "min": 81, "max": 90 }],
|
|
|
|
])
|
|
|
|
async function getDutyData(interaction, database, user) {
|
|
var parameters = {
|
|
"type": interaction.options.getString('type'),
|
|
"min": interaction.options.getInteger('minlevel'),
|
|
"max": interaction.options.getInteger('maxlevel'),
|
|
"expansion": interaction.options.getString('expansion')
|
|
}
|
|
if (!parameters.type) {
|
|
//no type specified, randomizing...
|
|
database.listCollections().toArray(function (err, results) {
|
|
if (err) throw err;
|
|
let random = Math.floor(Math.random() * results.length)
|
|
parameters.type = results[random].name
|
|
})
|
|
}
|
|
|
|
if (parameters.expansion) {
|
|
//check if paramters are set correctly
|
|
if (!parameters.min) {
|
|
parameters.min = expansions.get(parameters.expansion).min
|
|
}
|
|
if (parameters.min < expansions.get(parameters.expansion).min) {
|
|
return console.log("mismatch min level and expansion")
|
|
}
|
|
|
|
if (!parameters.max) {
|
|
parameters.max = expansions.get(parameters.expansion).max
|
|
}
|
|
if (parameters.max > expansions.get(parameters.expansion).max) {
|
|
return console.log("mismatch max level and expansion")
|
|
}
|
|
} else {
|
|
if (!parameters.min) { parameters.min = 0 }
|
|
if (!parameters.max) { parameters.max = 90 }
|
|
}
|
|
|
|
if (parameters.type == 'pvp') {
|
|
parameters.expansion = 'ARR'
|
|
parameters.min = expansions.get(parameters.expansion).min
|
|
parameters.max = expansions.get(parameters.expansion).max
|
|
}
|
|
|
|
await delay(500) //wait for updates
|
|
database.collection(parameters.type).find({
|
|
level: { '$gte': parameters.min, '$lte': parameters.max }
|
|
}).toArray(async function (err, results2) {
|
|
let random = Math.floor(Math.random() * results2.length)
|
|
try {
|
|
let duty = results2[random]
|
|
let reply = `<@${user.id}>, Thou shalt playeth...${duty.name} [Level: ${duty.level}, Type: ${parameters.type}`
|
|
if (duty.expansion) {
|
|
reply += `, Expansion: ${duty.expansion}]`
|
|
} else {
|
|
reply += ']'
|
|
}
|
|
|
|
interaction.reply({
|
|
content: reply
|
|
})
|
|
} catch (error) {
|
|
interaction.reply({
|
|
content: `WAA!! (Impossible Combination found)`
|
|
})
|
|
}
|
|
})
|
|
}
|
|
async function getClassData(interaction, database, user) {
|
|
var collection = interaction.options.getString('type')
|
|
if (!collection) {
|
|
//no type specified
|
|
database.listCollections().toArray(function (err, cResults) {
|
|
let rdm = Math.floor(Math.random() * cResults.length)
|
|
collection = cResults[rdm].name
|
|
})
|
|
}
|
|
|
|
await delay(200) //wait for database.listCollections()
|
|
|
|
database.collection(collection).find({}).toArray(async function (err, results) {
|
|
if (err) throw err;
|
|
var response
|
|
try {
|
|
let rdm = Math.floor(Math.random() * results.length)
|
|
response = `<@${user.id}>, Thou shalt playeth...${results[rdm].job}`
|
|
} catch (error) {
|
|
response = 'Invalid Type specified!'
|
|
}
|
|
interaction.reply({
|
|
content: response,
|
|
})
|
|
})
|
|
}
|
|
module.exports = {
|
|
category: 'Random',
|
|
description: 'randomized helper', // Required for slash commands
|
|
slash: true, // Create both a slash and legacy command
|
|
options: [
|
|
{
|
|
name: "duty",
|
|
type: 1,
|
|
description: "random duty",
|
|
options: [
|
|
{
|
|
name: 'type',
|
|
description: 'what kind of duty would you like?',
|
|
required: false,
|
|
type: 3,
|
|
choices: [
|
|
{ "name": 'Dungeons', "value": "dungeons" },
|
|
{ "name": 'Guildhests', "value": "guildhests" },
|
|
{ "name": 'PvP', "value": "pvp" },
|
|
{ "name": 'Normal Raids', "value": "nraids" },
|
|
{ "name": 'Alliance Raids', "value": "araids" },
|
|
{ "name": 'Trials', "value": "trials" },
|
|
{ "name": 'Extreme', "value": "extreme" },
|
|
{ "name": 'Savage', "value": "savage" },
|
|
{ "name": 'Ultimates', "value": "ultimates" },
|
|
{ "name": 'Roulettes', "value": "roulettes" },
|
|
],
|
|
},
|
|
{
|
|
name: 'minlevel',
|
|
description: 'Start of Level Range, assuming 0 if not specified',
|
|
required: false,
|
|
type: 4,
|
|
},
|
|
{
|
|
name: 'maxlevel',
|
|
description: 'End of Level Range, assuming 90 if not specified',
|
|
required: false,
|
|
type: 4,
|
|
},
|
|
{
|
|
name: 'expansion',
|
|
description: 'which expansion would you like?',
|
|
required: false,
|
|
type: 3,
|
|
choices: [
|
|
{ "name": 'A Realm Reborn', "value": "ARR" },
|
|
{ "name": 'Heavensward', "value": "HW" },
|
|
{ "name": 'Stormblood', "value": "SB" },
|
|
{ "name": 'Shadowbringers', "value": "ShB" },
|
|
{ "name": 'Endwalker', "value": "EW" },
|
|
],
|
|
}
|
|
],
|
|
},
|
|
{
|
|
name: "class",
|
|
type: 1,
|
|
description: "random class",
|
|
options: [
|
|
{
|
|
name: 'type',
|
|
description: 'specify class',
|
|
required: false,
|
|
type: 3,
|
|
choices: [
|
|
{ "name": 'Healer', "value": "healer" },
|
|
{ "name": 'Tank', "value": "tank" },
|
|
{ "name": 'Melee', "value": "melee" },
|
|
{ "name": 'Ranged', "value": "ranged" },
|
|
{ "name": 'Caster', "value": "caster" },
|
|
],
|
|
}
|
|
]
|
|
}
|
|
|
|
],
|
|
callback: ({ interaction, user }) => {
|
|
switch (interaction.options._subcommand) {
|
|
case "duty":
|
|
client.connect(function (err, db) {
|
|
if (err) throw err;
|
|
|
|
var dbDuties = db.db("Duties")
|
|
getDutyData(interaction, dbDuties, user)
|
|
})
|
|
break;
|
|
case "class":
|
|
client.connect(async function (err, db) {
|
|
if (err) throw err;
|
|
|
|
var dbClasses = db.db("Classes")
|
|
getClassData(interaction, dbClasses, user)
|
|
})
|
|
default:
|
|
break;
|
|
}
|
|
},
|
|
} |