This commit is contained in:
Flummi
2017-11-23 07:00:01 +01:00
parent 964301d148
commit 8185feb261
3 changed files with 116 additions and 13 deletions

96
src/inc/trigger/quotes.js Normal file
View File

@ -0,0 +1,96 @@
import sql from "../sql.js";
let _query_get = `
set @s := (select count(id) as sum from nxy_quotes where nick like ?);
select id, nick, item, rank, @s as sum
from (
select @r:= if(@u = nick, @r {rankorder}) as rank,
id, nick, item, @u:= nick
from nxy_quotes,
(select @r:= 1) as r,
(select @u:= '') as u
order by nick, id {order}
) as blah
where nick like ?
{rand}
limit 1
offset {offset};
`;
let _query_add = `
insert into nxy_quotes
(nick, item, channel, created_by)
values
(?, ?, ?, ?);
`;
module.exports = bot => {
bot._trigger.set("quotes", {
call: /^(\.|\/)q .*/i,
level: 0,
active: true,
clients: ["irc", "tg"],
f: e => {
/* <cmd> <nick> <quote>...
* <nick> [<index>]
*/
let args = e.message.trim().substring(3).split(" ");
const cmd = args[0].toLowerCase();
let nick;
switch(cmd) {
case "add": // add user 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(" ");
try {
sql.exec(_query_add, [ nick, quote, `${e.network}.${e.channel}`, e.user.nick ])
.then(rows => { })
.catch(err => {
e.reply("duplicate!");
});
}
catch(err) {
e.reply("duplicate!");
}
break;
default: // get quote
let nick = cmd;
let index = 0
, offset = 0
, order = "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 ? "desc" : "asc");
offset = Math.abs(offset) - 1;
}
else
rand = true;
query = query
.replace("{rand}", rand ? "order by rand()" : "")
.replace("{rankorder}", rand ? "+ 1,1" : (order === "asc" ? "+ 1,1" : "- 1,@s"))
.replace("{order}", index ? order : "asc")
.replace("{offset}", rand ? 0 : offset);
sql.exec(query, [nick, nick])
.then(rows => {
if(!rows[1][0])
return e.reply("index nicht vorhanden");
e.reply(`[${rows[1][0].rank}/${rows[1][0].sum}] <${rows[1][0].nick}> ${rows[1][0].item}`)
})
.catch(err => console.log(err));
break;
}
}
});
};