|
@@ -1,24 +1,145 @@
|
|
const Discord = require("discord.js");
|
|
const Discord = require("discord.js");
|
|
const TOKEN = require("./token.js");
|
|
const TOKEN = require("./token.js");
|
|
|
|
+const lowdb = require("lowdb");
|
|
|
|
+const FileSync = require("lowdb/adapters/FileSync");
|
|
|
|
+
|
|
|
|
+const adapter = new FileSync("db.json");
|
|
|
|
+const db = lowdb(adapter);
|
|
|
|
+
|
|
|
|
+db._.mixin({
|
|
|
|
+ randomElement: array => array[Math.floor(Math.random() * array.length)]
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+db.defaults({
|
|
|
|
+ emotes: {
|
|
|
|
+ angery: [
|
|
|
|
+ "488797492352385034",
|
|
|
|
+ "488797455899688971",
|
|
|
|
+ "488796668750200842",
|
|
|
|
+ "488796396175097876",
|
|
|
|
+ "488793566982963231",
|
|
|
|
+ "488793511181811749",
|
|
|
|
+ "488791172085448718",
|
|
|
|
+ "489091926474096651"
|
|
|
|
+ ],
|
|
|
|
+ hug: [
|
|
|
|
+ "489094486132260864",
|
|
|
|
+ "489094428410249218",
|
|
|
|
+ "489094553148850176",
|
|
|
|
+ "489094604935790622",
|
|
|
|
+ "485109695846023209"
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ specialUsers: ["141880968800763905", "307897683849510912", "335898304472678402"],
|
|
|
|
+ guides: {},
|
|
|
|
+ editors: {
|
|
|
|
+ roles: ["484046157971193866", "305844721622712322"],
|
|
|
|
+ users: ["307897683849510912", "170116346095468545"]
|
|
|
|
+ }
|
|
|
|
+}).write();
|
|
|
|
|
|
const client = new Discord.Client();
|
|
const client = new Discord.Client();
|
|
-const PING_EMOTES_COUNT = 7;
|
|
|
|
|
|
|
|
-function getPingEmoteId() {
|
|
|
|
- return Math.floor(Math.random() * PING_EMOTES_COUNT);
|
|
|
|
|
|
+function isAuthorised(member) {
|
|
|
|
+ if(db.get("editors.users").includes(member.id).value())
|
|
|
|
+ return true;
|
|
|
|
+ if(db.get("editors.roles").intersectionWith(member.roles.keyArray()).isEmpty().value())
|
|
|
|
+ return false;
|
|
|
|
+ return true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const commands = {
|
|
|
|
+ "make guide": (msg, s) => {
|
|
|
|
+ if(!isAuthorised(msg.member))
|
|
|
|
+ return;
|
|
|
|
+ let content = s.substring("make guide ".length);
|
|
|
|
+ let guideName = content.substring(0, content.indexOf("\n")).trim();
|
|
|
|
+ let guideContent = content.substring(content.indexOf("\n")).trim();
|
|
|
|
+ db.get("guides")
|
|
|
|
+ .set(guideName, guideContent)
|
|
|
|
+ .write();
|
|
|
|
+ msg.channel.send(
|
|
|
|
+ `${msg.author.toString()} Added/updated "${guideName}"!`
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ "delete guide": (msg, s) => {
|
|
|
|
+ if(!isAuthorised(msg.member))
|
|
|
|
+ return;
|
|
|
|
+ let guideName = s.substring("delete guide ".length).trim();
|
|
|
|
+ if (
|
|
|
|
+ !db
|
|
|
|
+ .get("guides")
|
|
|
|
+ .has(guideName)
|
|
|
|
+ .value()
|
|
|
|
+ ) {
|
|
|
|
+ msg.channel.send(
|
|
|
|
+ `${msg.author.toString()} No guide "${guideName}"!`
|
|
|
|
+ );
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ db.get("guides")
|
|
|
|
+ .unset(guideName)
|
|
|
|
+ .write();
|
|
|
|
+ msg.channel.send(
|
|
|
|
+ `${msg.author.toString()} Removed guide "${guideName}!"`
|
|
|
|
+ );
|
|
|
|
+ },
|
|
|
|
+ help: msg => {
|
|
|
|
+ let guides = db
|
|
|
|
+ .get("guides")
|
|
|
|
+ .keys()
|
|
|
|
+ .value()
|
|
|
|
+ .reduce((p, c) => `${p}\n${c}`, "");
|
|
|
|
+ msg.channel.send(
|
|
|
|
+ `Hello! I am NoctBot! I have answers for the most common C(O)M-related questions.\nJust ping me with one of the following commands:\n\`\`\`${guides}\`\`\``
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
client.on("ready", () => {
|
|
client.on("ready", () => {
|
|
console.log("Ready!");
|
|
console.log("Ready!");
|
|
});
|
|
});
|
|
|
|
|
|
client.on("message", m => {
|
|
client.on("message", m => {
|
|
- if (m.mentions.users.some(u => u.id == client.user.id)) {
|
|
|
|
- const emote = `AngeryPing${getPingEmoteId()}`;
|
|
|
|
- m.channel.send(client.emojis.find(e => e.name == emote).toString());
|
|
|
|
|
|
+ if (m.mentions.users.size == 0) return;
|
|
|
|
+ if (m.mentions.users.first().id == client.user.id) {
|
|
|
|
+ let content = m.cleanContent.substring(
|
|
|
|
+ `@${client.user.username} `.length
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ for (let c in commands) {
|
|
|
|
+ if (content.startsWith(c)) {
|
|
|
|
+ commands[c](m, content);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let guide = db
|
|
|
|
+ .get("guides")
|
|
|
|
+ .get(content.trim())
|
|
|
|
+ .value();
|
|
|
|
+ if (guide) {
|
|
|
|
+ m.channel.send(guide);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const emoteType = db
|
|
|
|
+ .get("specialUsers")
|
|
|
|
+ .includes(m.author.id)
|
|
|
|
+ .value()
|
|
|
|
+ ? "hug"
|
|
|
|
+ : "angery";
|
|
|
|
+ const id = db
|
|
|
|
+ .get("emotes")
|
|
|
|
+ .get(emoteType)
|
|
|
|
+ .randomElement()
|
|
|
|
+ .value();
|
|
|
|
+ m.channel.send(client.emojis.find(e => e.id == id).toString());
|
|
} else if (m.content.includes("Noct")) {
|
|
} else if (m.content.includes("Noct")) {
|
|
- m.channel.send(client.emojis.find(e => e.name == "mukuNeighWaaaaaa").toString());
|
|
|
|
|
|
+ m.channel.send(
|
|
|
|
+ client.emojis.find(e => e.name == "mukuNeighWaaaaaa").toString()
|
|
|
|
+ );
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
-client.login(TOKEN);
|
|
|
|
|
|
+client.login(TOKEN);
|