Shasha/Main.js

233 lines
No EOL
8.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'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, defaultEventLogEmbed } = require('./resources/functions');
const { join } = require('path');
const getColor = require("./resources/getColor");
const requireAll = require("require-all");
const { chatAnswer } = require("./resources/shaChat");
const { init } = require("./cmds/moderation/src/createSchedule");
const { dbClient } = require("./database/mongo");
const lgr = requireAll({ dirname: join(__dirname, "resources/eventsLogger"), recursive: true });
client.functions = requireAll({ dirname: join(__dirname, "resources"), recursive: true });
client.registry
.registerGroups([
'utility',
'moderation',
'experiment',
'image',
'fun',
"profile",
"owner"
])
.registerDefaultTypes()
.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!');
init(client);
});
client.on("message", async msg => {
if (!client.matchTimestamp) client.matchTimestamp = 0;//getUTCComparison(msg.createdTimestamp);
if (!msg.author.DB) await msg.author.dbLoad();
lgr.message.letsChat(msg);
if (msg.mentions.has(client.user) && !msg.isCommand && msg.channel.id != configFile.chatChannel) {
const re = new RegExp("@" + (msg.guild ? msg.guild.member(client.user).displayName : msg.author.username));
const u = msg.cleanContent.replace(re, "").trim();
console.log(u, re);
if (u.length > 0) {
msg.channel.startTyping();
await trySend(client, msg, await chatAnswer(u));
};
}
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.DB) await msg.guild.dbLoad();
lgr.message.giveNickHeart(msg);
}
lgr.message.run(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.DB) 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.DB) await member.guild.dbLoad();
if (!member.user.DB && !member.user.bot) await member.user.dbLoad();
lgr.guildMemberAdd(member);
});
client.on("guildBanAdd", async (GUILD, USER) => {
lgr.guildBanAdd(GUILD, USER);
});
client.on("guildBanRemove", async (GUILD, USER) => {
lgr.guildBanRemove(GUILD, USER);
});
client.on("guildUpdate", async (oldGuild, newGuild) => {
lgr.guildUpdate(oldGuild, newGuild);
})
client.on("messageDelete", async (msg) => {
if (msg.author && !msg.author.DB) await msg.author.dbLoad();
if (msg.guild) {
if (!msg.guild.DB) await msg.guild.dbLoad();
lgr.messageDelete(msg);
}
});
client.on("messageUpdate", async (msgold, msgnew) => {
if (!msgnew.author?.DB) await msgnew.author?.dbLoad();
if (msgnew.guild) {
if (!msgnew.guild.DB) 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.DB) await membernew.user.dbLoad();
if (!membernew.guild.DB) await membernew.guild.dbLoad();
lgr.guildMemberUpdate(memberold, membernew);
});
client.on("shardReady", async (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
if (!log.guild.DB) await log.guild.dbLoad();
const emb = defaultEventLogEmbed(log.guild);
emb.setTitle("Shard #" + shard)
.setDescription("**CONNECTED**")
.setColor(getColor("blue"));
trySend(client, log, emb);
});
client.on("shardReconnecting", async (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
if (!log.guild.DB) await log.guild.dbLoad();
const emb = defaultEventLogEmbed(log.guild);
emb.setTitle("Shard #" + shard)
.setDescription("**RECONNECTING**")
.setColor(getColor("cyan"));
trySend(client, log, emb);
});
client.on("shardDisconnect", async (e, shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
if (!log.guild.DB) await log.guild.dbLoad();
const emb = defaultEventLogEmbed(log.guild);
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", async (shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
if (!log.guild.DB) await log.guild.dbLoad();
const emb = defaultEventLogEmbed(log.guild);
emb.setTitle("Shard #" + shard)
.setDescription("**RESUMED**")
.setColor(getColor("green"));
trySend(client, log, emb);
});
client.on("shardError", async (e, shard) => {
const log = client.channels.cache.get(configFile.shardChannel);
if (!log.guild.DB) await log.guild.dbLoad();
const emb = defaultEventLogEmbed(log.guild);
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.DB) await msg.author.dbLoad();
if (msg.member) if (!msg.member.DB) await msg.member.dbLoad();
if (msg.guild && !msg.guild.DB) await msg.guild.dbLoad();
});
client.on("warn", e => {
console.error(e);
errLog(e, null, client);
});
client.on("error", e => {
console.error(e);
errLog(e, null, client);
});
client.on("commandError", (c, e, m) => {
console.error(e);
errLog(e, m, client);
m?.channel.stopTyping();
});
process.on("uncaughtException", e => {
console.error(e);
errLog(e, null, client);
});
process.on("unhandledRejection", e => {
console.error(e);
errLog(e, null, client);
if (/MongoError: Topology is closed, please connect/.test(e.message)) {
console.log("Trying reconnecting...");
return dbClient.connect();
}
});
process.on("warning", e => {
console.error(e);
errLog(e, null, client);
});
client.login(configFile.token);