You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
4.7 KiB
JavaScript

const { Client } = require(`@androz2091/insta.js`),
Collection = require(`@discordjs/collection`)
path = require(`path`);
4 years ago
class InstaBot extends Client {
constructor(options) {
super(options);
[`commands`, `aliases`, `cooldowns`].forEach(x => this[x] = new Collection());
this.config = require(`../config`);
this.logger = require(`../Helpers/logger`);
this.usersData = require(`../Models/Users`);
this.groupsData = require(`../Models/Groups`)
this.groupMembersData = require(`../Models/GroupMembers`)
this.databaseCache = {};
this.databaseCache.users = new Collection();
this.databaseCache.groups = new Collection();
this.databaseCache.groupMembers = new Collection();
4 years ago
}
loadCommand(commandPath, commandName) {
try {
const props = new (require(`.${commandPath}${path.sep}${commandName}`))(this);
props.conf.location = commandPath;
if (props.init) {
4 years ago
props.init(this);
}
this.commands.set(props.help.name, props);
props.conf.aliases.forEach((alias) => {
this.aliases.set(alias, props.help.name);
});
return false;
} catch (e) {
return `Unable to load command ${commandName}: ${e}`;
}
}
async unloadCommand(commandPath, commandName) {
4 years ago
let command;
if (this.commands.has(commandName)) {
4 years ago
command = this.commands.get(commandName);
} else if (this.aliases.has(commandName)) {
4 years ago
command = this.commands.get(this.aliases.get(commandName));
}
if (!command) {
4 years ago
return `The command \`${commandName}\` doesn't seem to exist, nor is it an alias. Try again!`;
}
if (command.shutdown) {
4 years ago
await command.shutdown(this);
}
delete require.cache[require.resolve(`.${commandPath}${path.sep}${commandName}.js`)];
return false;
}
async findOrCreateUser({ id: userID }, isLean) {
if (this.databaseCache.users.get(userID)) {
return isLean ? this.databaseCache.users.get(userID).toJSON() : this.databaseCache.users.get(userID);
} else {
let userData = (isLean ? await this.usersData.findOne({ id: userID }).populate(`users`).lean() : await this.usersData.findOne({ id: userID }).populate(`users`));
if (userData) {
if (!isLean) this.databaseCache.users.set(userID, userData);
return userData;
} else {
userData = new this.usersData({ id: userID });
await userData.save();
this.databaseCache.users.set(userID, userData);
return isLean ? userData.toJSON() : userData;
}
}
}
async findOrCreateGroupMember({ id: userID, groupID: groupID }, isLean) {
if (this.databaseCache.groupMembers.get(`${userID}-${groupID}`)) {
return isLean ? this.databaseCache.groupMembers.get(`${userID}-${groupID}`).toJSON() : this.databaseCache.groupMembers.get(`${userID}-${groupID}`);
} else {
let groupMemberData = (isLean ? await this.groupMembersData.findOne({ id: userID, groupID: groupID }).populate(`members`).lean() : await this.groupMembersData.findOne({ id: userID, groupID: groupID }).populate(`members`));
if (groupMemberData) {
if (!isLean) this.databaseCache.groupMembers.set(`${userID}-${groupID}`, groupMemberData);
return groupMemberData;
} else {
groupMemberData = new this.groupMembersData({ id: userID, groupID: groupID });
await groupMemberData.save();
this.databaseCache.groupMembers.set(`${userID}-${groupID}`, groupMemberData);
return isLean ? groupMemberData.toJSON() : groupMemberData;
}
}
}
async findOrCreateGroup({ groupID: groupID }, isLean) {
if (this.databaseCache.groups.get(groupID)) {
return isLean ? this.databaseCache.groups.get(groupID).toJSON() : this.databaseCache.groups.get(groupID);
} else {
let groupData = (isLean ? await this.groupsData.findOne({ groupID: groupID }).populate(`groups`).lean() : await this.groupsData.findOne({ groupID: groupID }).populate(`groups`));
if (groupData) {
if (!isLean) this.databaseCache.groups.set(groupID, groupData);
return groupData;
} else {
groupData = new this.groupsData({ groupID: groupID });
await groupData.save();
this.databaseCache.groups.set(groupID, groupData);
return isLean ? groupData.toJSON() : groupData;
}
}
}
4 years ago
}
module.exports = InstaBot;