· 5 years ago · Feb 25, 2020, 09:42 PM
1/*
2 * Copyright 2020 Stijn Bannink <stijnbannink23@gmail.com> AKA SBDeveloper
3 *
4 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY
12 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18const Discord = require("discord.js");
19const botConfig = require("./botconfig.json");
20const mysql = require('mysql');
21const isReachable = require('is-reachable');
22
23var db_config = {
24 host: 'localhost',
25 user: 'servers',
26 password: 'IYwP9qh-II(Z{KRvc:yRb!',
27 database: 'waddleon'
28};
29
30//Add a new object to the array to add a new server
31var server_config = [
32 {
33 id: "1000",
34 name: "Blizzard"
35 },
36 {
37 id: "1002",
38 name: "White Out"
39 },
40 {
41 id: "1001",
42 name: "Ice Berg"
43 }
44];
45
46var con = mysql.createConnection(db_config);
47
48function handleDisconnect() {
49 console.log('HANDLING A DISCONNECT, OR CONNECTING FOR THE FIRST TIME!');
50 con = mysql.createConnection(db_config);
51
52 con.connect(function(err) {
53 if (err) {
54 console.log('Can\'t connect to the database:', err);
55 setTimeout(handleDisconnect, 1000);
56 }
57 });
58
59 con.on('error', function(err) {
60 console.log('Database error!', err);
61 if (err.code === 'PROTOCOL_CONNECTION_LOST') {
62 handleDisconnect();
63 } else {
64 throw err;
65 }
66 });
67}
68
69async function updateStatus() {
70 var embed = new Discord.RichEmbed();
71
72 for (let i=0; i < server_config.length; i++) {
73 let id = server_config[i].id;
74 let name = server_config[i].name;
75
76 let veld = "**Online:** ";
77
78 await con.query(`SELECT * FROM penguin WHERE OnlineStatus='${id}'`, async function(err, result) {
79 if (err) throw err;
80 var length = Object.keys(result).length;
81
82 var start = length + "\r\n**Players:** ";
83
84 veld += start;
85
86 if (!result || result.length < 1) {
87 veld += "No players online";
88 } else {
89 for (var i = 0; i < length; i++) {
90 await con.query(`INSERT INTO bot_statistics (serverID, playername) VALUES ('${id}', '${result[i].Nickname}') ON DUPLICATE KEY UPDATE serverID=${id}, datetime=now()`);
91
92 if (i == (length - 1)) {
93 //Last run, add no ,
94 veld += result[i].Nickname;
95 } else {
96 veld += result[i].Nickname + ", ";
97 }
98 };
99 }
100 });
101
102 await con.query(`SELECT * FROM bot_statistics WHERE serverID='${id}' AND HOUR(TIMEDIFF(NOW(), datetime)) < 24`, async function(err, rows) {
103 if (err) throw err;
104 if (!rows || rows.length < 1) {
105 veld += "\r\n\r\nCan't find any statistics. See you in 24 hours!";
106 } else {
107 var count = 0;
108
109 for (var i = 0; i < rows.length; i++) {
110 count++;
111 }
112
113 if (count == 1) {
114 veld += `\r\n\r\nThere was ${count} user online in the past 24 hours.`;
115 } else {
116 veld += `\r\n\r\nThere were ${count} users online in the past 24 hours.`;
117 }
118 }
119
120 await embed.addField(name + ":", veld);
121 });
122 }
123
124 var totalveld = "";
125
126 await con.query("SELECT * FROM penguin", function(err, result) {
127 if (err) throw err;
128 var length = Object.keys(result).length;
129
130 totalveld += "**Total registered:** " + length;
131 });
132
133 await con.query(`SELECT * FROM bot_statistics WHERE HOUR(TIMEDIFF(NOW(), datetime)) < 24`, async function(err, rows) {
134 if (err) throw err;
135 if (!rows || rows.length < 1) {
136 totalveld += "\r\n\r\nCan't find any statistics. See you in 24 hours!";
137 } else {
138 var count = 0;
139
140 for (var i = 0; i < rows.length; i++) {
141 count++;
142 }
143
144 if (count == 1) {
145 totalveld += `\r\n\r\nThere was ${count} user online in the past 24 hours.`;
146 } else {
147 totalveld += `\r\n\r\nThere were ${count} users online in the past 24 hours.`;
148 }
149 }
150
151 await embed.addField("Total:", totalveld);
152 });
153
154 embed.setTitle("Waddle On Server Status:");
155 embed.setFooter("© Waddle On 2020");
156 embed.setTimestamp(new Date());
157
158 //CHANGE THE CHANNEL ID HERE!!!!
159 var kanaaltje = bot.channels.get("659850279117914133");
160
161 kanaaltje.fetchMessages({
162 limit: 1
163 }).then(messages => {
164 var lastMessage = null;
165
166 if (messages.size == 0) {
167 kanaaltje.send("Loading...");
168 return;
169 } else {
170 lastMessage = messages.first();
171 }
172
173 lastMessage.edit(embed);
174 }).catch(error => {
175 //Don't handle the error, because it's not needed. ;)
176 });
177}
178
179
180async function updatestats() {
181 var embed = new Discord.RichEmbed();
182
183 await {
184 await isReachable('sindresorhus.com')
185
186 if (true) {
187 sitestats += `\r\n\r\nThere was true user online in the past 24 hours.`;
188 } else {
189 sitestats += `\r\n\r\nThere were false users online in the past 24 hours.`;
190 }
191 }
192
193 await embed.addField("Total:", sitestats);
194 });
195
196 embed.setTitle("Waddlver Status:");
197 embed.setFooter("© Waddle On 2020");
198 embed.setTimestamp(new Date());
199
200 //CHANGE THE CHANNEL ID HERE!!!!
201 var kanaaltje = bot.channels.get("664391702236233729");
202
203 kanaaltje.fetchMessages({
204 limit: 1
205 }).then(messages => {
206 var lastMessage = null;
207
208 if (messages.size == 0) {
209 kanaaltje.send("Loading...");
210 return;
211 } else {
212 lastMessage = messages.first();
213 }
214
215 lastMessage.edit(embed);
216 }).catch(error => {
217 //Don't handle the error, because it's not needed. ;)
218 });
219}
220
221const bot = new Discord.Client();
222
223bot.on("ready", async () => {
224 console.log(`${bot.user.username} is online!`);
225
226 bot.generateInvite(["ADMINISTRATOR"]).then(link => {
227 console.log(link);
228 }).catch(err =>{
229 console.log(err.stack);
230 });
231
232 var sql = `CREATE TABLE IF NOT EXISTS bot_statistics (serverID VARCHAR(100), playername VARCHAR(100), datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`;
233 con.query(sql, function(err, result) {
234 console.log("Database created if not exists!");
235 });
236 var sql2 = `ALTER TABLE bot_statistics ADD UNIQUE unique_index(serverID, playername)`;
237 con.query(sql2, function(err, result) {
238 console.log("Database uniques fixed.");
239 });
240
241 handleDisconnect();
242
243 updateStatus();
244
245 setInterval(updateStatus, 60000);
246 setInterval(updatestats, 300);
247});
248
249bot.on('error', console.error);
250
251bot.login(botConfig.token);