cnmc-bot/index.js
2020-09-01 13:04:00 +02:00

115 lines
No EOL
3.4 KiB
JavaScript

const config = require("./config.json");
const discord = require("discord.js");
const { app, answers, messages, challenge, points } = require("./src");
const client = new discord.Client({
presence: {
status: "online",
activity: {
name: "CNMC",
type: "PLAYING"
}
}
});
client.on("ready", () => {
console.log("Ready");
});
client.on("message", async msg => {
try {
await app.message(msg);
} catch(e) {
console.error("APP", e);
}
});
function check(member, bonus = 0) {
var pointNum = bonus + (answers.get(member.user.id) ? (0.5 + ((challenge.get("num") || 1) * 0.5)) : 0);
if(points.get(member.user.id) === pointNum) return;
if(points.get(member.user.id) && points.get(member.user.id) > 1) return;
var diff = pointNum - (points.get(member.user.id) || 0);
points.set(pointNum);
member.setNickname(member.displayName.replace(/\[([0-9.]+)\]/, (match, num) => {
return `[${parseFloat(num) + diff}]`;
}));
}
client.on("messageDelete", msg => {
if(messages.get(msg.id)) {
messages.delete(msg.id);
messages.delete(msg.id);
var an = answers.get(msg.author.id) || 0;
if(an) answers.set(msg.author.id, an - 1);
check(msg.member);
}
});
client.on("messageReactionAdd", async (react, user) => {
if(react.message.channel.id !== "745989024099074068") return;
if(user.id !== "694395936809418816") {
if(user.id !== client.user.id) {
await react.users.remove(user);
}
return;
}
if(user.id === client.user.id) return;
if(react.emoji.name !== "❌" && react.emoji.name !== "✅") return;
if(react.emoji.name === "✅") {
var r = await react.message.reactions.resolve("❌");
await r.remove();
var points = 0;
if(challenge.get("hint")) {
var msg = await react.message.channel.messages.fetch(challenge.get("hint"));
if(msg.createdTimestamp < react.message.createdTimestamp) {
points -= 0.5;
}
}
if(!challenge.get("answered")) {
challenge.set("answered", 0);
}
switch(challenge.get("answered")) {
case 0:
points += 2;
break;
case 1:
points += 1.5;
break;
case 2:
points += 1;
break;
default:
points += 0.5;
}
challenge.set("answered", challenge.get("answered") + 1);
if(points > 0) {
check(react.message.member, points);
}
react.message.channel.messages.cache.filter(val => val.author.id === react.message.author.id)
.filter(val => val.id !== react.message.id)
.forEach(msg => msg.reactions.removeAll());
} else {
var r = await react.message.reactions.resolve("✅");
await r.remove();
}
})
client.on("messageUpdate", (msg, msg2) => {
if(msg.channel.id === "745989024099074068") {
if(messages.get(msg.id)) {
messages.delete(msg.id);
var an = answers.get(msg.author.id) || 0;
if(an) answers.set(msg.author.id, an - 1);
check(msg.member);
}
msg.author.send("You've edited the messages so it got deleted.");
msg.delete();
}
});
client.login(config.token);