Skip to content

Commit 178ba0f

Browse files
committed
yes
1 parent 4ff156d commit 178ba0f

15 files changed

+1205
-136
lines changed

.gitignore

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
2-
3-
config.json
1+
LICENSE
2+
faqtemps.sqlite
3+
commands/kill.js
4+
node_modules
45
config.json
56
config.json
7+
*.json

bot.js

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,50 @@ const client = new Discord.Client();
44
const config = require("./config.json");
55
const { prefix } = require("./config.json");
66
client.commands = new Discord.Collection();
7+
const { Sequelize } = require("sequelize");
78

8-
9-
10-
11-
9+
const sequelize = new Sequelize("database", "user", "password", {
10+
host: "localhost",
11+
dialect: "sqlite",
12+
logging: console.log,
13+
// SQLite only
14+
storage: "faqtemps.sqlite",
15+
});
16+
const FAQTemp = sequelize.define("faqtemps.sqlite", {
17+
Question: {
18+
type: Sequelize.STRING,
19+
unique: true,
20+
primaryKey: true,
21+
},
22+
Answer: Sequelize.TEXT,
23+
});
24+
async function checkready() {
25+
try {
26+
await sequelize.authenticate();
27+
console.log("Connection has been established successfully.");
28+
} catch (error) {
29+
console.error("Unable to connect to the database:", error);
30+
}
31+
}
32+
checkready();
1233
const commandFiles = fs
1334
.readdirSync("./commands")
1435
.filter((file) => file.endsWith(".js"));
1536

16-
1737
client.once("ready", () => {
38+
FAQTemp.sync();
39+
client.user.setActivity(client.guilds.cache.size + ' servers', { type: 'WATCHING' });
1840
console.log("My Body is ready.");
1941
});
42+
client.on("guildCreate", () => {
43+
// Fired every time the bot is added to a new server
44+
client.user.setActivity(client.guilds.cache.size + ' servers', { type: 'WATCHING' });
45+
});
2046

47+
client.on("guildDelete", () => {
48+
// Fired every time the bot is removed from a server
49+
client.user.setActivity(client.guilds.cache.size + ' servers', { type: 'WATCHING' });
50+
});
2151
for (const file of commandFiles) {
2252
const command = require(`./commands/${file}`);
2353

@@ -27,14 +57,18 @@ for (const file of commandFiles) {
2757
}
2858

2959
client.on("message", (message) => {
60+
const guild = client.guilds.cache.get(message.guild.id);
61+
const guildid = guild.id;
62+
FAQTemp.tableName = guildid
63+
FAQTemp.sync();
3064
function clean(text) {
3165
if (typeof text === "string")
3266
return text
3367
.replace(/@/g, "" + String.fromCharCode(8203))
3468
.replace(/@/g, "@" + String.fromCharCode(8203));
3569
else return text;
3670
}
37-
if (!message.content.startsWith(prefix) || message.author.bot) return;
71+
if (!message.content.startsWith(prefix) || message.channel.type == 'dm') return;
3872

3973
const args = message.content.slice(prefix.length).trim().split(/ +/);
4074
const command = args.shift().toLowerCase();

commands/addQuestion.js

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
const { ReactionCollector } = require("discord.js-collector");
2-
const Enmap = require("enmap");
3-
const myEnmap = require("./myEnmap.js");
2+
const Sequelize = require("sequelize");
3+
const sequelize = new Sequelize("database", "user", "password", {
4+
host: "localhost",
5+
dialect: "sqlite",
6+
logging: console.log,
7+
// SQLite only
8+
storage: "faqtemps.sqlite",
9+
});
10+
const FAQTemp = sequelize.define("faqtemps.sqlite", {
11+
Question: {
12+
type: Sequelize.STRING,
13+
unique: true,
14+
primaryKey: true,
15+
allowNull: false,
16+
},
17+
Answer: Sequelize.TEXT,
18+
});
419
const jsonfile = require("jsonfile");
520
const file = "QandA/questions.json";
621
const { MessageEmbed } = require("discord.js");
@@ -17,7 +32,11 @@ const { cpuUsage } = require("process");
1732
module.exports = {
1833
name: "addfaq",
1934
description: "Creates a FAQ Q&A",
20-
execute(message, args) {
35+
execute(message, args, client) {
36+
const guild = client.guilds.cache.get(message.guild.id);
37+
const guildid = guild.id;
38+
FAQTemp.tableName = guildid
39+
FAQTemp.sync();
2140
let embedcollecttrigger = new MessageEmbed()
2241
.setColor("#ff9100")
2342
.addField(
@@ -26,7 +45,7 @@ module.exports = {
2645
)
2746
.setFooter(
2847
"Requested by " + message.author.username,
29-
message.author.displayAvatarURL({ format: "gif", dynamic: "true" })
48+
message.author.displayAvatarURL({ format: "jpg", dynamic: "true" })
3049
);
3150
message.channel.send(embedcollecttrigger);
3251
message.channel
@@ -42,46 +61,30 @@ module.exports = {
4261
"KICK_MEMBERS"
4362
)
4463
) {
45-
function makeid(length) {
46-
var result = "";
47-
var characters =
48-
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
49-
var charactersLength = characters.length;
50-
for (var i = 0; i < length; i++) {
51-
result += characters.charAt(
52-
Math.floor(Math.random() * charactersLength)
53-
);
64+
try {
65+
// equivalent to: INSERT INTO tags (name, description, username) values (?, ?, ?);
66+
const faq = FAQTemp.create({
67+
Question: collected.first().content,
68+
Answer: collected.last().content,
69+
});
70+
return message.reply(
71+
`Question ${collected.first().content} added.`
72+
);
73+
FAQTemp.sync();
74+
} catch (e) {
75+
if (e.Question === "SequelizeUniqueConstraintError") {
76+
FAQTemp.sync();
77+
return message.reply("That FAQ already exists.");
5478
}
55-
return result;
56-
}
57-
var ID;
58-
ID = makeid(5);
59-
60-
function sendFAQChannel() {
61-
let channel = client.channels.cache.get("701517404659777666");
62-
let faqqanda = new MessageEmbed()
63-
.setColor("#ff9100")
64-
.addField(myEnmap.faqs.observe(ID), ID);
65-
client.channels.cache.get("701517404659777666");
66-
channel.send(faqqanda);
79+
console.log(e);
80+
FAQTemp.sync();
81+
return message.reply("Something went wrong with adding a FAQ.");
6782
}
68-
myEnmap.faqs.fetchAll;
69-
myEnmap.faqs.set(ID, [
70-
"Question: ",
71-
collected.first().content,
72-
"Answer: ",
73-
collected.last().content,
74-
]);
75-
message.channel.send("FAQ Saved! ID is- " + ID);
76-
sendFAQChannel();
7783
} else {
7884
message.channel.send(
7985
"Oops! looks like you don't have the right permissions!"
8086
);
8187
}
82-
83-
// The collected.first().content is the first thing the sender of the initial message chats
84-
// The time: 60000000 represents that it won't collect data after 60 seconds
8588
});
8689
},
8790
};

commands/deleteFAQ.js

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
11
const { ReactionCollector } = require("discord.js-collector");
22
const Discord = require("discord.js");
3-
const Enmap = require("enmap");
4-
const myEnmap = require("./myEnmap.js");
3+
const Sequelize = require("sequelize");
4+
const sequelize = new Sequelize("database", "user", "password", {
5+
host: "localhost",
6+
dialect: "sqlite",
7+
logging: console.log,
8+
// SQLite only
9+
storage: "faqtemps.sqlite",
10+
});
11+
const FAQTemp = sequelize.define("faqtemps.sqlite", {
12+
Question: {
13+
type: Sequelize.STRING,
14+
unique: true,
15+
primaryKey: true,
16+
allowNull: false,
17+
},
18+
Answer: Sequelize.TEXT,
19+
});
520
const client = new Discord.Client();
621
const jsonfile = require("jsonfile");
722
const file = "./questions.json";
@@ -11,23 +26,49 @@ const prefix = botSettings.prefix;
1126
const editJsonFile = require("edit-json-file");
1227
let file2 = editJsonFile(`./questions.json`);
1328
const { MessageEmbed, DiscordAPIError } = require("discord.js");
29+
function clean(text) {
30+
if (typeof text === "string")
31+
return text
32+
.replace(/@/g, "" + String.fromCharCode(8203))
33+
.replace(/@/g, "@" + String.fromCharCode(8203));
34+
else return text;
35+
}
1436

1537
module.exports = {
1638
name: "deletefaq",
1739
description: "Deletes a FAQ Q&A",
18-
execute(message, args) {
19-
myEnmap.faqs.fetchAll;
20-
if (message.member.hasPermission("ADMINISTRATOR", "MANAGE_SERVER", "KICK_MEMBERS")) {
21-
myEnmap.faqs.evict(args);
22-
myEnmap.faqs.delete(args);
23-
let embeddelete = new MessageEmbed()
24-
.setColor("#ff9100")
25-
.addField("FAQ " + args, "Was deleted.")
26-
.setFooter(
27-
"Requested by " + message.author.username,
28-
message.author.displayAvatarURL({ format: "gif", dynamic: "true"})
29-
)
30-
message.channel.send(embeddelete);
40+
execute(message, args, client) {
41+
const guild = client.guilds.cache.get(message.guild.id);
42+
const guildid = guild.id;
43+
FAQTemp.tableName = guildid
44+
FAQTemp.sync();
45+
if (
46+
message.member.hasPermission(
47+
"ADMINISTRATOR",
48+
"MANAGE_SERVER",
49+
"KICK_MEMBERS"
50+
)
51+
) {
52+
try {
53+
const QandA = args.join(" ");
54+
FAQTemp.destroy({ where: { Question: QandA } });
55+
let embeddelete = new MessageEmbed()
56+
.setColor("#ff9100")
57+
.addField("FAQ " + QandA, "Was deleted.")
58+
.setFooter(
59+
"Requested by " + message.author.username,
60+
message.author.displayAvatarURL({ format: "jpg", dynamic: "true" })
61+
);
62+
message.channel.send(embeddelete);
63+
FAQTemp.sync();
64+
} catch (error) {
65+
console.error(error);
66+
message.channel.send(
67+
`\`An unexpected error has occured! Please try again later! Please report this to @BoredFish#4269. More technical details:\` \`\`\`xl\n${clean(
68+
error
69+
)}\n\`\`\``
70+
);
71+
}
3172
} else {
3273
let embeddeleteabort = new MessageEmbed()
3374
.setColor("#ff9100")
@@ -37,9 +78,10 @@ module.exports = {
3778
)
3879
.setFooter(
3980
"Requested by " + message.author.username,
40-
message.author.displayAvatarURL({ format: "gif", dynamic: "true"})
41-
)
81+
message.author.displayAvatarURL({ format: "jpg", dynamic: "true" })
82+
);
4283
message.channel.send(embeddeleteabort);
84+
FAQTemp.sync();
4385
}
4486
},
4587
};

commands/deleteall.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
const { ReactionCollector } = require("discord.js-collector");
2+
const Sequelize = require("sequelize");
3+
const sequelize = new Sequelize("database", "user", "password", {
4+
host: "localhost",
5+
dialect: "sqlite",
6+
logging: console.log,
7+
// SQLite only
8+
storage: "faqtemps.sqlite",
9+
});
10+
const FAQTemp = sequelize.define(
11+
"faqtemps.sqlite",
12+
{
13+
Question: {
14+
type: Sequelize.STRING,
15+
unique: true,
16+
primaryKey: true,
17+
allowNull: false
18+
},
19+
Answer: Sequelize.TEXT,
20+
},
21+
);
22+
const jsonfile = require("jsonfile");
23+
const file = "./questions.json";
24+
const fs = require("fs");
25+
const botSettings = require("../config.json");
26+
const prefix = botSettings.prefix;
27+
const editJsonFile = require("edit-json-file");
28+
let file2 = editJsonFile(`./questions.json`);
29+
const { MessageEmbed } = require("discord.js");
30+
function clean(text) {
31+
if (typeof text === "string")
32+
return text
33+
.replace(/@/g, "" + String.fromCharCode(8203))
34+
.replace(/@/g, "@" + String.fromCharCode(8203));
35+
else return text;
36+
}
37+
module.exports = {
38+
name: "deleteall",
39+
description: "Deletes a FAQ Q&A",
40+
execute(message, args, client) {
41+
const guild = client.guilds.cache.get(message.guild.id);
42+
const guildid = guild.id;
43+
FAQTemp.tableName = guildid
44+
FAQTemp.sync();
45+
if (message.member.hasPermission("ADMINISTRATOR")) {
46+
try {
47+
const FAQCount = FAQTemp.findAndCountAll();
48+
FAQTemp.destroy({
49+
truncate: true,
50+
});
51+
message.reply("Deleted all faqs");
52+
FAQTemp.sync();
53+
} catch (error) {
54+
console.error(error);
55+
message.channel.send(
56+
`\`An unexpected error has occured! No FAQs were deleted. More technical details:\` \`\`\`xl\n${clean(
57+
error
58+
)}\n\`\`\``
59+
);
60+
FAQTemp.sync();
61+
}
62+
} else {
63+
message.reply("Whoops! Looks like you aren't an admin.");
64+
FAQTemp.sync();
65+
}
66+
},
67+
};

commands/deleteall.txt

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)