Shasha/Main.js

179 lines
No EOL
6.9 KiB
JavaScript

'use strict';
require("./database/mongo");
require("./resources/structures");
const Commando = require('@iceprod/discord.js-commando');
const client = new Commando.Client({
owner: ['820696421912412191', '750335181285490760'],
partials: ["CHANNEL", "GUILD_MEMBER", "MESSAGE", "REACTION", "USER"]
});
require("./resources/tCmd")(client);
if (process.argv.includes("-d")) {
const ex = client.tCmds["debug"];
if (ex) ex.run(client); else console.log("No debug module in tCmds.");
}
const sqlite = require('sqlite');
const configFile = require('./config.json');
const { errLog, trySend, noPerm, getUTCComparison, defaultEventLogEmbed } = require('./resources/functions');
const { join } = require('path');
const getColor = require("./resources/getColor");
const { timestampAt } = require("./resources/debug");
const requireAll = require("require-all");
const lgr = requireAll({ dirname: join(__dirname, "resources/eventsLogger"), recursive: true });
client.registry
.registerGroups([
'utility',
'moderation',
'experiment',
'image',
'fun',
"profile",
"owner"
])
.registerDefaults()
.registerCommandsIn(join(__dirname, 'cmds'));
client.setProvider(
sqlite.open({
filename: join(__dirname, 'settings.sqlite3'),
driver: require("sqlite3").Database
}).then(db => new Commando.SQLiteProvider(db))
).catch(e => errLog(e));
client.on('ready', async () => {
//client.user.setStatus("invisible");
//shaGuild = client.guilds.cache.map(g => g);
//console.log(`Member in ${shaGuild.length} guilds.`);
//const statusChannel = client.channels.cache.get(configFile.statusChannel);
console.log(client.user.tag + ' logged in!');
});
client.on("message", async msg => {
if (!client.matchTimestamp) client.matchTimestamp = 0;//getUTCComparison(msg.createdTimestamp);
if (!msg.author.dbLoaded && !msg.author.bot) await msg.author.dbLoad();
lgr.message.letsChat(msg);
if (!msg.guild) {
//console.log(`(${msg.channel.recipient.id}) ${msg.channel.recipient.tag}: (${msg.author.id}) ${msg.author.tag}: ${msg.content}`);
} else {
if (!msg.guild.dbLoaded) await msg.guild.dbLoad();
lgr.message.giveNickHeart(msg);
}
});
client.on("guildMemberRemove", async (member) => {
//console.log(`User ${memberLeave.displayName} (${memberLeave.user.tag}) (${memberLeave.id}) left ${memberLeave.guild.name} (${memberLeave.guild.id}). Now it has ${memberLeave.guild.memberCount} total members count.`);
if (!member.guild.dbLoaded) await member.guild.dbLoad();
lgr.guildMemberRemove(member);
});
client.on("guildCreate", newShaGuild => {
const shaGuild = client.guilds.cache.map(g => g);
trySend(client, configFile.guildLog, `Joined **${newShaGuild.name}** <:awamazedLife:795227334339985418> I'm in ${shaGuild.length} servers now.`);
});
client.on("guildDelete", leaveShaGuild => {
const shaGuild = client.guilds.cache.map(g => g);
trySend(client, configFile.guildLog, `Left **${leaveShaGuild.name}** <:WhenLife:773061840351657984> I'm in ${shaGuild.length} servers now.`);
});
client.on("guildMemberAdd", async (member) => {
//console.log(`New member ${newMember.displayName} (${newMember.user.tag}) (${newMember.id}) joined ${newMember.guild.name} (${newMember.guild.id})! Now it has ${newMember.guild.memberCount} total members count.`);
if (!member.guild.dbLoaded) await member.guild.dbLoad();
if (!member.user.dbLoaded && !member.user.bot) await member.user.dbLoad();
lgr.guildMemberAdd(member);
});
client.on("messageDelete", async (msg) => {
if (msg.author && !msg.author.dbLoaded && !msg.author.bot) await msg.author.dbLoad();
if (msg.guild) {
if (!msg.guild.dbLoaded) await msg.guild.dbLoad();
lgr.messageDelete(msg);
}
});
client.on("messageUpdate", async (msgold, msgnew) => {
if (msgnew.author && !msgnew.author.dbLoaded && !msgnew.author.bot) await msgnew.author.dbLoad();
if (msgnew.guild) {
if (!msgnew.guild.dbLoaded) await msgnew.guild.dbLoad();
lgr.messageUpdate(msgold, msgnew);
}
});
client.on("guildMemberUpdate", async (memberold, membernew) => {
//console.log(memberold.toJSON(), "\n\n", membernew.toJSON());
if (!membernew.user.dbLoaded && !membernew.user.bot) await membernew.user.dbLoad();
if (!membernew.guild.dbLoaded) await membernew.guild.dbLoad();
lgr.guildMemberUpdate(memberold, membernew);
});
client.on("shardReady", (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
const emb = defaultEventLogEmbed(client.guilds.cache.get(configFile.home));
emb.setTitle("Shard #" + shard)
.setDescription("**CONNECTED**")
.setColor(getColor("blue"));
trySend(client, log, emb);
});
client.on("shardReconnecting", (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
const emb = defaultEventLogEmbed(client.guilds.cache.get(configFile.home));
emb.setTitle("Shard #" + shard)
.setDescription("**RECONNECTING**")
.setColor(getColor("cyan"));
trySend(client, log, emb);
});
client.on("shardDisconnect", (e, shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
const emb = defaultEventLogEmbed(client.guilds.cache.get(configFile.home));
emb.setTitle("Shard #" + shard)
.setDescription("**DISCONNECTED\n\nTARGET:**```js\n" + JSON.stringify(e.target, (k, v) => v ?? undefined, 2) + "```")
.addField("CODE", e.code, true)
.addField("REASON", e.reason, true)
.addField("CLEAN", e.wasClean, true)
.setColor(getColor("yellow"));
trySend(client, log, emb);
});
client.on("shardResume", (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
const emb = defaultEventLogEmbed(client.guilds.cache.get(configFile.home));
emb.setTitle("Shard #" + shard)
.setDescription("**RESUMED**")
.setColor(getColor("green"));
trySend(client, log, emb);
});
client.on("shardError", (e, shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
const emb = defaultEventLogEmbed(client.guilds.cache.get(configFile.home));
emb.setTitle("Shard #" + shard)
.setDescription("**ERROR**")
.setColor(getColor("red"));
trySend(client, log, emb);
errLog(e, null, client);
});
client.on("commandRun", async (c, u, msg) => {
if (!msg.author.dbLoaded) await msg.author.dbLoad();
if (msg.guild && !msg.guild.dbLoaded) await msg.guild.dbLoad();
});
client.on("warn", a => console.log("warn", typeof a, a));
client.on("error", e => errLog(e, null, client));
client.on("commandError", (c, e, m) => {
errLog(e, m, client);
m?.channel.stopTyping();
});
process.on("uncaughtException", e => errLog(e, null, client));
process.on("unhandledRejection", e => errLog(e, null, client));
process.on("warning", e => errLog(e, null, client));
client.login(configFile.token);