UNPKG

koishi-plugin-bellabot

Version:

[![npm](https://img.shields.io/npm/v/koishi-plugin-bellabot?style=flat-square)](https://www.npmjs.com/package/koishi-plugin-bellabot)

310 lines (309 loc) 20.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Signin = exports.inject = void 0; const jsx_runtime_1 = require("@satorijs/element/jsx-runtime"); const koishi_1 = require("koishi"); const timeGreetings = [ { range: [0, 6], message: '凌晨好' }, { range: [6, 11], message: '上午好' }, { range: [11, 14], message: '中午好' }, { range: [14, 18], message: '下午好' }, { range: [18, 20], message: '傍晚好' }, { range: [20, 24], message: '晚上好' }, ]; const levelInfos = [ { level: 1, level_line: 1000 }, { level: 2, level_line: 3000 }, { level: 3, level_line: 7000 }, { level: 4, level_line: 15000 }, { level: 5, level_line: 30000 }, { level: 6, level_line: 50000 }, { level: 7, level_line: 80000 }, { level: 8, level_line: 170000 }, { level: 9, level_line: 350000 }, { level: 10, level_line: 800000 }, ]; exports.inject = ['database']; // 参数: ctx:Context, config?:Config class Signin { ctx; cfg; constructor(context, config) { this.ctx = context; this.cfg = config; this.ctx.database.extend("bella_sign_in", { id: "string", name: "string", time: "string", point: "unsigned", count: "unsigned", current_point: "unsigned", working: "boolean", stime: "unsigned", wpoint: "unsigned", wktimecard: "unsigned", wktimespeed: "boolean" }); } // 0:已签到, 1:签到成功, 2:未签到, 3:抽奖 // { "cmd":"get", "status": 1, "getpoint": signpoint, "signTime": signTime, "allpoint": signpoint, "count": 1 }; // 参数:session, 返回:json async callSignin(session) { var name; if (this.ctx.database && this.cfg.signin.callme) name = session.username; if (!name && this.cfg.signin.callme) name = session.author.name; else name = session.username; name = name.length > 12 ? name.substring(0, 12) : name; let signTime = koishi_1.Time.template('yyyy-MM-dd hh:mm:ss', new Date()); let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; let time = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.time; let count = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.count; let dbname = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.name; let signpoint = koishi_1.Random.int(this.cfg.signin.signpointmin, this.cfg.signin.signpointmax); if (!dbname) await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), name: name }]); if (!all_point && !time) { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), name: name, time: signTime, point: Number(signpoint), count: 1, current_point: Number(signpoint) }]); // logger.info(`${name}(${session.userId}) 第一次签到成功,写入数据库!`) return { "cmd": "get", "status": 1, "getpoint": signpoint, "signTime": signTime, "allpoint": signpoint, "count": 1 }; } if (Number(time.slice(8, 10)) - Number(signTime.slice(8, 10))) { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), name: name, time: signTime, point: Number(all_point + signpoint), count: count + 1, current_point: Number(signpoint) }]); // logger.info(`${name}(${session.userId}) 签到成功!`) return { "cmd": "get", "status": 1, "getpoint": signpoint, "signTime": signTime, "allpoint": all_point + signpoint, "count": count + 1 }; } return { "cmd": "get", "status": 0, "getpoint": signpoint, "signTime": signTime, "allpoint": all_point, "count": count }; } // 参数:session, 返回:json async signQuery(session) { let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; let time = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.time; let count = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.count; let current_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.current_point; let nowTime = koishi_1.Time.template('yyyy-MM-dd hh:mm:ss', new Date()); if (Number(time.slice(8, 10)) - Number(nowTime.slice(8, 10))) { return { "cmd": "query", "status": 2, "getpoint": current_point ? current_point : 0, "signTime": time ? time : "暂无数据", "allpoint": all_point ? all_point : 0, "count": count ? count : 0 }; } return { "cmd": "query", "status": 0, "getpoint": current_point ? current_point : 0, "signTime": time ? time : "暂无数据", "allpoint": all_point ? all_point : 0, "count": count ? count : 0 }; } // 参数:session,point 返回:<> <at />string </> async lottery(session, point) { let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; if (!point || point < 0 || isNaN(Number(point))) return "清输入有效积分"; else if (all_point - point < 0) return "积分不足!"; else { if (koishi_1.Random.bool(this.cfg.signin.lotteryOdds)) { var result = this.rangePoint(point); await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), point: Number(all_point - point + result.final_point) }]); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("at", { id: session.userId }), "\n", result.msg, " \n \u6D88\u8017", point, "\u79EF\u5206\u62BD\u5F97: ", result.final_point, "\u79EF\u5206"] }); } else { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), point: Number(all_point - point) }]); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("at", { id: session.userId }), "\n \u83B7\u5F97\u79EF\u5206:0\n", koishi_1.Random.pick([ (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u8D4C\u72D7\u8D4C\u72D7\uFF0C\u8D4C\u5230\u6700\u540E\u4E00\u65E0\u6240\u6709\uFF01" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u54E6\u543C\uFF0C\u79EF\u5206\u6CA1\u55BD\uFF01" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u8C22\u8C22\u4F60\u7684\u79EF\u5206\uFF01" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u79EF\u5206\u5316\u4F5C\u4E86\u5C18\u57C3" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u54C8\u54C8\uFF01\u5927\u5927\u5927\u975E\u914B" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u6742\u9C7C\u2661~\u5927\u54E5\u54E5\u8FDE\u8FD9\u70B9\u79EF\u5206\u90FD\u8D4C\u6389\u4E86\u5462~" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u6742\u9C7C\u2661~\u6742\u9C7C\u2661~" }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u6478\u6478\uFF0C\u6742\u9C7C\u5927\u54E5\u54E5\u4E0D\u54ED~" }) ])] }); } } } // 参数:session 返回:<>string</> async workstart(session) { var name; if (this.ctx.database && this.cfg.signin.callme) name = session.user.name; if (!name && this.cfg.signin.callme) name = session.author.name; else name = session.username; let working = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.working; let wktimecard = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimecard; let nowTime = Math.floor(Date.now() / 1000 / 60); if (working) return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [name, "\u6253\u5DE5\u4EFB\u52A1\u6B63\u5728\u8FDB\u884C\uFF0C\u53EF\u4EE5\u4F7F\u7528\"\u7ED3\u675F\u6253\u5DE5\"\u7ED3\u675F\u4EFB\u52A1"] }); else { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), working: true, stime: nowTime }]); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [name, "\u6253\u5DE5\u5F00\u59CB^v^\nTip: \u6253\u5DE5\u65F6\u95F4\u6700\u5C11\u534A\u5C0F\u65F6\uFF0C\u6700\u591A\u4E3A", 8 + wktimecard, "\u5C0F\u65F6\u54E6~"] }); } } // 参数:session 返回:<>string</> async workend(session) { var name; if (this.ctx.database && this.cfg.signin.callme) name = session.user.name; if (!name && this.cfg.signin.callme) name = session.author.name; else name = session.username; let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; let working = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.working; let stime = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.stime; let wpoint = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wpoint; let wktimecard = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimecard; let wkspeed = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimespeed; let nowTime = Math.floor(Date.now() / 1000 / 60); if (working) { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), working: false }]); var time = nowTime - stime; time = wktimecard ? (time >= (8 + wktimecard) * 60 ? (8 + wktimecard) * 60 : time) : (time >= 8 * 60 ? 8 * 60 : time); var point = time < 30 ? 0 : (wkspeed ? Math.floor((time) * (this.levelJudge(all_point).level)) : Math.floor((time / 2) * (this.levelJudge(all_point).level))); await this.ctx.database.upsert('bella_sign_in', [{ id: (String(session.userId)), point: all_point + point, wpoint: wpoint + point }]); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [name, "\u6253\u5DE5\u7ED3\u675F\u5566\uFF01\n\u672C\u6B21\u6253\u5DE5", Math.floor(time / 60), "\u5C0F\u65F6", time % 60, "\u5206\u949F\n\u83B7\u5F97\u79EF\u5206:", point] }); } else return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [name, "\u8FD8\u6CA1\u6709\u6B63\u5728\u8FDB\u884C\u7684\u6253\u5DE5\u4EFB\u52A1\u54E6,\u4F7F\u7528\"\u5F00\u59CB\u6253\u5DE5\"\u547D\u4EE4\u53EF\u4EE5\u8FDB\u884C\u6253\u5DE5\u54E6"] }); } // 参数:session 返回:<>string</> async workcheck(session) { var name; if (this.ctx.database && this.cfg.signin.callme) name = session.user.name; if (!name && this.cfg.signin.callme) name = session.author.name; else name = session.username; let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; let working = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.working; let stime = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.stime; let wpoint = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wpoint; let nowTime = Math.floor(Date.now() / 1000 / 60); var time = nowTime - stime; let wktimecard = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimecard; let wkspeed = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimespeed; time = wktimecard ? (time >= (8 + wktimecard) * 60 ? (8 + wktimecard) * 60 : time) : (time >= 8 * 60 ? 8 * 60 : time); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [name, working ? '正在打工' : '当前没有打工', "\n \u6253\u5DE5\u65F6\u95F4: ", working ? `${Math.floor(time / 60)}小时${time % 60}分钟` : '暂无信息', "\n \u53EF\u83B7\u79EF\u5206: ", working ? (time < 30 ? 0 : (wkspeed ? Math.floor((time) * (this.levelJudge(all_point).level)) : Math.floor((time / 2) * (this.levelJudge(all_point).level)))) : 0, "\n \u6253\u5DE5\u603B\u83B7\u5F97\u79EF\u5206: ", wpoint ? wpoint : 0] }); } // 参数:session,count,user 返回:<>string</> async givepoint(session, count, user) { let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; if (!user) user = session.userId; if (!count) return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u8BF7\u8F93\u5165\u6709\u6548\u6570\u5B57" }); if (count < 0 && all_point - Math.abs(count) <= 0) return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u5BF9\u65B9\u6CA1\u6709\u8FD9\u4E48\u591A\u79EF\u5206" }); else if (this.cfg.signin.superuser.includes(session.userId)) { await this.ctx.database.upsert('bella_sign_in', [{ id: (String(user.replace(/.*:/gi, ''))), point: (count < 0) ? all_point - Math.abs(count) : all_point + count }]); return (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["\u6210\u529F\u7ED9", (0, jsx_runtime_1.jsx)("at", { id: user.replace(/.*:/gi, '') ? user : user.replace(/.*:/gi, '') }), (count < 0) ? "减去" : "补充", count, "\u70B9\u79EF\u5206."] }); } else { return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u6CA1\u6709\u6743\u9650!" }); } } async shop(session) { var shoptimes = 5; await session.send((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u6240\u6709\u5546\u54C1: \n \u5E8F\u53F7 \u540D\u79F0 \u4EF7\u683C\uFF08\u79EF\u5206\uFF09\n 1. \u6253\u5DE5\u52A0\u65F6\u5361 3000\n 2. \u6253\u5DE5\u7FFB\u500D\u5361 6000\n \u8BF7\u8F93\u5165\u5E8F\u53F7\u8D2D\u4E70\uFF0C$\u53D6\u6D88\u8D2D\u4E70" })); while (shoptimes) { // 等待用户输入序号 let sel = await session.prompt(30000); if (sel == '$' || sel == '¥') return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u53D6\u6D88\u8D2D\u4E70\uFF0C\u6B22\u8FCE\u4E0B\u6B21\u5149\u4E34!" }); else await session.send((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [await this.shopJudge(session, Number(sel)), "\n\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u5E8F\u53F7\u8D2D\u4E70\u5546\u54C1\u54E6~(\u6700\u591A5\u6B21)"] })); shoptimes--; } return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\u8FDE\u7EED\u8D2D\u4E70\u6B21\u6570\u4E0A\u9650\uFF0C\u8BF7\u91CD\u65B0\u4F7F\u7528\"\u79EF\u5206\u5546\u5E97\"\u547D\u4EE4" }); } async rankUsers(count) { const signinData = await this.ctx.database.get('bella_sign_in', { count: { $gt: 0 }, }); const sortedData = signinData.sort((a, b) => b.point - a.point) .slice(0, count) .map((item, index) => (0, jsx_runtime_1.jsxs)("tr", { style: "background-color: #f2f2f2;", children: [(0, jsx_runtime_1.jsx)("td", { style: "padding: 12px; border: 1px solid #ddd;", children: index + 1 }), (0, jsx_runtime_1.jsx)("td", { style: "padding: 12px; border: 1px solid #ddd;", children: item.name ? item.name : item.id }), (0, jsx_runtime_1.jsx)("td", { style: "padding: 12px; border: 1px solid #ddd;", children: item.point })] })); // .map((item, index) => <p>{index + 1} &gt; {item.name? item.name:item.id} &gt; {item.point}</p>); // .map(item => ({ name: item.name? item.name:item.id, id: item.id, point: item.point })); return sortedData; } rangePoint(count) { var cnt = koishi_1.Random.int(0, 8); // 0.2 0.5 0.8 1.2 1.5 2.0 3.0 4.0 1.0 let result = { final_point: 0, msg: 'string' }; switch (cnt) { case 0: result = { final_point: Math.floor(count * 0.2), msg: "哈哈,赌狗!" }; break; case 1: result = { final_point: Math.floor(count * 0.5), msg: "伤害减半!" }; break; case 2: result = { final_point: Math.floor(count * 0.8), msg: "不过如此" }; break; case 3: result = { final_point: Math.floor(count * 1.2), msg: "运气不错!" }; break; case 4: result = { final_point: Math.floor(count * 1.5), msg: "哇哦!欧皇!" }; break; case 5: result = { final_point: Math.floor(count * 2.0), msg: "双倍泰裤辣!" }; break; case 6: result.final_point = (koishi_1.Random.bool(0.5)) ? Math.floor(count * 3.0) : count; result.msg = (result.final_point - count) ? "3倍!这是甚么运气!" : "欸嘿,虚晃一枪!"; break; case 7: result.final_point = (koishi_1.Random.bool(0.3)) ? Math.floor(count * 4.0) : count; result.msg = (result.final_point - count) ? "太可怕了!是有什么欧皇秘诀吗" : "欸嘿,虚晃一枪!"; break; default: result.final_point = count; result.msg = "欸嘿,虚晃一枪!"; break; } return result; } levelJudge(all_point) { for (const levelInfo of levelInfos) { if (all_point <= levelInfo.level_line) { return levelInfo; } } return levelInfos[levelInfos.length - 1]; // Default to the last level } getGreeting(hour) { const greeting = timeGreetings.find((timeGreeting) => hour >= timeGreeting.range[0] && hour < timeGreeting.range[1]); return greeting ? greeting.message : '你好'; } async shopJudge(session, select) { let wktimecard = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimecard; let wktimespeed = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.wktimespeed; let all_point = (await this.ctx.database.get('bella_sign_in', { id: String(session.userId) }))[0]?.point; if (Number(select) == 1) { var point_condition = (all_point - 3000 >= 0) ? true : false; var shop_cnt = wktimecard <= 8 ? true : false; if (point_condition && shop_cnt) { await this.ctx.database.upsert('bella_sign_in', [{ id: String(session.userId), point: all_point - 3000, wktimecard: wktimecard + 1 }]); return '购买成功!打工时长上限+1h(上限不得超过9h)'; } else if (!point_condition) return '积分不足!'; else return '购买次数达到上限'; } if (Number(select) == 2) { var point_condition = (all_point - 6000 >= 0) ? true : false; if (point_condition && !wktimespeed) { await this.ctx.database.upsert('bella_sign_in', [{ id: String(session.userId), point: all_point - 3000, wktimespeed: true }]); return '购买成功!打工获取积分翻倍(购买后永久生效)'; } else if (wktimespeed) return '您已购买此商品'; else return '积分不足!'; } } } exports.Signin = Signin;