Commit 37d39081 authored by samuel.hobman's avatar samuel.hobman

Add new file

parents
const Discord = require("Discord.js");
const config = require('./config.json');
const client = new Discord.Client;
const fs = require("fs");
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://Sam:assignment@cluster0.issnm.mongodb.net/enclosure?retryWrites=true&w=majority";
const mongoClient = new MongoClient(uri, { useNewUrlParser: true });
const currentTime = new Date();
var intervalID = setInterval(checkData, 60000);
client.once('ready', () => {
console.log("I'm logged on!");
});
client.on('message', async message => {
if (!message.content.startsWith('!') || message.author.bot) return
const command = message.content.toLowerCase();
switch(command) {
case "!report":
const flag = true;
checkData(flag);
break;
case "!store":
fs.readFile('data.txt', 'utf-8', function (err, data) {
if (err) {
return console.log(err);
}
let preWorked = data.trim().split(' ');
humidity = preWorked[0];
temperature = preWorked[1];
enclosureData = {
time : currentTime,
temperature : parseInt(temperature, 10),
humidity : parseInt(humidity, 10)
}
insertIntoMongo(enclosureData);
});
break;
case "!stoptracking":
clearInterval(intervalID);
message.channel.send("Stopping tracking.");
break;
case "!starttracking":
if (intervalID == 0) {
message.channel.send("You're already tracking.");
console.log(intervalID);
}
else {
message.channel.send("You're tracking!");
startTrack()
console.log(intervalID);
}
break;
}
});
async function checkData(flag){ // if flagged, the code simply sends the current humidity and temperature to me.
const user = await client.users.fetch("226082168294735872"); // Because of scope, this is the cleanest way to ensure it messages me directly.
fs.readFile('data.txt', 'utf-8', function (err, data) {
if (err) {
return console.log(err);
}
let preWorked = data.trim().split(' '); // takes the data and splits it into an array, seperated by a space.
humidity = parseInt(preWorked[0], 10);
temperature = parseInt(preWorked[1], 10);
if (flag){
sendToUser(user, temperature, humidity);
}
else {
if (humidity >= 80) {
alertHumidity(user, humidity, tooHumid = true);
}
else if (humidity <= 40) {
alertHumidity(user, humidity);
}
if (temperature >= 30) {
alertTemperature(user, temperature, tooHot = true);
}
else if (temperature <= 20) {
alertTemperature(user, temperature);
}
}
});
}
function sendToUser(person, temperature, humidity){
person.send("Temperature of the enclosure is currently " + temperature + "C, humidity is: " + humidity + "%");
}
function alertHumidity(person, humidity, tooHumid) {
if (tooHumid) {
person.send("Sir, your enclosure is too humid. It is currently " + humidity + "%");
}
else {
person.send("Sir, your encloure is getting arid. It is currently " + humidity + "%");
}
}
function alertTemperature(person, temperature, tooHot) {
if (tooHot) {
person.send("Sir, your enclosure is too hot. It is currently " + temperature + "C");
}
else {
person.send("Sir, your enclosure is getting cold. It is currently " + temperature + "C");
}
}
async function insertIntoMongo(enclosureData){
const user = await client.users.fetch("226082168294735872");
try {
const thisSession = await mongoClient.connect(); // returns a promise to connect
const database = thisSession.db("enclosure");
const collection = database.collection("data");
const result = await collection.insertOne(enclosureData);
console.log("Record inserted successfully.");
user.send("Stored the current status of your enclosure.");
}
finally {
await mongoClient.close();
}
function stopTrack(intervalID) {
clearInterval(intervalID);
console.log(intervalID);
}
}
function startTrack() {
intervalID = setInterval(checkData, 60000);
}
client.login(config.token);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment