Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

koishi-plugin-win

Package Overview
Dependencies
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

koishi-plugin-win - npm Package Compare versions

Comparing version 0.0.18 to 0.0.19

2

lib/index.d.ts
import { Context, Schema, Logger } from 'koishi';
export declare const name = "win";
export interface Config {
filePath: string;
updateGap: number;
optionsOfAnotherFile?: string;

@@ -6,0 +6,0 @@ anotherFilePath?: string;

@@ -7,3 +7,3 @@ "use strict";

exports.Config = koishi_1.Schema.object({
filePath: koishi_1.Schema.string().required().default('node_modules/koishi-plugin-win/words.txt').description('默认语录库地址'),
updateGap: koishi_1.Schema.number().default(43200000).description('张教授在线语录库的更新间隔,默认12小时更新一次'),
optionOfAnotherFile: koishi_1.Schema.string().description('若同时启用另一个语录库,则这里填写使用该语录库的ask指令选项,例如,这里填a,则调用该语录库的指令就是ask -a'),

@@ -18,2 +18,7 @@ anotherFilePath: koishi_1.Schema.string().description('若同时启用另一个语录库,则这里填写其地址'),

const iconv = require('iconv-lite');
const chardet = require('chardet');
const https = require('https');
const url = 'https://eggs.gold/MCA/words.txt';
const wordsFile = 'words.tmp'; //临时文件名称
let lastDownloadTime = null; //用于存储上一次更新语录库的时间
function apply(ctx, config) {

@@ -143,3 +148,3 @@ registerCommand(ctx, config);

let result = lines[randomIndex];
if (result.endsWith('\n')) {
if (result.endsWith('\r')) {
result = result.slice(0, -1); // 去除最后一个换行符

@@ -149,2 +154,75 @@ }

}
function downloadFile(url, destination) {
//下载语录库
//exports.logger.success('进入downloadFile函数!');
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(destination);
https.get(url, (response) => {
response.pipe(file);
file.on('finish', () => {
file.close(() => {
// 检测文件编码
const encoding = chardet.detectFileSync(destination);
if (encoding !== 'utf8') {
// 如果编码不是UTF-8,则进行转换
const fileContent = fs.readFileSync(destination);
const decodedContent = iconv.decode(fileContent, encoding);
const utf8Content = iconv.encode(decodedContent, 'utf8');
fs.writeFileSync(destination, utf8Content);
exports.logger.success('编码不是utf8,已转换完毕。');
}
resolve();
});
});
}).on('error', (err) => {
fs.unlink(destination, () => reject(err));
});
});
}
function downloadAndExtractLine(updateGap) {
//exports.logger.success('进入downloadAndExtractLine函数!');
return new Promise((resolve, reject) => {
const currentTime = new Date().getTime();
//根据与上次更新时间,做出操作:下载语录库或从临时文件中抽取一行
if (!lastDownloadTime || (currentTime - lastDownloadTime) > updateGap) { //上次下载时间大于指定值,则更新
exports.logger.success('开始更新语录库。');
downloadFile(url, wordsFile)
.then(() => {
lastDownloadTime = currentTime;
const extractedLine = extractRandomLine();
resolve(extractedLine);
})
.catch((error) => {
reject(error);
});
}
else {
const extractedLine = extractRandomLine();
resolve(extractedLine);
}
});
}
function extractRandomLine() {
//处理临时文件
//exports.logger.success('进入extractRandomLine函数!');
if (!fs.existsSync(wordsFile)) {
exports.logger.success('开始下载语录库。');
downloadFile(url, wordsFile)
.then(() => {
exports.logger.success('下载完成。');
lastDownloadTime = new Date().getTime(); //下载完成后,更新最后一次下载的时间
const line = getRandomLineFromFile(wordsFile);
//exports.logger.success('抽取的随机行:', line);
return line; // 返回抽取的随机行内容
})
.catch((error) => {
exports.logger.error('下载文件失败:', error);
});
}
else {
const line = getRandomLineFromFile(wordsFile);
//exports.logger.success('抽取的随机行:', line);
return line;
}
}
function registerCommand(ctx, config) {

@@ -297,7 +375,19 @@ /*

let cmt = '';
let rvwr = '';
let rvwr = ''; //评论者
if (!options.another) {
//没有指定另一个语录库的路径,则从默认语录库中抽取
rvwr = '张教授';
cmt += getRandomLineFromFile(config.filePath);
//exports.logger.success('进入无选项分支!');
downloadAndExtractLine(config.updateGap)
.then((randomLine) => {
//exports.logger.success('函数执行完毕,准备结果:' + randomLine);
rvwr += '张教授';
cmt += randomLine;
if (!arg)
session.sendQueued(rvwr + '的评价是:' + cmt, 1 * koishi_1.Time.second);
else
session.sendQueued(rvwr + '对' + arg + '的评价是:' + cmt, 1 * koishi_1.Time.second);
})
.catch((error) => {
exports.logger.error('发生错误:', error);
});
}

@@ -308,8 +398,8 @@ else {

cmt += getRandomLineFromFile(config.anotherFilePath);
if (!arg)
await session.sendQueued(rvwr + '的评价是:' + cmt, 1 * koishi_1.Time.second);
else
await session.sendQueued(rvwr + '对' + arg + '的评价是:' + cmt, 1 * koishi_1.Time.second);
}
if (!arg)
await session.sendQueued(rvwr + '的评价是:' + cmt, 1 * koishi_1.Time.second);
else
await session.sendQueued(rvwr + '对' + arg + '的评价是:' + cmt, 1 * koishi_1.Time.second);
});
}
{
"name": "koishi-plugin-win",
"description": "我们又赢了!",
"version": "0.0.18",
"version": "0.0.19",
"main": "lib/index.js",

@@ -6,0 +6,0 @@ "typings": "lib/index.d.ts",

@@ -5,16 +5,15 @@ # koishi-plugin-win

我们又赢了!通过win指令获取今日你有多赢!<br>
使用名为“zvv”的数据表记录用户赢的程度,并限制每日只能赢一次。<br>
使用指令rank可获取当前群的赢程度排行。<br>
新增张教授评价功能,指令ask或“评价”后跟待评价的内容即可;该功能的实现需借助语录库;张教授的语录库可点击[这里](https://eggs.gold/MCA/words.txt)下载,目前包含200余条,9月11日更新;您也可自行创建语录库,默认放置在node_modules/koishi-plugin-win目录下,可在插件配置中修改。该语录库以utf8格式读取。<br>
取消随机事件功能,并将其独立至random-event插件中。<br>
新增结果“微赢”,在win的程度为1~2%时触发。<br>
当在数据表中创建与修改数据时,会输出日志。<br>
为rank添加参数d或detail,可用于查看当前群win情况的统计数据。<br>
新增“共同富win”功能,抽到“微赢”的用户当天可以再抽一次,赢的程度与当前最赢者(必须大赢及以上,否则失败)平分;被帮扶过的用户会在排行榜中被标注。<br>
修复了某些用户在某些群聊内的win结果会异常重复的bug。<br>
现在本插件支持在张教授语录之外,同步启用其他语录库,详见指令配置。<br>
- 我们又赢了!通过win指令获取今日你有多赢
- 使用名为“zvv”的数据表记录用户赢的程度。
- 限制每日只能赢一次。
- “共同富win”功能:win程度为1~2%时的结果为“微赢”,抽到“微赢”的用户当天可以再抽一次,赢的程度与当前最赢者(必须大赢及以上,否则失败)平分
- 使用指令rank可获取当前群的赢程度排行。
- 可选参数d或detail,可用于查看当前群win情况的统计数据。
- 被“共同富win”功能“帮扶”过的用户会在排行榜中被标注
- 提供张教授评价功能,指令ask或“评价”后跟待评价的内容即可。
- 该功能的实现只需在线语录库,已不再需要下载,默认每12小时更新一次
- 目前语录库包含200余条
<br>
<br><br>
初次下载本插件的用户若启动时报错,请在应用目录(C:/Users/你的用户名/AppData/Roaming/Koishi/Desktop/data/instances/default)的koishi.yml中,找到win插件,填写filePath: node_modules/koishi-plugin-win/words.txt,尽管默认配置中填了这个路径,但有些用户在启动时仍然会被作为未填写参数而报错。<br>
更新后请重新下载语录库,或在本地将其转码为utf8格式,否则输出会乱码。
用户自定义语录库应当是utf8编码,否则输出会乱码。
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