Initial commit
This commit is contained in:
commit
53c0532e15
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
|
@ -0,0 +1,5 @@
|
||||||
|
const Color = (name) => {
|
||||||
|
return `[${"\u0003" + "68" + name + "\u0003"}]`;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Color;
|
|
@ -0,0 +1,29 @@
|
||||||
|
import axios from "axios";
|
||||||
|
import Color from "./Color.js";
|
||||||
|
|
||||||
|
const getTitle = async (url) => {
|
||||||
|
const r = await axios({ method: "get", url });
|
||||||
|
const doc = r.data;
|
||||||
|
return doc.split("<title>")[1].split("</title>")[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
const UrlTitle = (event) => {
|
||||||
|
const geturl = new RegExp(
|
||||||
|
"(^|[ \t\r\n])((ftp|http|https|gopher|gemini|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))",
|
||||||
|
"g"
|
||||||
|
);
|
||||||
|
let msg = event.message;
|
||||||
|
|
||||||
|
if (msg && msg.match(geturl)) {
|
||||||
|
let urls = msg.match(geturl);
|
||||||
|
|
||||||
|
urls.map(async (url) => {
|
||||||
|
let title = await getTitle(url.trim());
|
||||||
|
return event.reply(Color("Title") + " " + title);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UrlTitle;
|
|
@ -0,0 +1,37 @@
|
||||||
|
import axios from "axios";
|
||||||
|
import Color from "./Color.js";
|
||||||
|
|
||||||
|
const Weather = (event) => {
|
||||||
|
let reqCity = event.message.match(/,w ([A-Za-z0-9 ]+)/);
|
||||||
|
// let city = event.message.split(" ");
|
||||||
|
let city = encodeURIComponent(reqCity[1].trim());
|
||||||
|
|
||||||
|
// check if user posted a city TODO
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
axios({
|
||||||
|
method: "get",
|
||||||
|
url: `https://wttr.in/${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`;
|
||||||
|
|
||||||
|
resolve(output);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Weather;
|
|
@ -0,0 +1,48 @@
|
||||||
|
import { Client } from "irc-framework";
|
||||||
|
import Weather from "./components/Weather.js";
|
||||||
|
import UrlTitle from "./components/UrlTitle.js";
|
||||||
|
|
||||||
|
function middleware() {
|
||||||
|
return function (client, raw_events, parsed_events) {
|
||||||
|
parsed_events.use(title);
|
||||||
|
};
|
||||||
|
|
||||||
|
function title(command, event, client, next) {
|
||||||
|
if (command === "message") {
|
||||||
|
UrlTitle(event);
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const bot = new Client();
|
||||||
|
bot.use(middleware());
|
||||||
|
bot.connect({
|
||||||
|
host: "irc.libera.chat",
|
||||||
|
// host: "localhost",
|
||||||
|
nick: "g-bot",
|
||||||
|
port: 6667,
|
||||||
|
version: "grizzlys bot",
|
||||||
|
username: "g-bot",
|
||||||
|
gecos: "g-bot",
|
||||||
|
});
|
||||||
|
bot.on("registered", () => {
|
||||||
|
console.log("Connected!");
|
||||||
|
bot.join("#grizzly");
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.on("close", () => {
|
||||||
|
console.log("Connection close");
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.matchMessage(/^,w /, async (event) => {
|
||||||
|
const data = await Weather(event);
|
||||||
|
event.reply(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.matchMessage(/^,help/, (event) => {
|
||||||
|
event.reply(",help - show this message");
|
||||||
|
event.reply(",w [location] - show weather for you city");
|
||||||
|
event.reply(",w set [location] - save your location");
|
||||||
|
event.reply(",w - after your save your location you can use ,w");
|
||||||
|
});
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"name": "irc_bot",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.26.1",
|
||||||
|
"irc-framework": "^4.12.1",
|
||||||
|
"sqlite3": "^5.0.2"
|
||||||
|
},
|
||||||
|
"type": "module"
|
||||||
|
}
|
Loading…
Reference in New Issue