Shasha/Main.js
2021-06-13 23:55:17 +00:00

172 lines
No EOL
6.7 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"]
});
const sqlite = require('sqlite');
const configFile = require('./config.json');
const { errLog, trySend, noPerm, getUTCComparison, defaultEventLogEmbed } = require('./resources/functions');
const { join } = require('path');
const { chatAnswer } = require("./resources/shaChat");
const getColor = require("./resources/getColor");
const { timestampAt } = require("./resources/debug");
const msgDeleteLogger = require("./resources/eventsLogger/messageDelete");
const msgUpdateLogger = require("./resources/eventsLogger/messageUpdate");
const guildMemberAddLogger = require("./resources/eventsLogger/guildMemberAdd");
const guildMemberUpdateLogger = require("./resources/eventsLogger/guildMemberUpdate");
const guildMemberRemoveLogger = require("./resources/eventsLogger/guildMemberRemove");
const { letsChat, giveNickHeart } = require("./resources/eventsLogger/message");
client.registry
.registerGroups([
'utility',
'moderation',
'experiment',
'image',
'fun',
"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 () => {
//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();
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();
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();
guildMemberRemoveLogger(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();
guildMemberAddLogger(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();
msgDeleteLogger(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();
msgUpdateLogger(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();
}
guildMemberUpdateLogger(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("error", e => errLog(e, null, client));
client.on("commandError", e => errLog(e, null, client));
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.on("debug", (...args) => console.log(...args, timestampAt()));
client.login(configFile.token);