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(/?/)[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; } } })); };