From 175b994be34154b27ee01ed55091b6ea2d790d88 Mon Sep 17 00:00:00 2001 From: Flummi Date: Wed, 24 Apr 2019 15:26:39 +0200 Subject: [PATCH] local sync --- src/clients/tg.mjs | 2 +- src/inc/fetch.mjs | 4 +-- src/inc/trigger/index.mjs | 2 +- src/inc/trigger/irpg.mjs | 4 +-- src/inc/trigger/lib/sandbox.mjs | 9 +++-- src/inc/trigger/lib/timer.mjs | 42 ++++++++++++---------- src/inc/trigger/lib/timer1.mjs | 64 +++++++++++++++++++++++++++++++++ src/inc/trigger/pr0gag.mjs | 4 +-- src/inc/trigger/quotes.mjs | 13 +++++++ src/inc/trigger/sandbox.mjs | 8 +++-- src/inc/trigger/timer.mjs | 5 +-- src/inc/trigger/timer1.mjs | 38 ++++++++++++++++++++ 12 files changed, 160 insertions(+), 35 deletions(-) create mode 100644 src/inc/trigger/lib/timer1.mjs create mode 100644 src/inc/trigger/timer1.mjs diff --git a/src/clients/tg.mjs b/src/clients/tg.mjs index dd2e7a7..055e3d7 100644 --- a/src/clients/tg.mjs +++ b/src/clients/tg.mjs @@ -92,7 +92,7 @@ export class tg extends EventEmitter { method: "POST", body: { chat_id: chatid, - text: msg, + text: msg.split("\n").length > 1 ? `${msg}` : msg, parse_mode: "HTML" } }; diff --git a/src/inc/fetch.mjs b/src/inc/fetch.mjs index 007d5d9..690fedb 100644 --- a/src/inc/fetch.mjs +++ b/src/inc/fetch.mjs @@ -9,9 +9,9 @@ const readdata = (res, mode, data = "") => new Promise((resolve, reject) => res .on("end", () => { switch(mode) { case "text": resolve(data); break; - case "json": try { resolve(JSON.parse(data)); } catch(err) { reject("no json D:"); } break; + case "json": try { resolve(JSON.parse(data)); } catch(err) { reject(data); } break; case "buffer": resolve(new Buffer.from(data)); break; - default: reject("lol no"); break; + default: reject("lol no D:"); break; } })); diff --git a/src/inc/trigger/index.mjs b/src/inc/trigger/index.mjs index eb98519..83e42f7 100644 --- a/src/inc/trigger/index.mjs +++ b/src/inc/trigger/index.mjs @@ -16,7 +16,7 @@ import rape from "./rape"; import sandbox from "./sandbox"; import soundcloud from "./soundcloud"; import sysinfo from "./sysinfo"; -import timer from "./timer"; +import timer from "./timer1"; import urban from "./urban"; import nxy from "./useless_nxy"; import uwe from "./useless_uwe"; diff --git a/src/inc/trigger/irpg.mjs b/src/inc/trigger/irpg.mjs index 647ae63..771c565 100644 --- a/src/inc/trigger/irpg.mjs +++ b/src/inc/trigger/irpg.mjs @@ -5,8 +5,8 @@ export default bot => { call: /^\.irpg/i, set: "uwe", f: e => { - process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; - fetch("https://irpg.zneb.org/db.php") + //process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; + fetch("https://f0ck.me/irpg/db.php") .then(res => res.text()) .then(res => { e.args[0] = e.args[0] || e.user.nick; diff --git a/src/inc/trigger/lib/sandbox.mjs b/src/inc/trigger/lib/sandbox.mjs index 1e0b7c7..9e52c3e 100644 --- a/src/inc/trigger/lib/sandbox.mjs +++ b/src/inc/trigger/lib/sandbox.mjs @@ -61,7 +61,7 @@ const sandbox = (lang, code) => { method: "POST", body: langs[lang] }; - fetch("http://rextester.com/rundotnet/api", options) + fetch("https://rextester.com/rundotnet/api", options) .then(res => res.json()) .then(body => { if (body.Errors) { @@ -76,7 +76,10 @@ const sandbox = (lang, code) => { if (body.Result.length === 0) return reject("lol keine Ausgabe"); resolve(body.Result); - }).catch(err => reject("Error!")); + }).catch(err => { + console.log(err); + reject("Error!"); + }); }); }; @@ -92,4 +95,4 @@ const bfgen = text => { return out; }; -export { maxoutput, sandbox, bfgen, hsimports }; \ No newline at end of file +export { maxoutput, sandbox, bfgen, hsimports }; diff --git a/src/inc/trigger/lib/timer.mjs b/src/inc/trigger/lib/timer.mjs index 088b771..f62b84b 100644 --- a/src/inc/trigger/lib/timer.mjs +++ b/src/inc/trigger/lib/timer.mjs @@ -19,25 +19,23 @@ export default new class timer { } add(time, fn, begin = ~~(Date.now()/1000)) { return new Promise((resolve, reject) => { - if(this.regex.test(time)) { - let seconds = 0; - time.match(/\d+(mon|[smhdwy])/g).forEach(t => { - const [,val,mod] = t.match(/(\d+)(mon|[smhdwy])/); - seconds += parseInt(this.calc[mod](val)); - }); - if(seconds > 0) { - const rest = seconds - (~~(Date.now() / 1000) - begin); - lt.setTimeout(() => { - fn(); - }, rest * 1000); - this._timers.add(rest); - resolve(rest); - } - else - reject(); - } - else - reject(); + if(!this.regex.test(time)) + return reject(); + let seconds = 0; + time.match(/\d+(mon|[smhdwy])/g).forEach(t => { + const [,val,mod] = t.match(/(\d+)(mon|[smhdwy])/); + seconds += parseInt(this.calc[mod](val)); + }); + if(seconds < 1) + return reject(); + const rest = seconds - (~~(Date.now() / 1000) - begin); + if(begin < ~~(Date.now() / 1000)) + return reject(); + lt.setTimeout(() => { + fn(); + }, rest * 1000); + this._timers.add(rest); + resolve(rest); }); } getTimers() { @@ -53,6 +51,12 @@ export default new class timer { { this.add(r.delay, () => { client.client.sendmsg("normal", r.target.channel, client.client.format(`[b]${r.target.nick}[/b]: ${r.message} [i](${r.delay})[/i]`)); + sql.any("delete from nxy_timers where id = $1", [ r.id ]) + .then(() => { + client.client.sendmsg("normal", r.target.channel, client.client.format(`timer ${r.id} gelöscht.`)); + console.log(`deleted timer ${r.id}`); + }) + .catch(err => console.log(err)); }, r.created).catch(err => {}); } }); diff --git a/src/inc/trigger/lib/timer1.mjs b/src/inc/trigger/lib/timer1.mjs new file mode 100644 index 0000000..adb9144 --- /dev/null +++ b/src/inc/trigger/lib/timer1.mjs @@ -0,0 +1,64 @@ +//import sql from "../../../inc/sql"; +import { clients } from "../../wrapper"; + +export default new class timer { + constructor() { + this.regex = /(\d+)(mon|[smhdwy])/; + this.calc = { + y: 365 * 24 * 60 * 60, // years + mon: 30 * 24 * 60 * 60, // months + w: 7 * 24 * 60 * 60, // weeks + d: 24 * 60 * 60, // days + h: 60 * 60, // hours + m: 60, // minutes + s: 1 // seconds + }; + this._timers = new Map(); + setInterval(() => { this.loop(); }, 1000); + //setTimeout(() => { this.getTimers(); }, 1000); + } + add(time, fn, now = ~~(Date.now() / 1000)) { + return new Promise((resolve, reject) => { + try { + if(!this.regex.test(time)) + return reject("ungültig lol"); + let seconds = 0; + time.match(/\d+(mon|[smhdwy])/g).forEach(t => { + const [,val,mod] = t.match(/(\d+)(mon|[smhdwy])/); + seconds += val * this.calc[mod]; + }); + if(seconds < 1) + return reject("lel ne"); + const until = now + seconds; + const rest = until - now; + + if(!this._timers.has(until)) + this._timers.set(until, []); + this._timers.get(until).push(fn); + + resolve({ + now: new Date(now * 1000), + rest: rest, + until: new Date((now + rest) * 1000) + }); + } catch(err) { + reject(err); + }; + }); + } + loop() { + this._timers.forEach((val, key) => { + if(key === ~~(Date.now() / 1000)) { + val.forEach(k => { + k.target = JSON.parse(k.target); + clients.forEach(client => { + if(client.type.toLowerCase() === k.target.type.toLowerCase() && client.client.network.toLowerCase() === k.target.network.toLowerCase()) { + client.client.sendmsg("normal", k.target.channel, client.client.format(`[b]${k.target.nick}[/b]: ${k.message} [i](${k.delay})[/i]`)); + } + }); + this._timers.delete(key); + }); + } + }); + } +}; diff --git a/src/inc/trigger/pr0gag.mjs b/src/inc/trigger/pr0gag.mjs index 670f689..3741ad3 100644 --- a/src/inc/trigger/pr0gag.mjs +++ b/src/inc/trigger/pr0gag.mjs @@ -4,8 +4,8 @@ import url from "url"; const apis = { reverse: "https://pr0.totally.rip/api/v2/item?file=", pr0gag: { - list: "https://pr0gramm.com/api/items/get/?flags=15&id=", - item: "https://pr0gramm.com/api/items/info?flags=15&itemId=" + list: "https://pr0gramm.com/api/items/get/?flags=1&id=", // 15 + item: "https://pr0gramm.com/api/items/info?flags=1&itemId=" } }; const flags = { diff --git a/src/inc/trigger/quotes.mjs b/src/inc/trigger/quotes.mjs index b56b5e4..889247a 100644 --- a/src/inc/trigger/quotes.mjs +++ b/src/inc/trigger/quotes.mjs @@ -1,4 +1,5 @@ import sql from "../sql"; +import fetch from "../fetch"; let _query_get = ` with ranked_quotes as ( @@ -23,6 +24,18 @@ insert into nxy_quotes `; export default bot => { + bot._trigger.set("qrnd", new bot.trigger({ + call: /^(\.|\/)qrnd$/i, + set: "all", + f: e => { + fetch("https://nxy.totally.rip/api/quotes.php?c=nick,item") + .then(res => res.json()) + .then(res => { + const quote = res.data.quotes[~~(Math.random() * res.data.quotes.length)]; + e.reply(`<[b]${quote.nick}[/b]> [i]${quote.item}[/i]`); + }).catch(console.error); + } + })); bot._trigger.set("quotes", new bot.trigger({ call: /^(\.|\/)q .*/i, set: "nxy", diff --git a/src/inc/trigger/sandbox.mjs b/src/inc/trigger/sandbox.mjs index fdeb67b..2ab3358 100644 --- a/src/inc/trigger/sandbox.mjs +++ b/src/inc/trigger/sandbox.mjs @@ -6,9 +6,11 @@ import fetch from "../fetch"; import stringify from "stringify-object"; let _contexts = new Map(); -sql.any("select prefix, sandbox from nxy_users where sandbox != 'NULL'") - .then(rows => rows.forEach(row => eval(`_contexts.set(row.prefix, ${JSON.parse(row.sandbox)});`))) - .catch(err => console.log("nichts vorhanden lol", err)); +setTimeout(() => { + sql.any("select prefix, sandbox from nxy_users where sandbox != 'NULL'") + .then(rows => rows.forEach(row => eval(`_contexts.set(row.prefix, ${JSON.parse(row.sandbox)});`))) + .catch(err => console.log("nichts vorhanden lol", err)); +}, 5000); export default bot => { bot._trigger.set("sandbox_js", new bot.trigger({ diff --git a/src/inc/trigger/timer.mjs b/src/inc/trigger/timer.mjs index 8f724ab..0f897b5 100644 --- a/src/inc/trigger/timer.mjs +++ b/src/inc/trigger/timer.mjs @@ -11,8 +11,9 @@ export default bot => { }, active: false, f: e => { - const t = e.args.shift(); - const msg = e.args.join(" "); + const t = e.args.shift() + , msg = e.args.join(" "); + if(t === "debug" && e.user.level.level >= 100) return e.reply( JSON.stringify([...timer._timers]) ); diff --git a/src/inc/trigger/timer1.mjs b/src/inc/trigger/timer1.mjs new file mode 100644 index 0000000..cdc895e --- /dev/null +++ b/src/inc/trigger/timer1.mjs @@ -0,0 +1,38 @@ +import timer from "./lib/timer1"; +//import sql from "../../inc/sql"; + +export default bot => { + bot._trigger.set("timer", new bot.trigger({ + call: /^(\.|\/)timer .*/i, + set: "nxy", + level: 100, + help: { + text: "(WIP) Sets a timer, delay can be: s, m, h, d, w, mon, y", + usage: "[b].timer[/b] [i][/i] [i][/i]..." + }, + active: true, + f: e => { + const t = e.args.shift() + , msg = e.args.join(" "); + + if(t === "debug" && e.user.level.level >= 100) + return e.reply( JSON.stringify([...timer._timers.entries()]) ); + + timer.add(t, { + prefix: e.user.prefix, + target: JSON.stringify({ + nick: e.user.nick, + type: e.type, + network: e.network, + channel: e.channelid + }), + message: msg, + delay: t + }).then(tmp => { + //e.reply(JSON.stringify([...timer._timers.entries()])); + }).catch(err => { + e.reply(err); + }); + } + })); +}; \ No newline at end of file