Uwev2/src/inc/trigger/quotes.js
2017-11-28 10:45:16 +01:00

84 lines
2.2 KiB
JavaScript

import sql from "../sql.js";
let _query_get = `
with ranked_quotes as (
select nick,
item,
rank() over (partition by nick order by id),
count(*) over (partition by nick) as total
from nxy_quotes
)
select *
from ranked_quotes
where lower(nick) like lower($1)
order by {order}
limit 1
{offset}
`;
let _query_add = `
insert into nxy_quotes
(nick, item, channel, created_by)
values
($1, $2, $3, $4);
`;
module.exports = bot => {
bot._trigger.set("quotes", new bot.trigger({
call: /^(\.|\/)q .*/i,
active: true,
f: e => {
let args = e.message.trim().substring(3).split(" ");
const cmd = args[0].toLowerCase();
let nick;
switch(cmd) {
case "add": // add quote
if(args.length < 3)
return e.reply("ob du behindert bist.");
args.shift();
nick = args[0].match(/<?[~&@%+]?([a-zA-Z0-9_\-^`|\\\[\]{}]+)>?/)[1];
args.shift();
let quote = args.join(" ");
sql.any(_query_add, [ nick, quote, `${e.network}.${e.channel}`, e.user.nick ])
.then(rows => { })
.catch(err => {
e.reply("duplicate!");
});
break;
default: // get quote
let nick = cmd;
let index = 0
, offset = 0
, order = "rank asc"
, rand = false
, query = _query_get;
if(args.length === 2) {
if(isNaN(args[1]))
return e.reply("Mayonnaise ist keine Zahl du Pfosten.");
index = parseInt(args[1]);
offset = index;
order = (index < 0 ? "rank desc" : "rank asc");
offset = Math.abs(offset) - 1;
}
else
rand = true;
query = query
.replace("{order}", rand ? "random()" : order)
.replace("{offset}", rand ? "" : `offset ${offset}`);
sql.any(query, [nick])
.then(rows => {
if(!rows[0])
return e.reply("index nicht vorhanden");
e.reply(`[${rows[0].rank}/${rows[0].total}] <${rows[0].nick}> ${rows[0].item}`)
})
.catch(err => console.log(err));
break;
}
}
}));
};