Skip to content

Commit 2c680cd

Browse files
authored
Merge pull request #78 from oof2win2/feature/tests
Release 1.0!
2 parents bb1bbd9 + d544e5e commit 2c680cd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+28551
-5852
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ log-all
66
.DS_Store
77
servers.json
88
/commands/owner/updateip.js
9-
test.js
9+
testing.js
1010
temp/*

chatFormat.js

+3-21
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
const functions = require("./functions");
55
const { filterBan } = require("./filterBan");
66
const servers = require("./servers.json");
7-
const { RconConnectionManager } = require("./utils/rcon-connection")
7+
const { RconConnectionManager } = require("./utils/rcon-connection");
8+
const { DatabaseConnection } = require("./utils/database-manager");
89

910
module.exports = function chatFormat(line, channel, client, serverConsoleName) {
1011
const helpdesk = client.channels.cache.get("590241134740111387");
@@ -100,26 +101,7 @@ module.exports = function chatFormat(line, channel, client, serverConsoleName) {
100101
}
101102
//join
102103
if (line.includes("[JOIN]")) {
103-
// check if a player is linked to factorio. if not, tell them to get linked
104-
const username = functions.formatChatData(line).slice(2).split(" ")[0];
105-
functions
106-
.searchOneDB("otherData", "linkedPlayers", { factorioName: username })
107-
.then((out) => {
108-
if (out == null) {
109-
Object.keys(servers).forEach((server) => {
110-
if (
111-
servers[server].discordChannelID ==
112-
client.channels.cache.get(channel).id
113-
) {
114-
RconConnectionManager.rconCommand(
115-
`/w ${username} Welcome to AwF. You can join the Discord server on awf.yt and link yourself to Discord with \`!linkme <discordUsername>\`\n`,
116-
servers[server].name
117-
);
118-
}
119-
});
120-
}
121-
})
122-
.catch((err) => console.log(err));
104+
// removed, as this is processed in functions.js
123105
}
124106
} else if (line.includes("JLOGGER:")) {
125107
line = line.slice(line.indexOf("JLOGGER:") + "JLOGGER:".length + 1);

commands/dev/shellcmd.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const child_process = require("child_process");
2+
const Str = require("@supercharge/strings");
3+
const fs = require('fs');
4+
const { ErrorManager } = require("../../utils/error-manager");
5+
6+
module.exports = {
7+
config: {
8+
name: "shellcmd",
9+
aliases: [],
10+
usage: "<shell command>",
11+
category: "dev",
12+
description: "Execute a shell command",
13+
accessableby: "Dev",
14+
},
15+
run: async (client, message, args) => {
16+
let authRoles = message.member.roles.cache;
17+
if (
18+
!authRoles.some((r) => ["Admin", "dev"].includes(r.name))
19+
) {
20+
// if user is not Admin/Moderator/dev
21+
return message.channel.send(
22+
"You don't have enough priviliges to run this command!"
23+
);
24+
}
25+
if (!args[0]) return message.channel.send('No command!');
26+
const initialCmd = args.shift();
27+
let outputData = [];
28+
let child = child_process.spawn(initialCmd, args);
29+
child.stdout.on("data", (data) => {
30+
outputData.push(`${data.toString().slice(0, -1)}`);
31+
});
32+
child.stderr.on("data", (data) => {
33+
outputData.push(`${data.toString().slice(0, -1)}\n`);
34+
});
35+
child.on("close", async (code) => {
36+
let msg = outputData.join("\n");
37+
let outFilePath = `${process.env.PWD}/temp/${Str.random()}.out`;
38+
fs.writeFileSync(outFilePath, msg);
39+
try {
40+
await message.channel.send(`Process exited with code ${code}. Output is as an attatchment.`, { files: [outFilePath] });
41+
} catch (error) {
42+
message.channel.send(`Error: ${error}`);
43+
ErrorManager.Error(error);
44+
}
45+
fs.rmSync(outFilePath);
46+
});
47+
setTimeout(() => {
48+
if (child.exitCode === null) {
49+
child.kill();
50+
// console.log("Killed after 60s!");
51+
message.channel.send(`Command killed after 5s`);
52+
setTimeout(() => {
53+
if (child.exitCode === null) {
54+
child.kill()
55+
message.channel.send(`Command killed after another 500ms with force`);
56+
}
57+
}, 500);
58+
}
59+
}, 5000);
60+
},
61+
};

commands/testing/spamfactorioserver.js commands/dev/spamfactorioserver.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ module.exports = {
77
name: "spamfactorioserver",
88
aliases: [],
99
usage: "<server ping> <number of messages> [message to send]",
10-
category: "testing",
10+
category: "dev",
1111
description: "Spam a Factorio server with lots of chat stuff",
12-
accessableby: "Admin",
12+
accessableby: "Dev",
1313
},
1414
run: async (client, message, args) => {
1515
let authRoles = message.member.roles.cache;

commands/factorio/fstatsserver.js

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB, getServerFromChannelInput } = require("../../functions");
2+
const { getServerFromChannelInput } = require("../../functions");
3+
const { DatabaseConnection } = require("../../utils/database-manager");
34
const { RconConnectionManager } = require("../../utils/rcon-connection");
45

56
module.exports = {
@@ -14,13 +15,13 @@ module.exports = {
1415
run: async (client, message, args) => {
1516
async function getPlayer(server, message, alternative) {
1617
const alternativeDB = async(server, alternative) => {
17-
return searchOneDB(server, "deaths", { player: alternative });
18+
return DatabaseConnection.findOneDB(server, "deaths", { player: alternative });
1819
}
1920
if (message.mentions.users.first()) {
20-
let linkedPlayer = await searchOneDB("otherData", "linkedPlayers", { discordID: message.mentions.users.first().id });
21+
let linkedPlayer = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", { discordID: message.mentions.users.first().id });
2122
// if the player is linked, it is possible to get their factorio name
2223
if (linkedPlayer !== null)
23-
return await searchOneDB(server, "deaths", { player: linkedPlayer.factorioName });
24+
return await DatabaseConnection.findOneDB(server, "deaths", { player: linkedPlayer.factorioName });
2425
else
2526
return null;
2627
} else {
@@ -52,13 +53,13 @@ module.exports = {
5253
${message.guild.me.displayName} | Developed by DistroByte & oof2win2 | Total Commands: ${client.commands.size}`,
5354
client.user.displayAvatarURL()
5455
);
55-
let rockets = await searchOneDB(server, "stats", {
56+
let rockets = await DatabaseConnection.findOneDB(server, "stats", {
5657
rocketLaunches: { $exists: true },
5758
});
5859
if (rockets == null) rockets = 0;
5960
else rockets = rockets.rocketLaunches;
6061
statsEmbed.addField("Rockets launched", rockets);
61-
let research = await searchOneDB(server, "stats", {
62+
let research = await DatabaseConnection.findOneDB(server, "stats", {
6263
research: "researchData",
6364
});
6465
if (research == null) research = {};

commands/factorio/linkedplayers.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB } = require("../../functions");
2+
const { DatabaseConnection } = require("../../utils/database-manager");
33

44
module.exports = {
55
config: {
@@ -13,7 +13,7 @@ module.exports = {
1313
run: async (client, message, args) => {
1414
if (!args[0]) {
1515
// no argument at all
16-
let res = await searchOneDB("otherData", "linkedPlayers", {
16+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
1717
factorioName: message.author.username,
1818
});
1919
if (res == null) return message.channel.send("You are not linked yet");
@@ -22,7 +22,7 @@ module.exports = {
2222
if (!args[1]) {
2323
// if the server name is provided but no 2nd argument, searches for generic server data
2424
if (message.mentions.users.first()) {
25-
let res = await searchOneDB("otherData", "linkedPlayers", {
25+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
2626
discordID: message.mentions.members.first().id,
2727
});
2828
if (res == null)
@@ -38,7 +38,7 @@ module.exports = {
3838
}\` is already linked under username ${res.factorioName}!`
3939
);
4040
} else {
41-
let res = await searchOneDB("otherData", "linkedPlayers", {
41+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
4242
factorioName: args[0],
4343
});
4444
if (res == null)

commands/factorio/linkme.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB, giveFactorioRole, insertOneDB, findOneAndReplaceDB } = require("../../functions");
2+
const { giveFactorioRole } = require("../../functions");
33
const { LinkingCache } = require("../../functions");
44
const { ErrorManager } = require("../../utils/error-manager");
55
const lodash = require("lodash");
6-
let { linkConfirmation } = require("../../config/messages.json")
6+
let { linkConfirmation } = require("../../config/messages.json");
7+
const { DatabaseConnection } = require("../../utils/database-manager");
78

89
module.exports = {
910
config: {
@@ -51,15 +52,15 @@ module.exports = {
5152
}
5253
const reaction = reactions.first();
5354
const dat = { factorioName: factorioName, discordID: message.author.id };
54-
const found = await searchOneDB("otherData", "linkedPlayers", {
55+
const found = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
5556
discordID: message.author.id,
5657
});
5758

5859
if (reaction.emoji.name == "❌")
5960
return message.channel.send("Linking cancelled!");
6061
if (found !== null && reaction.emoji.name === "🔨") {
6162
// re-link user
62-
let res = await findOneAndReplaceDB(
63+
let res = await DatabaseConnection.findOneAndReplaceDB(
6364
"otherData",
6465
"linkedPlayers",
6566
found,
@@ -70,12 +71,12 @@ module.exports = {
7071
"Please contact devs/admins for re-linking, process failed"
7172
);
7273
//redo statistics
73-
let prevStats = await searchOneDB("otherData", "globPlayerStats", {
74+
let prevStats = await DatabaseConnection.findOneDB("otherData", "globPlayerStats", {
7475
discordID: found.discordID,
7576
});
7677
let newStats = lodash.cloneDeep(prevStats);
7778
newStats.factorioName = factorioName;
78-
res = await findOneAndReplaceDB(
79+
res = await DatabaseConnection.findOneAndReplaceDB(
7980
"otherData",
8081
"globPlayerStats",
8182
prevStats,
@@ -96,7 +97,7 @@ module.exports = {
9697
}
9798
try {
9899
giveFactorioRole(factorioName, "Member"); // give the Member role to new players
99-
let res = await insertOneDB("otherData", "linkedPlayers", toInsert);
100+
let res = await DatabaseConnection.insertOneDB("otherData", "linkedPlayers", toInsert);
100101
if (res.result.ok == true) return message.channel.send("Linked successfully!");
101102
else return message.channel.send("Didn't insert correctly into database");
102103
} catch (error) {

commands/factorio/statsg.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB } = require("../../functions");
3-
2+
const { DatabaseConnection } = require("../../utils/database-manager");
43
module.exports = {
54
config: {
65
name: "statsg",
@@ -25,7 +24,7 @@ module.exports = {
2524
user = await server.members.fetch({ query: args[0], limit: 1 });
2625
user = user.first().user;
2726
}
28-
let data = await searchOneDB("otherData", "globPlayerStats", {
27+
let data = await DatabaseConnection.findOneDB("otherData", "globPlayerStats", {
2928
discordID: user.id,
3029
});
3130
if (data == null)
+25-20
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB, getFactorioRoles } = require("../../functions");
2+
const { getFactorioRoles } = require("../../functions");
33
const { LinkingCache } = require("../../functions");
44
const { ErrorManager } = require("../../utils/error-manager");
55
const lodash = require("lodash");
6-
let { linkConfirmation } = require("../../config/messages.json")
6+
let { linkConfirmation } = require("../../config/messages.json");
7+
const { DatabaseConnection } = require("../../utils/database-manager");
78

89
module.exports = {
910
config: {
@@ -28,31 +29,35 @@ module.exports = {
2829
return message.channel.send("Give a Factorio name/Discord ping!")
2930
let user;
3031
if (message.mentions.users.first()) {
31-
let res = await searchOneDB("otherData", "linkedPlayers", {
32+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
3233
discordID: (message.mentions.users.first()).id,
3334
})
34-
if (res == undefined)
35-
return message.channel.send("User not linked!");
35+
if (res === undefined || res === null) return message.channel.send("User not linked, therefore has no roles!");
3636
user = res.factorioName;
3737
} else {
38-
user = args[0];
38+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
39+
factorioName: args[0],
40+
})
41+
if (res === undefined || res === null) return message.channel.send("User not linked, therefore has no roles!");
42+
user = res.factorioName;
3943
}
4044

4145
let rolesEmbed = new Discord.MessageEmbed()
42-
.setTitle("Roles of a Factorio player")
43-
.setDescription("Roles of a Factorio player")
44-
.setColor("GREEN")
45-
.setAuthor(
46-
`${message.guild.me.displayName} Help`,
47-
message.guild.iconURL
48-
)
49-
.setThumbnail(client.user.displayAvatarURL())
50-
.setFooter(
51-
${message.guild.me.displayName} | Developed by DistroByte & oof2win2 | Total Commands: ${client.commands.size}`,
52-
client.user.displayAvatarURL()
53-
);
54-
const roles = (await getFactorioRoles(user)).roles;
55-
rolesEmbed.addField("\u200B", roles.join(", "));
46+
.setTitle("Roles of a Factorio player")
47+
.setDescription("Roles of a Factorio player")
48+
.setColor("GREEN")
49+
.setAuthor(
50+
`${message.guild.me.displayName} Help`,
51+
message.guild.iconURL
52+
)
53+
.setThumbnail(client.user.displayAvatarURL())
54+
.setFooter(
55+
${message.guild.me.displayName} | Developed by DistroByte & oof2win2 | Total Commands: ${client.commands.size}`,
56+
client.user.displayAvatarURL()
57+
);
58+
const roles = (await getFactorioRoles(user));
59+
if (roles === null || roles === undefined) return message.channel.send('No roles!');
60+
rolesEmbed.addField("\u200B", roles.roles.join(", "));
5661
return message.channel.send(rolesEmbed);
5762
},
5863
};

commands/moderator/givefactoriorole.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const Discord = require("discord.js");
2-
const { searchOneDB, giveFactorioRole, insertOneDB, findOneAndReplaceDB } = require("../../functions");
2+
const { giveFactorioRole } = require("../../functions");
33
const { LinkingCache } = require("../../functions");
44
const { ErrorManager } = require("../../utils/error-manager");
55
const lodash = require("lodash");
6-
let { linkConfirmation } = require("../../config/messages.json")
6+
let { linkConfirmation } = require("../../config/messages.json");
7+
const { DatabaseConnection } = require("../../utils/database-manager");
78

89
module.exports = {
910
config: {
@@ -31,7 +32,7 @@ module.exports = {
3132

3233
let user;
3334
if (message.mentions.users.first()) {
34-
let res = await searchOneDB("otherData", "linkedPlayers", {
35+
let res = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", {
3536
discordID: (message.mentions.users.first()).id,
3637
})
3738
if (res == undefined)
@@ -40,10 +41,12 @@ module.exports = {
4041
} else {
4142
user = args[0];
4243
}
43-
const role = args[1];
44+
args.shift();
45+
const role = args.join(' ');
4446
let res = await giveFactorioRole(user, role);
47+
console.log(res);
4548
if (res == false) return message.channel.send("User already has role!");
46-
if (res.ok == true)
49+
if (res.ok === true || res.result.ok === 1)
4750
return message.channel.send("Assigned role successfully!");
4851
return message.channel.send("Error adding to database");
4952
},

commands/moderator/linkuser.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { searchOneDB, insertOneDB } = require("../../functions");
1+
const { DatabaseConnection } = require("../../utils/database-manager");
22

33
module.exports = {
44
config: {
@@ -19,9 +19,11 @@ module.exports = {
1919
"You don't have enough priviliges to run this command!"
2020
);
2121
}
22+
if (!args[0]) return message.channel.send("No Discord identifier!");
23+
if (!args[1]) return message.channel.send("No Factorio identifier!");
2224
const discordID = message.mentions.users.first() ? (message.mentions.users.first()).id : args[0];
2325
args.shift();
24-
let db = await searchOneDB("otherData", "linkedPlayers", { discordID: discordID });
26+
let db = await DatabaseConnection.findOneDB("otherData", "linkedPlayers", { discordID: discordID });
2527
if (db !== null) return message.channel.send("User is already linked!");
2628
const factorioName = args.join(" ");
2729
const toWrite = {

0 commit comments

Comments
 (0)