From 42a132d6d88fde72e02ad1984ddcfe3f46f9f941 Mon Sep 17 00:00:00 2001 From: yeyang <746659424@qq.com> Date: Mon, 25 Mar 2024 18:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=AC=20=E5=A2=9E=E5=8A=A0=E8=B4=A1?= =?UTF-8?q?=E7=8C=AE=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 73 ++++++++++++++++++++++++++++++++++++++ README.md | 4 +++ model/Pixiv/api.js | 84 +++----------------------------------------- model/Pixiv/login.js | 45 ++++++++++++++++++++++++ model/Pixiv/utils.js | 38 ++++++++++++++++++++ 5 files changed, 164 insertions(+), 80 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 model/Pixiv/login.js create mode 100644 model/Pixiv/utils.js diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9660ab9 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# 贡献指南 + +感谢您有兴趣为项目做出贡献!遵循以下准则和步骤,以确保您的贡献符合项目的要求。 + +## 安装依赖 + +在开始贡献之前,请确保您的开发环境满足以下要求: + +- Node.js(推荐使用最新稳定版本) +- pnpm + +## 克隆项目 + +使用 Git 克隆项目到本地开发环境: + +```sh +git clone https://gitee.com/yeyang52/yenai-plugin +或 +git clone https://github.com/yeyang52/yenai-plugin +``` + +## 安装依赖 + +运行以下命令安装项目所需的依赖项: + +```sh +pnpm install +``` +## 开发过程 + +在进行开发之前,请遵循以下准则: + +- 严格遵守项目的 ESLint 规则,确保代码的质量和一致性。 +- 尽量遵循项目的代码风格和命名约定,以保持代码的可读性。 +- 提交的代码应该是经过测试的,并且不会破坏现有的功能。 + +## Git 提交规范 + +为了确保提交的代码符合项目的要求,我们使用 Husky 和 lint-staged 进行 Git 提交时的规范检测。请按照以下步骤进行提交: + +1. 在进行 Git 提交之前,确保您的代码已经通过 ESLint 的检查。 + +2. 运行以下命令进行 Git 提交: + +```sh +git add . +git commit +``` +在提交时,Husky 会自动运行预定义的 Git 钩子脚本,包括对代码规范的检测。 + +3. 如果提交的代码不符合项目的规范要求,您将会收到相应的错误提示。请根据提示信息进行修改和调整,直到提交的代码符合要求。 + +## 提交拉取请求 + +当您准备好将您的贡献合并到主项目中时,请按照以下步骤提交拉取请求: + +1. 将您的本地分支推送到远程仓库: + +```sh +git push origin master +``` + +2. 在项目仓库的页面上,点击 "New Pull Request"(或类似的按钮),创建一个新的拉取请求。 + +3. 填写拉取请求的相关信息,包括描述您的贡献的详细内容和目的。 + +4. 提交拉取请求后,项目维护者将会审核您的代码,并与您协作以确保贡献的质量和一致性。 + +## 感谢您的贡献 + +非常感谢您为项目做出的贡献!您的工作对于项目的发展和成功至关重要。项目维护者会尽快审查您的贡献并与您合作,以确保其顺利合并到主项目中。 + +如果您有任何问题或需要进一步的帮助,请随时与项目维护者进行沟通。 \ No newline at end of file diff --git a/README.md b/README.md index c01f9c5..82ff0e3 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,10 @@ Tip:具体可使用 **#椰奶群管帮助** 查看 本段遵循 [all-contributors](https://github.com/all-contributors/all-contributors) 规范,欢迎任何形式的贡献! +## 如何贡献 + +请查看我们的[贡献指南](CONTRIBUTING.md),了解如何开始贡献 + ## 友情链接 😊 - [Yunzai-Bot插件索引](https://gitee.com/Hikari666/Yunzai-Bot-plugins-index) diff --git a/model/Pixiv/api.js b/model/Pixiv/api.js index 90df257..184e637 100644 --- a/model/Pixiv/api.js +++ b/model/Pixiv/api.js @@ -1,23 +1,12 @@ import request, { qs } from '../../lib/request/request.js' import moment from 'moment' -import { Config } from '../../components/index.js' -import md5 from 'md5' +import { login, headers } from './login.js' +import { timeToSeconds, getNoonTomorrow } from './utils.js' -const CLIENT_ID = 'MOBrBDS8blbauoSck0ZfDbtuzpyT' -const CLIENT_SECRET = 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj' -const HASH_SECRET = '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c' export default class PixivApi { constructor (refresh_token) { this.baseUrl = 'https://app-api.pixiv.net/' - this.headers = { - 'User-Agent': 'PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)', - 'Accept-Language': Config.pixiv.language, - 'App-OS': 'ios', - 'App-OS-Version': '14.6', - 'Content-Type': 'application/x-www-form-urlencoded', - 'Accept': '*/*', - 'Connection': 'Keep-Alive' - } + this.headers = headers this._once = false this.refresh_token = refresh_token this.access_token = null @@ -28,32 +17,10 @@ export default class PixivApi { if (!this.refresh_token) { throw Error('[Yenai][Pixiv] 未配置refresh_token刷新令牌') } - const local_time = moment().format() - const headers = { - ...this.headers, - 'X-Client-Time': local_time, - 'X-Client-Hash': md5(`${local_time}${HASH_SECRET}`) - } - const data = { - client_id: CLIENT_ID, - client_secret: CLIENT_SECRET, - grant_type: 'refresh_token', - refresh_token: this.refresh_token - } - const { response, error } = await request.post('https://oauth.secure.pixiv.net/auth/token', { - data, - headers - }).then(res => res.json()) - if (error) throw Error(`[Yenai][Pixiv]login Error Response: ${error}`) + const response = login(this.refresh_token) this.access_token = response.access_token this.refresh_token = response.refresh_token this.auth = response - if (this.access_token) { - const { id, name, account } = this.auth.user - logger.info(`[Yenai][Pixiv]login ${logger.yellow(`${name}(${id}) @${account}`)} ${logger.green('success')}`) - } else { - logger.error(`[Yenai][Pixiv]login ${logger.red('fail')}`) - } } async request (target, options = {}, caching = false) { @@ -201,46 +168,3 @@ export default class PixivApi { return await this.request('v1/illust/recommended', params) } } -/** - * - * @param time - */ -function timeToSeconds (time) { - let seconds = 0 - let timeArray = time.split(' ') - for (let i = 0; i < timeArray.length; i++) { - let unit = timeArray[i].charAt(timeArray[i].length - 1) - let value = parseInt(timeArray[i].substring(0, timeArray[i].length - 1)) - switch (unit) { - case 's': - seconds += value - break - case 'm': - seconds += value * 60 - break - case 'h': - seconds += value * 60 * 60 - break - case 'd': - seconds += value * 60 * 60 * 24 - break - default: - break - } - } - return seconds -} - -/** - * - */ -function getNoonTomorrow () { - const now = moment() // 获取当前时间 - const noonToday = moment().startOf('day').add(12, 'hours') // 获取今天中午12点的时间 - const noonTomorrow = moment().add(1, 'day').startOf('day').add(12, 'hours') // 获取明天中午12点的时间 - let time = now < noonToday - ? noonToday.diff(now, 'hours') - : noonTomorrow.diff(now, 'hours') - if (time > 12) time = 12 - return time + 'h' -} diff --git a/model/Pixiv/login.js b/model/Pixiv/login.js new file mode 100644 index 0000000..82f8495 --- /dev/null +++ b/model/Pixiv/login.js @@ -0,0 +1,45 @@ +import { Config } from '../../components/index.js' +import moment from 'moment' +import request from '../../lib/request/request.js' +import md5 from 'md5' + +const CLIENT_ID = 'MOBrBDS8blbauoSck0ZfDbtuzpyT' +const CLIENT_SECRET = 'lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj' +const HASH_SECRET = '28c1fdd170a5204386cb1313c7077b34f83e4aaf4aa829ce78c231e05b0bae2c' + +export const headers = { + 'User-Agent': 'PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)', + 'Accept-Language': Config.pixiv.language, + 'App-OS': 'ios', + 'App-OS-Version': '14.6', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + 'Connection': 'Keep-Alive' +} + +export async function login (refresh_token) { + const local_time = moment().format() + const headers = { + ...this.headers, + 'X-Client-Time': local_time, + 'X-Client-Hash': md5(`${local_time}${HASH_SECRET}`) + } + const data = { + client_id: CLIENT_ID, + client_secret: CLIENT_SECRET, + grant_type: 'refresh_token', + refresh_token + } + const { response, error } = await request.post('https://oauth.secure.pixiv.net/auth/token', { + data, + headers + }).then(res => res.json()) + if (error) throw Error(`[Yenai][Pixiv]login Error Response: ${error}`) + if (response.access_token) { + const { id, name, account } = this.auth.user + logger.info(`[Yenai][Pixiv]login ${logger.yellow(`${name}(${id}) @${account}`)} ${logger.green('success')}`) + } else { + logger.error(`[Yenai][Pixiv]login ${logger.red('fail')}`) + } + return response +} diff --git a/model/Pixiv/utils.js b/model/Pixiv/utils.js new file mode 100644 index 0000000..03b0cd1 --- /dev/null +++ b/model/Pixiv/utils.js @@ -0,0 +1,38 @@ +import moment from 'moment' + +export function timeToSeconds (time) { + let seconds = 0 + let timeArray = time.split(' ') + for (let i = 0; i < timeArray.length; i++) { + let unit = timeArray[i].charAt(timeArray[i].length - 1) + let value = parseInt(timeArray[i].substring(0, timeArray[i].length - 1)) + switch (unit) { + case 's': + seconds += value + break + case 'm': + seconds += value * 60 + break + case 'h': + seconds += value * 60 * 60 + break + case 'd': + seconds += value * 60 * 60 * 24 + break + default: + break + } + } + return seconds +} + +export function getNoonTomorrow () { + const now = moment() // 获取当前时间 + const noonToday = moment().startOf('day').add(12, 'hours') // 获取今天中午12点的时间 + const noonTomorrow = moment().add(1, 'day').startOf('day').add(12, 'hours') // 获取明天中午12点的时间 + let time = now < noonToday + ? noonToday.diff(now, 'hours') + : noonTomorrow.diff(now, 'hours') + if (time > 12) time = 12 + return time + 'h' +}