koishi-plugin-win
Advanced tools
Comparing version 0.0.18 to 0.0.19
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; |
108
lib/index.js
@@ -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编码,否则输出会乱码。 |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
23320
430
18
1