111 lines
3.1 KiB
JavaScript
111 lines
3.1 KiB
JavaScript
import axios from "axios";
|
|
import sqlite3 from "sqlite3";
|
|
import Color from "./Color.js";
|
|
|
|
const Weather = (event) => {
|
|
const db = new sqlite3.Database("./db/users.db");
|
|
|
|
let nick = event.nick;
|
|
let msg = event.message;
|
|
let cmd = msg.match(/^,w (\w+)(.+?)?$/);
|
|
|
|
const setUserCity = (nick, city) => {
|
|
let time = new Date().getTime();
|
|
db.serialize(() => {
|
|
//
|
|
|
|
let stmt = db.prepare("SELECT city FROM users WHERE nick = (?);");
|
|
stmt.each(
|
|
[nick],
|
|
(err, row) => {
|
|
// console.log(err, row);
|
|
},
|
|
(err, count) => {
|
|
if (count === 0) {
|
|
// add new user with city if not found
|
|
|
|
let stmt = db.prepare(
|
|
"INSERT INTO users (nick, city, createdAt) VALUES (?,?,?);"
|
|
);
|
|
stmt.run([nick, city, time]);
|
|
stmt.finalize();
|
|
} else {
|
|
// update user city
|
|
|
|
let stmt = db.prepare(
|
|
"UPDATE users SET city = (?) WHERE nick = (?);"
|
|
);
|
|
stmt.run([city, nick]);
|
|
stmt.finalize();
|
|
}
|
|
event.reply(
|
|
'Your city is now set to "' + city + '". Call ,w to see weather.'
|
|
);
|
|
|
|
stmt.finalize();
|
|
}
|
|
);
|
|
|
|
//
|
|
});
|
|
};
|
|
|
|
const getWeather = (city) => {
|
|
axios({
|
|
method: "get",
|
|
url: `https://wttr.in/${encodeURIComponent(city)}?format=j1`,
|
|
}).then((r) => {
|
|
let weatherDesc = r.data.current_condition[0].weatherDesc[0].value;
|
|
let humidity = r.data.current_condition[0].humidity;
|
|
let tempC = r.data.current_condition[0].temp_C;
|
|
let tempF = r.data.current_condition[0].temp_F;
|
|
let windspeedKmph = r.data.current_condition[0].windspeedKmph;
|
|
let windspeedMiles = r.data.current_condition[0].windspeedMiles;
|
|
let areaName = r.data.nearest_area[0].areaName[0].value;
|
|
let country = r.data.nearest_area[0].country[0].value;
|
|
let region = r.data.nearest_area[0].region[0].value;
|
|
|
|
let output = `${Color("Weather")} (${
|
|
event.nick
|
|
}) ${areaName}, ${region}, ${country} | ${tempC}C/${tempF}F/${
|
|
Number(tempC) + 273.15
|
|
}K | ${weatherDesc} | Humidity: ${humidity}% | Wind: ${windspeedKmph}km/h/${windspeedMiles}mi/h`;
|
|
|
|
event.reply(output);
|
|
});
|
|
};
|
|
|
|
if (cmd === null) {
|
|
// ,w
|
|
db.serialize(() => {
|
|
let stmt = db.prepare("SELECT city FROM users WHERE nick = (?);");
|
|
stmt.each(
|
|
[nick],
|
|
(err, row) => {
|
|
// get user city from db
|
|
getWeather(row.city);
|
|
},
|
|
(err, count) => {
|
|
if (count === 0) {
|
|
// user not found
|
|
event.reply("usage: ,w [location] OR ,w set [location]");
|
|
}
|
|
}
|
|
);
|
|
stmt.finalize();
|
|
});
|
|
} else if (cmd[1].trim().toLowerCase() === "set") {
|
|
// ,w set neustadt an der donau
|
|
|
|
setUserCity(nick, cmd[2].trim());
|
|
} else if (cmd[1].trim()) {
|
|
// ,w neustadt an der donau
|
|
|
|
let cityMore = cmd[2] ? " " + cmd[2].trim() : "";
|
|
let city = cmd[1].trim() + cityMore;
|
|
getWeather(city);
|
|
}
|
|
};
|
|
|
|
export default Weather;
|