Skip to content

Commit d79c12a

Browse files
committed
Code cleaning and commenting
Code cleaning and commenting
1 parent 6d21936 commit d79c12a

File tree

5 files changed

+62
-74
lines changed

5 files changed

+62
-74
lines changed

api-manager.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ class ApiManager {
3030
#running;
3131
#postDelay;
3232
#initialized;
33-
33+
3434
constructor(client, selfID, tokens, delay) {
3535
this.#client = client;
3636
this.#selfID = selfID;
3737
this.#tokens = tokens;
3838
this.#initialized = false;
3939
this.#postDelay = delay || 60 * 60 * 1000;
4040
}
41-
41+
4242
/**
4343
* Do a post request for a given api
4444
* @param {string} hostname - The hostname of the api without path

database-manager.js

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ class Database {
9595
* Returns a random question from the given language and difficulty
9696
*/
9797
async getRandomQuestion(lang, difficulty) {
98-
let match = { lang: lang }
98+
const match = { lang: lang }
9999
if (difficulty > 0) match.difficulty = Number(difficulty);
100100
else match.difficulty = Math.floor(Math.random() * 3) + 1;
101-
let question = await (await this.#col.questions.aggregate([
101+
const question = await (await this.#col.questions.aggregate([
102102
{ $match: match },
103103
{ $sample: { size: 1 } }
104104
])).toArray();
@@ -155,7 +155,7 @@ class Database {
155155
* @return {Array} All the added channels of a given guild
156156
*/
157157
async getGuildChannels(guildID) {
158-
let channels = await (await Database.#findMany(this.#col.channels, { guildID: guildID }, { projection: { _id: 0, guildID: 0 } })).toArray();
158+
const channels = await (await Database.#findMany(this.#col.channels, { guildID: guildID }, { projection: { _id: 0, guildID: 0 } })).toArray();
159159
return channels || []
160160
}
161161

@@ -165,10 +165,10 @@ class Database {
165165
* @param {addedWon} addedWon - The total won parties to add to the user's wons
166166
*/
167167
async updateUserStats(guildID, userID, username, addedScore, addedWon) {
168-
let userQuery = { userID: userID };
169-
let userGuildQuery = { guildID: guildID, userID: userID };
168+
const userQuery = { userID: userID };
169+
const userGuildQuery = { guildID: guildID, userID: userID };
170170

171-
let user = await Database.#findOne(this.#col.users, userQuery);
171+
const user = await Database.#findOne(this.#col.users, userQuery);
172172
if (user) {
173173
logger.info("Updated user " + username + " [Score: " + user.score + " => " + (user.score + addedScore) + ", " + "Won: " + user.won + " => " + (user.won + addedWon) + "]");
174174
await Database.#updateOne(this.#col.users, userQuery, { $inc: { score: addedScore, won: addedWon } }, { $set: { username: username } });
@@ -177,7 +177,7 @@ class Database {
177177
await Database.#insertOne(this.#col.users, { userID: userID, username: username, score: addedScore, won: addedWon });
178178
}
179179

180-
var userGuild = await Database.#findOne(this.#col.usersGuild, userGuildQuery);
180+
const userGuild = await Database.#findOne(this.#col.usersGuild, userGuildQuery);
181181
if (userGuild) {
182182
logger.info("Updated user guild score " + username + " [Score: " + userGuild.score + " => " + (userGuild.score + addedScore) + ", " + "Won: " + userGuild.won + " => " + (userGuild.won + addedWon) + "]");
183183
await Database.#updateOne(this.#col.usersGuild, userGuildQuery, { $inc: { score: addedScore, won: addedWon } }, { $set: { username: username } });
@@ -192,8 +192,8 @@ class Database {
192192
* @return {Object} The global score and the guild score
193193
*/
194194
async getUserStats(guildID, userID) {
195-
var guildScore = await Database.#findOne(this.#col.usersGuild, { guildID: guildID, userID: userID });
196-
var globalScore = await Database.#findOne(this.#col.users, { userID: userID });
195+
const guildScore = await Database.#findOne(this.#col.usersGuild, { guildID: guildID, userID: userID });
196+
const globalScore = await Database.#findOne(this.#col.users, { userID: userID });
197197
return { global: globalScore || {}, guild: guildScore || {} };
198198
}
199199

@@ -203,9 +203,9 @@ class Database {
203203
*/
204204
async #insertMissingSetting(guildID, settingName) {
205205
const projection = { projection: { _id: 0, guildID: 0 } };
206-
let globalSetting = await Database.#findOne(this.#col.defaultSettings, { setting: settingName }, projection);
206+
const globalSetting = await Database.#findOne(this.#col.defaultSettings, { setting: settingName }, projection);
207207
if (globalSetting) {
208-
let success = await Database.#insertOne(this.#col.settings, { guildID: guildID, setting: settingName, value: globalSetting.value });
208+
const success = await Database.#insertOne(this.#col.settings, { guildID: guildID, setting: settingName, value: globalSetting.value });
209209
if (success) logger.info("Setting " + settingName + " was missing in " + guildID + " and was added");
210210
else logger.error("Error while adding missing setting " + settingName + " in " + guildID);
211211
return globalSetting.value;
@@ -219,22 +219,22 @@ class Database {
219219
*/
220220
async getSetting(guildID, settingName) {
221221
const projection = { projection: { _id: 0, guildID: 0, setting: 0 } };
222-
let query = { guildID: guildID, setting: settingName };
223-
let setting = await Database.#findOne(this.#col.settings, query, projection);
222+
const query = { guildID: guildID, setting: settingName };
223+
const setting = await Database.#findOne(this.#col.settings, query, projection);
224224
if (setting != null) return setting.value;
225225
else return await this.#insertMissingSetting(guildID, settingName);
226226
}
227-
227+
228228
/**
229229
* Get multiple settings from a guild
230230
* @param {settingName} An array of the settings to get
231231
* @return A key value object or null
232232
*/
233233
async getSettings(guildID, settingName) {
234234
const projection = { projection: { _id: 0, guildID: 0 } };
235-
let query = { guildID: guildID, setting: { $in: [] } };
235+
const query = { guildID: guildID, setting: { $in: [] } };
236236
for (let setting of settingName) query.setting.$in.push(setting);
237-
let tmpSettings = await (await Database.#findMany(this.#col.settings, query, projection)).toArray();
237+
const tmpSettings = await (await Database.#findMany(this.#col.settings, query, projection)).toArray();
238238
var setting = {};
239239
// Parse to a key value map
240240
for (let tmpSetting of tmpSettings) setting[tmpSetting.setting] = tmpSetting.value;
@@ -248,13 +248,13 @@ class Database {
248248
* Set a setting for a guild
249249
*/
250250
async setSetting(guildID, settingName, value) {
251-
let settingToFind = { guildID: guildID, setting: settingName };
251+
const settingToFind = { guildID: guildID, setting: settingName };
252252
if (await Database.#exists(this.#col.settings, settingToFind)) {
253-
let result = await Database.#updateOne(this.#col.settings, settingToFind, { $set: { value: value } });
253+
const result = await Database.#updateOne(this.#col.settings, settingToFind, { $set: { value: value } });
254254
if (result) logger.info("Setting " + settingName + " successfully updated to " + value);
255255
else logger.error("Error while updating " + settingName + " to " + value);
256256
} else {
257-
let result = await Database.#insertOne(this.#col.settings, { guildID: guildID, setting: settingName, value: value });
257+
const result = await Database.#insertOne(this.#col.settings, { guildID: guildID, setting: settingName, value: value });
258258
if (result) logger.info("Setting " + settingName + " successfully inserted as " + value);
259259
else logger.error("Error while inserting " + settingName + " as " + value);
260260
}
@@ -265,7 +265,7 @@ class Database {
265265
* @return {Object} The total users that have a score and a string of the users scores
266266
*/
267267
async getTop(guildID) {
268-
let guildUsers = await (await Database.#findMany(this.#col.usersGuild, { guildID: guildID }, { sort: { score: -1, won: -1 }, projection: { _id: 0, guildID: 0 } })).toArray();
268+
const guildUsers = await (await Database.#findMany(this.#col.usersGuild, { guildID: guildID }, { sort: { score: -1, won: -1 }, projection: { _id: 0, guildID: 0 } })).toArray();
269269
return guildUsers;
270270
}
271271

@@ -274,9 +274,9 @@ class Database {
274274
* @return A sorted list by score and then won of every users
275275
*/
276276
async getAllUsers() {
277-
var users = await (await Database.#findMany(this.#col.users, null, { sort: { score: -1, won: -1 }, projection: { _id: 0 } })).toArray();
277+
const users = await (await Database.#findMany(this.#col.users, null, { sort: { score: -1, won: -1 }, projection: { _id: 0 } })).toArray();
278278
return users;
279279
}
280280
}
281281

282-
module.exports = Database;
282+
module.exports = Database;

game.js

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ async function delay(ms) {
1717

1818

1919
class Game {
20-
static _colors = { 1: 4652870, 2: 16750869, 3: 15728640 };
20+
// Finished Easy Medium Hard
21+
static _colors = [4605510, 4652870, 16750869, 15728640];
2122

2223
_lang;
2324
_guild;
@@ -27,40 +28,34 @@ class Game {
2728
_running;
2829

2930
constructor(manager, userID, guild, channel, lang) {
31+
this._running = false;
3032
this._manager = manager;
3133
this._channel = channel;
3234
this._userID = userID;
3335
this._guild = guild;
3436
this._lang = lang;
35-
this._running = false;
3637
}
3738

3839
/**
3940
* Used to be able to save Map inside json
4041
* This is used by the saveGameState function
41-
*/
42+
*/
4243
_replacer(key, value) {
43-
if(value instanceof Map) {
44-
return {
45-
dataType: 'Map',
46-
value: Array.from(value.entries()), // or with spread: value: [...value]
47-
};
48-
} else {
49-
return value;
50-
}
44+
if(value instanceof Map)
45+
return { dataType: 'Map', value: Array.from(value.entries()) };
46+
else
47+
return value;
5148
}
5249

5350
/**
5451
* Used to be able to restore Map from json
5552
* This is used by the restoreGameState function
5653
*/
5754
_reviver(key, value) {
58-
if(typeof value === 'object' && value !== null) {
59-
if (value.dataType === 'Map') {
60-
return new Map(value.value);
61-
}
62-
}
63-
return value;
55+
if(typeof value === 'object' && value !== null)
56+
if (value.dataType === 'Map')
57+
return new Map(value.value);
58+
return value;
6459
}
6560

6661
/**
@@ -69,15 +64,13 @@ class Game {
6964
* game from being stuck if the question delay is very high
7065
*/
7166
async _delayChecking(ms) {
72-
//return new Promise(async function (resolve, reject) {
73-
// This way if the game is force stopped it will leave the current question
74-
var waitingTime = ms / (15000 + (ms/100*10)) * 1000 // The higher the question delay, the lower the checking
75-
for (var i = 0; i < ms; i += waitingTime) {;
76-
if (this._running == false) break; // 1 = Waiting for stop
77-
await delay(waitingTime);
78-
}
79-
return;
80-
//});
67+
// This way if the game is force stopped it will leave the current question
68+
const waitingTime = ms / (15000 + (ms/100*10)) * 1000 // The higher the question delay, the lower the checking
69+
for (let i = 0; i < ms; i += waitingTime) {;
70+
if (this._running == false) break; // 1 = Waiting for stop
71+
await delay(waitingTime);
72+
}
73+
return;
8174
}
8275

8376
/**
@@ -86,7 +79,7 @@ class Game {
8679
_terminate(channelID) {
8780
this._manager.deleteGame(channelID || this.getChannelID());
8881
}
89-
82+
9083
/**
9184
* Getters / Setters
9285
*/

gamemodes/classic-game.js

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66

77

88
// -------------- SOME VARIABLES -------------- //
9-
const reactionsTable = ['🇦', '🇧', '🇨', '🇩'];
10-
const messages = require('messages.js');
9+
const fs = require('fs');
1110
const Game = require("game.js");
1211
const tools = require('tools.js');
1312
const logger = require('logger.js');
14-
const fs = require('fs');
13+
const messages = require('messages.js');
14+
const reactionsTable = ['🇦', '🇧', '🇨', '🇩'];
1515
// -------------- SOME VARIABLES -------------- //
1616

1717

1818

1919
class ClassicGame extends Game {
2020
static type = "classic";
21-
21+
2222
#db;
2323
#qTotal;
2424
#aDelay;
@@ -51,7 +51,7 @@ class ClassicGame extends Game {
5151
fs.writeFileSync(this.#dataSavePath, JSON.stringify(gameSaveData, this._replacer));
5252
logger.info("Updated game state json");
5353
}
54-
54+
5555
async restoreGameState(rawdata) {
5656
const data = JSON.parse(rawdata, this._reviver);
5757
const guildID = data.guildID;
@@ -79,11 +79,11 @@ class ClassicGame extends Game {
7979
this._terminate(channelID);
8080
}
8181
}
82-
82+
8383
#deleteGameState() {
8484
if (fs.existsSync(this.#dataSavePath)) fs.unlinkSync(this.#dataSavePath); // Remove the save file
8585
}
86-
86+
8787
async #getGoodAnswerPlayers(message, goodAnswer) {
8888
try {
8989
var badAnswerUsers = new Map();
@@ -114,18 +114,18 @@ class ClassicGame extends Game {
114114
return wonPlayers;
115115
} catch (error) { return []; }
116116
}
117-
117+
118118
async #newQuestionAnswer() {
119119
const qData = await this.#db.getRandomQuestion(this._lang, this.#difficulty);
120120
const goodAnswerText = qData.proposals[qData.answer];
121121
const goodAnswerReaction = reactionsTable[qData.answer];
122122
const goodAnswerUsers = new Map();
123123
logger.info("Answer: " + qData.proposals[qData.answer]);
124-
124+
125125
const qMessage = await tools.sendCatch(this._channel, lm.getEb(this._lang).getQuestionEmbed(qData, this.#qNumber, this.#qTotal, this.#qDelay / 1000, Game._colors[qData.difficulty]));
126126
if (!qMessage) throw new Error("Can't send question message");
127-
128-
const filter = (reaction, user) => { return reactionsTable.includes(reaction.emoji.name); };
127+
128+
const filter = (reaction, user) => { return reactionsTable.includes(reaction.emoji.name); };
129129
let collector = qMessage.createReactionCollector(filter, { time: this.#qDelay });
130130
collector.on('collect', (reaction, collector) => {
131131
for (let user of reaction.users.cache) {
@@ -138,7 +138,7 @@ class ClassicGame extends Game {
138138
}
139139

140140
});
141-
141+
142142
for (let i = 0; i < reactionsTable.length; i++) if (!await tools.reactCatch(qMessage, reactionsTable[i])) break;
143143

144144
await this._delayChecking(this.#qDelay); // Wait for qDelay so people have time to answer
@@ -147,23 +147,17 @@ class ClassicGame extends Game {
147147
const doubleCheck = await this.#getGoodAnswerPlayers(qMessage, goodAnswerReaction);
148148
doubleCheck.forEach((value, key) => goodAnswerUsers.set(key, value));
149149

150-
await tools.editCatch(qMessage, lm.getEb(this._lang).getQuestionEmbed(qData, this.#qNumber, this.#qTotal, 0, 4605510));
150+
await tools.editCatch(qMessage, lm.getEb(this._lang).getQuestionEmbed(qData, this.#qNumber, this.#qTotal, 0, Game._colors[0]));
151151
const playersString = messages.getPlayersString(goodAnswerUsers, this._lang);
152152
const aMessage = await tools.sendCatch(qMessage.channel, lm.getEb(this._lang).getAnswerEmbed(goodAnswerReaction, goodAnswerText, qData.anecdote, playersString, 16750869));
153153
for (const [userID, username] of goodAnswerUsers.entries()) { // For each player that answered correctly
154154
this.#db.updateUserStats(this._guild.id, userID, username, qData.difficulty, 0); // Set user points number
155155
this.#scores[userID] = (this.#scores[userID] || 0) + qData.difficulty;
156156
}
157157
await this._delayChecking(this.#aDelay); // Wait for aDelay so people have time to answer
158-
await tools.editCatch(aMessage, lm.getEb(this._lang).getAnswerEmbed(goodAnswerReaction, goodAnswerText, qData.anecdote, playersString, 4605510));
158+
await tools.editCatch(aMessage, lm.getEb(this._lang).getAnswerEmbed(goodAnswerReaction, goodAnswerText, qData.anecdote, playersString, Game._colors[0]));
159159
}
160160

161-
// We first do a for loop that asks for all the questions and give the answers
162-
// it also add the points of the user to the database each time, this way in
163-
// case of crash, the points are kept. Not forgeting to update the cache to avoid
164-
// it from being cleared automatically.
165-
// Then we exit the loop when the game ends and we calculate the total points
166-
// + the winner. The game as ended we can clear the cache.
167161
async #startGame() {
168162
this._running = true;
169163
const guildID = this._guild.id;
@@ -178,12 +172,12 @@ class ClassicGame extends Game {
178172
logger.info("-------------- NEW GAME --------------");
179173
// ASK QUESTIONS
180174
for (this.#qNumber; this.#qNumber <= this.#qTotal; this.#qNumber++) {
181-
logger.info("------------ NEW QUESTION ------------ (" + this.#qNumber + "/" + this.#qTotal + ")");
175+
logger.info("------------ NEW QUESTION ------------ (" + this.#qNumber + "/" + this.#qTotal + ")");
182176
if (this._running == false) {
183177
tools.sendCatch(this._channel, lm.getEb(this._lang).getGameStoppedEmbed());
184178
break;
185179
}
186-
180+
187181
// This way users can update a setting while the game has already started!
188182
let settings = await this.#db.getSettings(guildID, ["questionDelay", "answerDelay", "lang"]);
189183
this.#qDelay = settings.questionDelay;

locales/embeds/fr.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ module.exports = {
320320
getQuestionEmbed: function (qData, qNumber, qTotal, timeleft, embedColor) {
321321
// 0:thème --- 1:difficulté --- 2:question --- 3:propositions --- 4:réponse --- 5:anecdote --- 6:points --- 7:num.ques --- 8:tot.ques
322322
const proposals = qData.proposals;
323+
const difficultyTable = { 1: "facile", 2: "moyen", 3: "difficile" };
323324
const embed = new Discord.MessageEmbed({
324325
author: {
325326
name: "Question " + qNumber + " / " + qTotal + " :",
@@ -328,7 +329,7 @@ module.exports = {
328329
footer: {
329330
text: "Temps restant :⠀" + timeleft + "s",
330331
},
331-
description: "Thème : " + qData.theme + " (" + qData.difficulty + ")```yaml\n" + qData.question + "```",
332+
description: "Thème : " + qData.theme + " (" + difficultyTable[qData.difficulty] + ")```yaml\n" + qData.question + "```",
332333
color: embedColor,
333334
fields: [
334335
{

0 commit comments

Comments
 (0)