New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

koishi-plugin-bomb-game

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

koishi-plugin-bomb-game - npm Package Compare versions

Comparing version 1.8.0 to 2.0.0

345

lib/index.js

@@ -1,298 +0,55 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.apply = exports.Config = exports.name = void 0;
const koishi_1 = require("koishi");
const url_1 = require("url");
const path_1 = require("path");
exports.name = 'bomb-game';
exports.Config = koishi_1.Schema.object({
主人QQ: koishi_1.Schema.string().default('1594817572').description('填写你的QQ,用于增加炸弹等')
});
const logger = new koishi_1.Logger('炸弹人');
function apply(ctx, config) {
ctx.model.extend('Bombs', {
id: 'unsigned',
userId: 'string',
today: 'string',
Bombs: 'unsigned',
Bombs_trigger: 'string',
Clearance_trigger: 'string',
Bomb_kill: 'unsigned'
});
let Yes_or_no_bomb;
let Bomb_group;
let Bomber_id;
ctx.on('message', async (session) => {
const { content, userId } = session;
const read = await ctx.database.get('Bombs', { userId });
if (content.includes(read?.[0]?.Bombs_trigger)) {
return session.execute('埋雷');
}
if (content.includes(read?.[0]?.Clearance_trigger)) {
return session.execute('排雷');
}
if (content.includes(read?.[0]?.Clearance_trigger) || content === '排雷') {
}
else {
if (Yes_or_no_bomb == 1 && Bomb_group === session.guildId) {
logger.info(Bomber_id + '使用炸弹击杀了' + userId);
const time = Math.floor(Math.random() * 3) + 1;
const timemax = time * 60;
Yes_or_no_bomb = 0;
await ctx.database.set('Bombs', { userId: Bomber_id }, { Bomb_kill: read?.[0]?.Bomb_kill + 1 });
Bomber_id = '0';
session.bot.sendMessage(session.channelId, koishi_1.h.image((0, url_1.pathToFileURL)((0, path_1.resolve)(__dirname, './你怎么不说话.jpg')).href), session.guildId);
session?.onebot.setGroupBan(session.channelId, session.userId, timemax);
}
}
});
ctx.command('炸弹菜单')
.action(async ({ session }) => {
session.bot.sendMessage(session.channelId, koishi_1.h.image((0, url_1.pathToFileURL)((0, path_1.resolve)(__dirname, './炸弹专家MAX.jpg')).href), session.guildId);
});
ctx.command('炸弹菜单')
.subcommand('抢雷 <rob>')
.shortcut(/^抢雷?(.*)$/, { args: ['$1'] })
.action(async ({ session, next }) => {
const { userId } = session;
const at = koishi_1.h.select(session.elements, 'at');
const ATID = at?.[0]?.attrs.id;
const a = Math.random() * 1;
const time = Math.floor(Math.random() * 3) + 1 * 60;
const readA = await ctx.database.get('Bombs', { userId });
const readB = await ctx.database.get('Bombs', { userId: ATID });
if (at.length === 0) {
return `
══抢雷失败══
状态:失败
操作者:【${koishi_1.h.at(userId)}】
你没有艾特被抢雷的人`;
}
else {
if (readB?.[0]?.Bombs <= 0) {
return `
══抢雷失败══
状态:失败
操作者:【${koishi_1.h.at(userId)}】
对方没有炸弹!`;
}
else if (a == 0.5) {
session?.onebot.setGroupBan(session.channelId, session.userId, time);
session?.onebot.setGroupBan(session.channelId, ATID, time);
return `
══抢雷触发══
状态:失败
抢劫者:【${koishi_1.h.at(userId)}】
被抢者:【${koishi_1.h.at(ATID)}】
由于抢夺期间,过于激烈
导致炸弹爆炸,双方被炸到并
各损失1枚炸弹`;
}
else if (a >= 1) {
await ctx.database.set('Bombs', { userId }, { Bombs: readA[0].Bombs + 1 });
await ctx.database.set('Bombs', { userId: ATID }, { Bombs: readB[0].Bombs - 1 });
return `
══抢雷触发══
状态:成功
抢劫者:【${koishi_1.h.at(userId)}】
被抢者:【${koishi_1.h.at(ATID)}】
抢夺了1枚炸弹
对方失去一枚炸弹`;
}
}
});
ctx.command('炸弹菜单').subcommand('排雷')
.action(async ({ session }) => {
const { userId } = session;
if (Yes_or_no_bomb === 1) {
Yes_or_no_bomb = 0;
logger.info(userId + '拆除炸弹成功');
return '══排雷触发══&#10;状态:成功\n操作者:【' + koishi_1.h.at(userId) + '】&#10; 排雷成功\n如果失败,不会提示';
}
else {
}
});
ctx.command('炸弹菜单').subcommand('排雷触发 <Mine_clearance>')
.action(async ({ session }, Mine_clearance) => {
const { userId } = session;
const read = await ctx.database.get('Bombs', { userId });
if (Mine_clearance === undefined) {
return `══排雷触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10; 原因:格式错误\n正确格式:排雷触发 触发词\nTips:这是排除炸弹的触发词`;
}
else if (Mine_clearance === '排雷') {
return `══排雷触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10; 原因:不能和原触发词一样`;
}
if (Mine_clearance.length > 3) {
if (!read?.[0]?.Bombs_trigger) {
session.bot.sendMessage(session.channelId, `══排雷触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10;添加失败\n 原因:你还没有炸弹\nTips:发送【领取炸弹】领取炸弹吧` + Mine_clearance, session.guildId)[0];
}
else {
await ctx.database.set('Bombs', { userId }, { Clearance_trigger: Mine_clearance });
session.bot.sendMessage(session.channelId, `══排雷触发══&#10;状态:成功\n操作者:【${koishi_1.h.at(userId)}】&#10;设置成功\n 新的触发词是 + ${Mine_clearance}\nTips:不要设置过于简单的触发词\n如6,这种单个字\n暂不支持图片做触发词,后续开发看看`, session.guildId)[0];
}
}
else {
return `══排雷触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10;设置失败\n 原因:小于3个字`;
}
});
ctx.command('炸弹菜单').subcommand('领取炸弹')
.action(async ({ session }) => {
const { userId } = session;
const today = new Date();
const read = await ctx.database.get('Bombs', {});
const checkInRecord = await ctx.database.get('Bombs', { userId }); //获取用户签到时间
const currentDate = new Date();
// 获取当前年份
const year = currentDate.getFullYear();
// 获取当前月份(注意,返回的月份是从 0 开始计数的,所以需要加上 1)
const month = currentDate.getMonth() + 1;
// 获取当前日期
const date = currentDate.getDate();
// 将时间部分合并为一个字符串
const formattedTime = `${year}-${month}-${date}`;
console.log("当前时间:" + formattedTime);
const one_phrase = await ctx.http.get('https://v1.hitokoto.cn/?c=a');
const hitokoto = one_phrase.hitokoto + '——' + one_phrase.from;
const Bombs = 5;
const msg = {
signInSuccess: `══领取炸弹══&#10;状态:成功\n操作者:【${koishi_1.h.at(userId)}】&#10;领取成功\n获得炸弹5枚\n一言:${hitokoto}`,
alreadySignedIn: `══领取炸弹══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10;领取失败\n一言:${hitokoto} `,
};
//判断是否第一次
if (checkInRecord.length === 0) {
await ctx.database.create('Bombs', { id: read.length + 1, userId, today: formattedTime, Bombs, Bombs_trigger: '暂无触发词', Clearance_trigger: '暂无触发词', Bomb_kill: 0 });
return msg.signInSuccess;
}
//判断用户是否领取
if (checkInRecord[0].today === formattedTime) {
return msg.alreadySignedIn;
}
else {
console.log(msg.signInSuccess);
await ctx.database.set('Bombs', { userId }, { today: formattedTime, Bombs: checkInRecord[0].Bombs + Bombs });
return msg.signInSuccess;
}
});
ctx.command('炸弹菜单').subcommand('炸弹触发 <bobo>')
.action(async ({ session }, bobo) => {
const { userId, username } = session;
const read = await ctx.database.get('Bombs', { userId });
if (bobo === undefined) {
return `══炸弹触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10; 原因:格式错误\n正确格式:炸弹触发 触发词\nTips:这是设置埋雷的触发词`;
}
else if (bobo === '埋雷') {
return `══炸弹触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10; 原因:不能和原触发词一样`;
}
if (bobo.length > 3) {
if (!read?.[0]?.Bombs_trigger) {
session.bot.sendMessage(session.channelId, `══炸弹触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10;添加失败\n 原因:你还没有炸弹\nTips:发送【领取炸弹】领取炸弹吧` + bobo, session.guildId)[0];
}
else {
await ctx.database.set('Bombs', { userId }, { Bombs_trigger: bobo });
session.bot.sendMessage(session.channelId, `══炸弹触发══&#10;状态:成功\n操作者:【${koishi_1.h.at(userId)}】&#10;设置成功\n 新的触发词是 + ${bobo}\nTips:不要设置过于简单的触发词\n如6,这种单个字\n暂不支持图片做触发词,后续开发看看`, session.guildId)[0];
}
}
else {
return `══炸弹触发══&#10;状态:失败\n操作者:【${koishi_1.h.at(userId)}】&#10;设置失败\n 原因:小于3个字`;
}
});
ctx.command('炸弹菜单').subcommand('埋雷')
.action(async ({ session }) => {
const { userId, username } = session;
const read = await ctx.database.get('Bombs', { userId });
const manage = (await session.onebot.getGroupMemberInfo(session.channelId, session.bot.userId));
const manages = manage.role;
//console.log(manages);
if (manages == 'member') {
return '我在此群没有权限,让你埋雷哦';
}
if (read?.[0]?.Bombs <= 0 || !read?.[0]?.Bombs) {
return '你没有炸弹了';
}
else {
Yes_or_no_bomb = 1;
Bomb_group = session.guildId;
Bomber_id = session.userId;
logger.info(userId + '设置炸弹成功');
await ctx.database.set('Bombs', { userId }, { Bombs: read[0].Bombs - 1 });
}
});
ctx.command('炸弹菜单')
.subcommand('我的信息')
.action(async ({ session }) => {
const { userId, username } = session;
const read = await ctx.database.get('Bombs', { userId });
if (userId === config.主人QQ) {
return `══我的信息══\n操作者:${config.主人QQ}\n身份:主人\n炸弹数量;${read?.[0]?.Bombs}\n击杀数量:${read?.[0]?.Bomb_kill}\n可用指令:\n增加炸弹 [艾特某人] [数量]`;
}
else {
return `══我的信息══\n操作者:${userId}\n身份:成员\n炸弹数量;${read?.[0]?.Bombs}\n击杀数量:${read?.[0]?.Bomb_kill}`;
}
});
ctx.command('炸弹菜单')
.subcommand('增加炸弹 <ID> <num:number>')
.shortcut(/^增加炸弹(.*) ?([0-9]*)$/, { args: ['$1', '$2'] })
.action(async ({ session, next }, ID, num) => {
const { userId } = session;
const at = koishi_1.h.select(session.elements, 'at');
const ATID = at?.[0]?.attrs.id;
const a = Math.floor(Math.random() * 1);
if (userId === config.主人QQ) {
if (at.length === 0) {
return `
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Config=exports.name=void 0,exports.apply=apply;const koishi_1=require("koishi"),url_1=require("url"),path_1=require("path"),logger=(exports.name="bomb-game",exports.Config=koishi_1.Schema.object({"主人QQ":koishi_1.Schema.string().default("1594817572").description("填写你的QQ,用于增加炸弹等")}),new koishi_1.Logger("炸弹人"));function apply(d,i){d.model.extend("Bombs",{id:"unsigned",userId:"string",today:"string",Bombs:"unsigned",Bombs_trigger:"string",Clearance_trigger:"string",Bomb_kill:"unsigned"},{autoInc:!0});let t,n,r;d.on("message",async e=>{var{content:s,userId:a}=e,o=await d.database.get("Bombs",{userId:a});return s.includes(o?.[0]?.Bombs_trigger)?e.execute("埋雷"):s.includes(o?.[0]?.Clearance_trigger)?e.execute("排雷"):void(s.includes(o?.[0]?.Clearance_trigger)||"排雷"===s||1==t&&n===e.guildId&&(logger.info(r+"使用炸弹击杀了"+a),s=60*(Math.floor(3*Math.random())+1),t=0,await d.database.set("Bombs",{userId:r},{Bomb_kill:o?.[0]?.Bomb_kill+1}),r="0",e.send(koishi_1.h.image((0,url_1.pathToFileURL)((0,path_1.resolve)(__dirname,"你怎么不说话.jpg")).href)),e?.onebot.setGroupBan(e.channelId,e.userId,s)))}),d.command("炸弹菜单").action(async({})=>koishi_1.h.image((0,url_1.pathToFileURL)((0,path_1.resolve)(__dirname,"炸弹专家MAX.jpg")).href)),d.command("炸弹菜单").subcommand("排雷").action(async({session:e})=>{e=e.userId;if(1===t)return t=0,logger.info(e+"拆除炸弹成功"),"══排雷触发══&#10;状态:成功\n操作者:【"+koishi_1.h.at(e)+"】&#10; 排雷成功\n如果失败,不会提示"}),d.command("炸弹菜单").subcommand("排雷触发 <Mine_clearance>").action(async({session:e},s)=>{var a=e["userId"],o=await d.database.get("Bombs",{userId:a});return void 0===s?`══排雷触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10; 原因:格式错误
正确格式:排雷触发 触发词
Tips:这是排除炸弹的触发词`:"排雷"===s?`══排雷触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10; 原因:不能和原触发词一样`:3<s.length?void(o?.[0]?.Bombs_trigger?(await d.database.set("Bombs",{userId:a},{Clearance_trigger:s}),e.bot.sendMessage(e.channelId,`══排雷触发══&#10;状态:成功
操作者:【${koishi_1.h.at(a)}】&#10;设置成功
新的触发词是 + ${s}
Tips:不要设置过于简单的触发词
如6,这种单个字
暂不支持图片做触发词,后续开发看看`,e.guildId)):e.bot.sendMessage(e.channelId,`══排雷触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10;添加失败
原因:你还没有炸弹
Tips:发送【领取炸弹】领取炸弹吧`+s,e.guildId))[0]:`══排雷触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10;设置失败
原因:小于3个字`}),d.command("炸弹菜单").subcommand("领取炸弹").action(async({session:e})=>{var e=e["userId"],s=(new Date,await d.database.get("Bombs",{})),a=await d.database.get("Bombs",{userId:e}),o=new Date,o=o.getFullYear()+`-${o.getMonth()+1}-`+o.getDate(),t=(console.log("当前时间:"+o),await d.http.get("https://v1.hitokoto.cn/?c=a")),t=t.hitokoto+"——"+t.from,t={signInSuccess:`══领取炸弹══&#10;状态:成功
操作者:【${koishi_1.h.at(e)}】&#10;领取成功
获得炸弹5枚
一言:`+t,alreadySignedIn:`══领取炸弹══&#10;状态:失败
操作者:【${koishi_1.h.at(e)}】&#10;领取失败
一言:${t} `};return 0===a.length?(await d.database.create("Bombs",{id:s.length,userId:e,today:o,Bombs:5,Bombs_trigger:"暂无触发词",Clearance_trigger:"暂无触发词",Bomb_kill:0}),t.signInSuccess):a[0].today===o?t.alreadySignedIn:(console.log(t.signInSuccess),await d.database.set("Bombs",{userId:e},{today:o,Bombs:a[0].Bombs+5}),t.signInSuccess)}),d.command("炸弹菜单").subcommand("炸弹触发 <bobo>").action(async({session:e},s)=>{var a=e["userId"],o=await d.database.get("Bombs",{userId:a});return void 0===s?`══炸弹触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10; 原因:格式错误
正确格式:炸弹触发 触发词
Tips:这是设置埋雷的触发词`:"埋雷"===s?`══炸弹触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10; 原因:不能和原触发词一样`:3<s.length?void(o?.[0]?.Bombs_trigger?(await d.database.set("Bombs",{userId:a},{Bombs_trigger:s}),e.bot.sendMessage(e.channelId,`══炸弹触发══&#10;状态:成功
操作者:【${koishi_1.h.at(a)}】&#10;设置成功
新的触发词是 + ${s}
Tips:不要设置过于简单的触发词
如6,这种单个字
暂不支持图片做触发词,后续开发看看`,e.guildId)):e.bot.sendMessage(e.channelId,`══炸弹触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10;添加失败
原因:你还没有炸弹
Tips:发送【领取炸弹】领取炸弹吧`+s,e.guildId))[0]:`══炸弹触发══&#10;状态:失败
操作者:【${koishi_1.h.at(a)}】&#10;设置失败
原因:小于3个字`}),d.command("炸弹菜单").subcommand("埋雷").action(async({session:e})=>{var s=e["userId"],a=await d.database.get("Bombs",{userId:s});return"member"==(await e.onebot.getGroupMemberInfo(e.channelId,e.bot.userId)).role?"我在此群没有权限,让你埋雷哦":a?.[0]?.Bombs<=0||!a?.[0]?.Bombs?"你没有炸弹了":(t=1,n=e.guildId,r=e.userId,logger.info(s+"设置炸弹成功"),void await d.database.set("Bombs",{userId:s},{Bombs:a[0].Bombs-1}))}),d.command("炸弹菜单").subcommand("我的信息").action(async({session:e})=>{var e=e["userId"],s=await d.database.get("Bombs",{userId:e});return e===i.主人QQ?`══我的信息══
操作者:${i.主人QQ}
身份:主人
炸弹数量;${s?.[0]?.Bombs}
击杀数量:${s?.[0]?.Bomb_kill}
可用指令:
增加炸弹 [艾特某人] [数量]`:`══我的信息══
操作者:${e}
身份:成员
炸弹数量;${s?.[0]?.Bombs}
击杀数量:`+s?.[0]?.Bomb_kill}),d.command("炸弹菜单").subcommand("增加炸弹 <ID> <num:number>").shortcut(/^增加炸弹(.*) ?([0-9]*)$/,{args:["$1","$2"]}).action(async({session:e},s,a)=>{var o=e["userId"],e=koishi_1.h.select(e.elements,"at"),t=e?.[0]?.attrs.id;Math.floor(+Math.random());return o===i.主人QQ?0===e.length?`
══增加失败══
状态:失败
操作者:【${koishi_1.h.at(userId)}】
你没有艾特要增加的人`;
}
else {
const readB = await ctx.database.get('Bombs', { userId: ATID });
await ctx.database.set('Bombs', { userId: ATID }, { Bombs: readB?.[0]?.Bombs + num });
return `
操作者:【${koishi_1.h.at(o)}】
你没有艾特要增加的人`:(e=await d.database.get("Bombs",{userId:t}),await d.database.set("Bombs",{userId:t},{Bombs:e?.[0]?.Bombs+a}),`
══增加成功══
状态:成功
操作者:【${koishi_1.h.at(userId)}】
成功添加${num}枚炸弹`;
}
}
else {
return `══增加失败══\n状态:失败\n操作者:【${koishi_1.h.at(userId)}】\n你没有权限`;
}
});
ctx.command('炸弹菜单')
.subcommand('雷人榜')
.action(async ({ session }) => {
const { userId } = session;
const read = await ctx.database.get('Bombs', {});
const data = [];
const manage = (await session.onebot.getGroupMemberInfo(session.channelId, session.bot.userId));
const manages = manage.role;
//console.log(manages);
// 创建随机数据
for (let i = 0; i < read.length; i++) {
const id = read?.[i]?.userId;
const kill = read?.[i]?.Bomb_kill;
data.push({ id, kill });
}
// 使用自定义的比较函数进行降序排序
data.sort((a, b) => {
return b.kill - a.kill;
});
// 截取前五个元素
let tata = '';
const topFive = data.slice(0, 5);
for (let i = 0; i < topFive.length; i++) {
tata += '第' + (i + 1) + '名: ' + topFive?.[i]?.id + '\n击杀数量:' + topFive?.[i]?.kill + '\n';
}
if (manages == 'owner') {
session?.onebot?.setGroupSpecialTitle(session.channelId, topFive?.[0]?.id, '炸弹超人');
session?.onebot?.setGroupSpecialTitle(session.channelId, topFive?.[1]?.id, '炸弹狂');
return '══雷人榜══\n' + tata;
}
else {
return '══雷人榜══\n' + tata;
}
});
//结尾
}
exports.apply = apply;
操作者:【${koishi_1.h.at(o)}】
成功添加${a}枚炸弹`):`══增加失败══
状态:失败
操作者:【${koishi_1.h.at(o)}】
你没有权限`}),d.command("炸弹菜单").subcommand("雷人榜").action(async({session:e})=>{var{}=e,s=await d.database.get("Bombs",{}),a=[],o=(await e.onebot.getGroupMemberInfo(e.channelId,e.bot.userId)).role;for(let e=0;e<s.length;e++){var t=s?.[e]?.userId,i=s?.[e]?.Bomb_kill;a.push({id:t,kill:i})}a.sort((e,s)=>s.kill-e.kill);let n="";var r=a.slice(0,5);for(let e=0;e<r.length;e++)n+="第"+(e+1)+"名: "+r?.[e]?.id+"\n击杀数量:"+r?.[e]?.kill+"\n";return"owner"==o&&(e?.onebot?.setGroupSpecialTitle(e.channelId,r?.[0]?.id,"炸弹超人"),e?.onebot?.setGroupSpecialTitle(e.channelId,r?.[1]?.id,"炸弹狂")),"══雷人榜══\n"+n})}

8

package.json
{
"name": "koishi-plugin-bomb-game",
"description": "【炸弹专家MAX】",
"version": "1.8.0",
"description": "禁言炸弹游戏",
"version": "2.0.0",
"main": "lib/index.js",

@@ -11,5 +11,3 @@ "typings": "lib/index.d.ts",

],
"homepage": "https://github.com/jiuzhichuan/koishi-plugin-bomb-game",
"license": "MIT",
"scripts": {},
"keywords": [

@@ -21,4 +19,4 @@ "chatbot",

"peerDependencies": {
"koishi": "^4.14.3"
"koishi": "4.17.3"
}
}

@@ -5,2 +5,2 @@ # koishi-plugin-bomb-game

【炸弹专家MAX】
禁言炸弹游戏
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc