· 8 years ago · Jun 16, 2018, 01:06 AM
1/*
2* Yiff Furryberg 2018
3* Main File for Zuckerborg
4*/
5
6// Import Modules
7const Commando = require("discord.js-commando");
8const path = require("path");
9const moment = require("moment-timezone");
10const sql = require("sqlite");
11const download = require("image-downloader");
12
13// Import files
14const config = require("./files/config.json");
15const staff = require("./files/staff.js");
16
17// Import functions
18const userJoin = require("./functions/logUserJoin.js");
19const userRejoin = require("./functions/logUserRejoin.js");
20const userLeave = require("./functions/logUserLeave.js");
21const serverJoin = require("./functions/logServerJoin.js");
22const serverRejoin = require("./functions/logServerRejoin.js");
23const serverLeave = require("./functions/logServerLeave.js");
24const avatarLog = require("./functions/logAvatars.js");
25const botStart = require("./functions/logBotStart.js");
26
27// Create client
28const client = new Commando.Client({
29 commandPrefix: config.prefix,
30 owner: config.ownerID,
31 disableEveryone: true,
32 nonCommandEditable: false
33});
34
35// Command registry
36client.registry
37 .registerDefaultTypes()
38 .registerGroups([
39 ['information', 'information']
40 ])
41 .registerDefaultGroups()
42 .registerDefaultCommands({
43 help: false,
44 ping: false
45 })
46 .registerCommandsIn(path.join(__dirname, 'commands'));
47
48// Set provider
49client.setProvider(sql.open(path.join(__dirname, 'files/settings.sqlite3')).then(db => new Commando.SQLiteProvider(db))).catch(console.error);
50
51// Open database file
52sql.open("./files/database.sqlite");
53
54// Client ready
55// Set activity
56// Log
57// Create tables if they dont exist
58client.on("ready", () => {
59 client.user.setActivity("Facebook User Data Salesman");
60 // Users table
61 sql.get("SELECT name FROM sqlite_master WHERE type='table' AND name='users'").then(row => {
62 if(!row) {
63 sql.run("CREATE TABLE IF NOT EXISTS users (userid INTEGER, isInServer BOOLEAN, doneIntro BOOLEAN, isFurry BOOLEAN, uploadedFursona BOOLEAN, introDate DATEIIME)").then(() => {
64 console.log("Created table users");
65 }).catch(error => {
66 console.log(error);
67 });
68 }
69 }).catch(error => {
70 console.log(error);
71 });
72 // Servers table
73 sql.get("SELECT name FROM sqlite_master WHERE type='table' AND name='servers'").then(row => {
74 if(!row) {
75 sql.run("CREATE TABLE IF NOT EXISTS servers (guildid INTEGER, botInServer BOOLEAN, botJoinDate DATETIME, memberDoneIntro INTEGER, memberCount INTEGER, furryMember INTEGER)").then(() => {
76 console.log("Created table servers");
77 }).catch(error => {
78 console.log(error);
79 });
80 }
81 }).catch(error => {
82 console.log(error);
83 });
84 botStart(moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
85});
86
87// Client joins a guild
88// Insert into database
89// Insert all members into databse
90// Log
91client.on("guildCreate", guild => {
92 if(guild.available) {
93 sql.get("SELECT * FROM servers WHERE guildid = ?", [guild.id]).then(row => {
94 if(!row) {
95 sql.run("INSERT INTO servers (guildid, botInServer, botJoinDate, memberDoneIntro, memberCount, furryMember) VALUES (?, ?, ?, ?, ?, ?)", [guild.id, true, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"), 0, guild.memberCount, 0]).then(() => {
96 serverJoin(guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
97 // Insert all members (Thanks to the Discord.js support server for this one, specifically space#0001 and Souji#0001)
98 guild.members.map((client, index) => {
99 console.log(client.user.bot);
100 console.log(index);
101 sql.get("SELECT * FROM users WHERE userid = ?", [index]).then(row => {
102 if(!row) {
103 if(!client.user.bot) {
104 sql.run("INSERT INTO users (userid, isInServer, doneIntro, isFurry, uploadedFursona, introDate) VALUES (?, ?, ?, ?, ?, ?)", [index, true, false, null, null, null]).then(() => {
105 console.log("Inserted user");
106 }).catch(error => {
107 console.log(error);
108 });
109 }
110 }
111 }).catch(error => {
112 console.log(error);
113 });
114 });
115 }).catch(error => {
116 console.log(error);
117 });
118 } else {
119 sql.run("UPDATE servers SET botInServer = ?, botJoinDate = ? WHERE guildid = ?", [true, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"), guild.id]).then(() => {
120 serverRejoin(guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
121 }).catch(error => {
122 console.log(error);
123 });
124 }
125 }).catch(error => {
126 console.log(error);
127 });
128 }
129});
130
131// Client leaves a guild
132// Update database
133// Log
134client.on("guildDelete", guild => {
135 sql.get("SELECT * FROM servers WHERE guildid = ?", [guild.id]).then(row => {
136 if(row) {
137 sql.run("UPDATE servers SET botInServer = ? WHERE guildid = ?", [false, guild.id]).then(() => {
138 serverLeave(guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
139 }).catch(error => {
140 console.log(error);
141 });
142 }
143 });
144});
145
146// TODO: Update server count
147
148// Member joins a guild
149// Insert/Update database
150// Update server member count
151// Log
152// Create welcome image if new
153client.on("guildMemberAdd", member => {
154 if(member.bot) return;
155 if(member.guild.available) {
156 sql.get("SELECT * FROM servers WHERE guildid = ?", [member.guild.id]).then(row => {
157 if(row) {
158 sql.get("SELECT * FROM users WHERE userid = ?", [member.id]).then(row =>{
159 if(!row) {
160 sql.run("INSERT INTO users (userid, isInServer, doneIntro, isFurry, uploadedFursona, introDate) VALUES (?, ?, ?, ?, ?, ?)", [member.id, true, false, null, null, null]).then(() => {
161 sql.get("SELECT * FROM servers WHERE guildid = ?", [member.guild.id]).then(row2 => {
162 let count = row2.memberCount + 1;
163 sql.run("UPDATE servers SET memberCount = ? WHERE guildid = ?", [count, member.guild.id]).then(() => {
164 userJoin(member.displayName, member.guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
165 }).catch(error => {
166 console.log(error);
167 });
168 }).catch(error => {
169 console.log(error);
170 });
171 }).catch(error => {
172 console.log(error);
173 });
174 } else {
175 sql.run("UPDATE users SET isInServer = ? WHERE userid = ?", [true, member.id]).then(() => {
176 sql.get("SELECT * FROM servers WHERE guildid = ?", [member.guild.id]).then(row3 => {
177 let count = row3.memberCount + 1;
178 sql.run("UPDATE servers SET memberCount = ? WHERE guildid = ?", [count, member.guild.id]).then(() => {
179 userRejoin(member.displayName, member.guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
180 }).catch(error => {
181 console.log(error);
182 });
183 }).catch(error => {
184 console.log(error);
185 });
186 }).catch(error => {
187 console.log(error);
188 });
189 }
190 }).catch(error => {
191 console.log(error);
192 });
193 }
194 }).catch(error => {
195 console.log(error);
196 });
197 }
198});
199
200// Member leaves a guild
201// Update database
202// Log
203client.on("guildMemberRemove", member => {
204 if(member.bot) return;
205 if(member.guild.available) {
206 sql.get("SELECT * FROM users WHERE userid = ?", [member.id]).then(row => {
207 if(row) {
208 sql.run("UPDATE users SET isInServer = ? WHERE userid = ?", [false, member.id]).then(() => {
209 sql.get("SELECT * FROM servers WHERE guildid = ?", [member.guild.id]).then(row4 => {
210 let count = row4.memberCount - 1;
211 sql.run("UPDATE servers SET memberCount = ? WHERE guildid = ?", [count, member.guild.id]).then(() => {
212 userLeave(member.displayName, member.guild.name, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
213 }).catch(error => {
214 console.log(error);
215 });
216 }).catch(error => {
217 console.log(error);
218 });
219 }).catch(error => {
220 console.log(error);
221 });
222 }
223 }).catch(error => {
224 console.log(error);
225 });
226 }
227});
228
229// Mod/Admin changes avatar
230// Save new avatar
231// Log
232const ids = staff.map(function(users) {
233 return users.id;
234});
235
236client.on("userUpdate", (oldUser, newUser) => {
237 if(ids.includes(oldUser.id)) {
238 const options = {
239 url: newUser.displayAvatarURL,
240 dest: './media/avatars/' + newUser.id + '.png'
241 }
242 download.image(options).then(({ filename, image }) => {
243 console.log("Image saved");
244 avatarLog(newUser.displayName, moment().tz("America/Chicago").format("MMMM Do YYYY, h:mm:ss a"));
245 }).catch(error => {
246 console.log(error);
247 });
248 }
249});
250
251// When client experiences an error
252client.on("error", error => {
253 console.log("Killing script.");
254 process.exit();
255});
256
257// When connnection is dropped
258// End script
259client.on("disconnect",() => {
260 console.log("Killing script.");
261 process.exit();
262});
263
264// Login
265client.login(config.token);