84 lines
2.2 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
}));
|
|
};
|