diff --git a/Ling.js b/Ling.js new file mode 100644 index 0000000..241bb51 --- /dev/null +++ b/Ling.js @@ -0,0 +1,41 @@ +import http from 'http' +import fs from 'fs' +import path from 'path' +import { logger } from 'node-karin' + +export default class Ling { +constructor() { + } + /** + * 下载文件到指定路径,如果文件已存在则替换 + * @param {string} url - 文件的URL + * @param {string} downloadPath - 文件下载的路径 + */ + async downloadFile(url, downloadPath) { + try { + const dir = path.dirname(downloadPath) + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } + await new Promise((resolve, reject) => { + const file = fs.createWriteStream(downloadPath) + + http.get(url, (response) => { + if (response.statusCode === 200) { + response.pipe(file) + } else { + reject(new Error(`Failed to download file: ${response.statusCode}`)) + } + file.on('finish', () => { + file.close(resolve) + }) + }).on('error', (err) => { + fs.unlink(downloadPath, () => reject(new Error(err.message))) + }) + }) + } catch (error) { + logger.error('文件下载失败:', error.message) + } + } +} \ No newline at end of file diff --git a/apps/QuickCode/File.js b/apps/QuickCode/File.js new file mode 100644 index 0000000..29cbd29 --- /dev/null +++ b/apps/QuickCode/File.js @@ -0,0 +1,44 @@ +import { karin, segment, common } from 'node-karin' +export const FileDownload = karin.command(/^文件下载/, async (e) => { +e.reply('请发送文件', {at: true}) +const event = await karin.ctx(e) +let file = JSON.parse(event.msg) +let Path = `${e.msg.replace(/文件下载/, '').trim() || process.cwd()}/${file.name}` +if (!(file.type === 'file')) return e.reply('未识别到文件,取消操作', {at: true}) +let url + if (!e.isGroup) { + url = await e.bot.super.pickFriend(e.user_id).getFileUrl(file.fid) + } else { + url = await e.bot.super.pickGroup(e.group_id).getFileUrl(file.fid) + } + if (!url) return e.reply('获取链接失败', {at: true}) + await e.reply(`检测到文件,开始下载...\n文件的链接为:\n${url}\n保存的路径为:\n${Path}`) + try { + await common.downFile(url, Path) + await e.reply('安装完成') + } catch (error) { + logger.error(`文件下载错误:${error.message}`) + await e.reply(`文件下载错误:${error.message}`, true) + } +}, { name: '文件下载', priority: '-1' }) +export const UploadDownload = karin.command(/^文件上传/, async (e) => { +e.reply('请发送路径', {at: true}) +const event = await karin.ctx(e) +let Path = `${e.msg.replace(/文件下载/, '').trim() || process.cwd()}/${file.name}` +if (!(file.type === 'file')) return e.reply('未识别到文件,取消操作', {at: true}) +let url + if (!e.isGroup) { + url = await e.bot.super.pickFriend(e.user_id).getFileUrl(file.fid) + } else { + url = await e.bot.super.pickGroup(e.group_id).getFileUrl(file.fid) + } + if (!url) return e.reply('获取链接失败', {at: true}) + await e.reply(`检测到文件,开始下载...\n文件的链接为:\n${url}\n保存的路径为:\n${Path}`) + try { + await common.downFile(url, Path) + await e.reply('安装完成') + } catch (error) { + logger.error(`文件下载错误:${error.message}`) + await e.reply(`文件下载错误:${error.message}`, true) + } +}, { name: '文件下载', priority: '-1' }) diff --git "a/apps/\346\265\213\350\257\225(\344\273\205\346\265\213\350\257\225\357\274\214\346\227\240\345\212\237\350\203\275).js" "b/apps/\346\265\213\350\257\225(\344\273\205\346\265\213\350\257\225\357\274\214\346\227\240\345\212\237\350\203\275).js" index 267caa4..f7597f6 100644 --- "a/apps/\346\265\213\350\257\225(\344\273\205\346\265\213\350\257\225\357\274\214\346\227\240\345\212\237\350\203\275).js" +++ "b/apps/\346\265\213\350\257\225(\344\273\205\346\265\213\350\257\225\357\274\214\346\227\240\345\212\237\350\203\275).js" @@ -1,6 +1,12 @@ import { karin, segment, common, Cfg, YamlEditor } from 'node-karin' import { Config } from '#components' export const test = karin.command(/^测试/, async (e) => { -let msg = await e.bot.GetFriendList() -console.log(msg) +let Path = e.msg.replace(/测试/, '').trim() +e.reply('请发送文件', {at: true}) +console.log(`${process.cwd()}`) +const event = await karin.ctx(e) +let file = JSON.parse(event.msg) +console.log(file) +console.log(file.type) +if (!(file.type === 'file')) return e.reply('未识别到文件,取消操作', {at: true}) }, { name: '测试', priority: '-1' }) diff --git a/index.js b/index.js index 4ce27fb..ab1e641 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,8 @@ import { Version, Config } from '#components' import { logger } from 'node-karin' +global.Ling = new (await import("./Ling.js")).default + logger.info('-----------------') logger.info(`${Version.pluginName}${Config.package.version}初始化~`) logger.info('-------^_^-------') \ No newline at end of file diff --git a/package.json b/package.json index 7958661..4aa54fd 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ }, "karin": { "apps": [ - "apps/events" + "apps/events", + "apps/QuickCode" ] } }