import axios from "axios"; import Database from "better-sqlite3"; import Color from "./Color.js"; const Weather = (event) => { const db = new Database("./db/users.db", null); let nick = event.nick; let msg = event.message; let cmd = msg.match(/^,w (\w+)(.+?)?$/); const setUserCity = (nick, city) => { let time = new Date().getTime(); const row = db .prepare("SELECT city FROM users WHERE nick = (?)") .get([nick]); if (row) { // update user city const stmt = db.prepare("UPDATE users SET city = (?) WHERE nick = (?);"); stmt.run([city, nick]); } else { // add new user with city if not found const stmt = db.prepare( "INSERT INTO users (nick, city, createdAt) VALUES (?,?,?);" ); stmt.run([nick, city, time]); } event.reply( 'Your city is now set to "' + city + '". Call ,w to see weather.' ); }; 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 const row = db.prepare("SELECT * FROM users WHERE nick = (?)").get([nick]); if (row) { // get user city from db getWeather(row.city); } else { // user not found event.reply("usage: ,w [location] OR ,w set [location]"); } } 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;