Skip to content

Commit

Permalink
fix: 修复数量赠送时计算bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Curtion committed Aug 10, 2023
1 parent 49db692 commit 3affd37
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 58 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "douyu-keep",
"version": "1.0.0",
"version": "1.0.1",
"description": "斗鱼粉丝牌续牌",
"main": "build/main/main.js",
"license": "MIT",
Expand Down
67 changes: 12 additions & 55 deletions src/renderer/run/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { storeToRefs } from 'pinia'
import { getConfig, getDid, getDyAndSid, getGiftNumber, sendGift, sleep } from './utils'
import { computeGiftCountOfNumber, computeGiftCountOfPercentage, getConfig, getDid, getDyAndSid, getGiftNumber, sendGift, sleep } from './utils'
import type { sendConfig } from '~/stores/fans'
import { useLog } from '~/stores'

Expand All @@ -13,16 +13,8 @@ export default async function startJob(manual: boolean) {
return
}
const { type } = await getConfig()
if (manual) {
if (type === '自动执行' || manual) {
await start()
return
}
if (type === '自动执行') {
await start()
return
}
if (type === '定时执行') {
// TODO: 创建定时任务
}
}

Expand Down Expand Up @@ -69,63 +61,28 @@ async function start() {
let Jobs: sendConfig = {}
if (model === 1) {
// 百分比赠送
const cfgCountNumber = Object.values(send).reduce((a, b) => a + b.percentage, 0)
if (cfgCountNumber > 100) {
text.value = `亲密度百分比配置错误,请重新配置. 当前${cfgCountNumber}%, 最大100%`
setTimeout(() => {
runing.value = false
}, 10000)
return
}
const sendSort = Object.values(send).sort((a, b) => a.percentage - b.percentage)
for (let i = 0; i < sendSort.length; i++) {
const item = sendSort[i]
if (i === sendSort.length - 1) {
const count = number - sendSort.reduce((a, b) => a + (b.count || 0), 0)
item.count = count
} else {
if (item.percentage === 0) {
item.count = 0
continue
}
const count = Math.floor((item.percentage / 100) * number)
item.count = count === 0 ? 1 : count
}
}
const newSend = sendSort.reduce((a, b) => {
return {
...a,
[b.roomId]: b,
}
}, {} as sendConfig)
const cfgCountNumberNew = Object.values(newSend).reduce((a, b) => a + (b.number <= -1 ? 1 : b.number), 0)
if (cfgCountNumberNew > number) {
text.value = `荧光棒数量不足,请重新配置. 当前${number}个, 需求${cfgCountNumberNew}个`
try {
const sendNumber = await computeGiftCountOfPercentage(number, send)
Jobs = sendNumber
} catch (error: any) {
text.value = error.toString()
setTimeout(() => {
runing.value = false
}, 10000)
return
}

Jobs = newSend
} else if (model === 2) {
// 指定数量赠送
const cfgCountNumber = Object.values(send).reduce((a, b) => a + (b.number === -1 ? 1 : b.number), 0)
if (cfgCountNumber > number) {
text.value = `荧光棒数量不足,请重新配置. 当前${number}个, 需求${cfgCountNumber}个`
try {
const sendNumber = await computeGiftCountOfNumber(number, send)
Jobs = sendNumber
} catch (error: any) {
text.value = error.toString()
setTimeout(() => {
runing.value = false
}, 10000)
return
}
for (const key in send) {
if (send[key].number === -1) {
send[key].count = number - cfgCountNumber
} else {
send[key].count = send[key].number
}
}
Jobs = send
}
text.value = '开始获取必要参数dy和sid'
let args: sendArgs = {}
Expand Down
57 changes: 55 additions & 2 deletions src/renderer/run/utils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import axios from 'axios'
import type { Config, SendGift } from '~/stores/fans'
import type { Config, SendGift, sendConfig } from '~/stores/fans'

export async function getGiftNumber() {
const { data } = await axios.get('https://www.douyu.com/japi/prop/backpack/web/v1?rid=4120796')
if (data.data?.list?.length > 0) {
return data.data?.list.find((item: any) => item.id === 268)?.count
return data.data?.list.find((item: any) => item.id === 268)?.count ?? 0
} else {
return 0
}
Expand Down Expand Up @@ -59,3 +59,56 @@ export async function getConfig() {
throw new Error('请先配置任务!')
}
}

export async function computeGiftCountOfNumber(number: number, send: sendConfig) {
const cfgCountNumber = Object.values(send).reduce((a, b) => a + (b.number === -1 ? 0 : b.number), 0)
if (cfgCountNumber > number) {
return Promise.reject(new Error(`荧光棒数量不足,请重新配置. 当前${number}个, 需求${cfgCountNumber}个`))
}
const sendSort = Object.values(send).sort((a, b) => b.number - a.number)
for (let i = 0; i < sendSort.length; i++) {
const item = sendSort[i]
if (i === sendSort.length - 1) {
const count = number - sendSort.reduce((a, b) => a + (b.count || 0), 0)
item.count = count
} else {
item.count = item.number
}
}
const newSend = sendSort.reduce((a, b) => {
return {
...a,
[b.roomId]: b,
}
}, {} as sendConfig)
return newSend
}

export async function computeGiftCountOfPercentage(number: number, send: sendConfig) {
const sendSort = Object.values(send).sort((a, b) => a.percentage - b.percentage)
for (let i = 0; i < sendSort.length; i++) {
const item = sendSort[i]
if (i === sendSort.length - 1) {
const count = number - sendSort.reduce((a, b) => a + (b.count || 0), 0)
item.count = count
} else {
if (item.percentage === 0) {
item.count = 0
continue
}
const count = Math.floor((item.percentage / 100) * number)
item.count = count === 0 ? 1 : count
}
}
const newSend = sendSort.reduce((a, b) => {
return {
...a,
[b.roomId]: b,
}
}, {} as sendConfig)
const cfgCountNumber = Object.values(newSend).reduce((a, b) => a + (b.number <= -1 ? 1 : b.number), 0)
if (cfgCountNumber > number) {
return Promise.reject(new Error(`荧光棒数量不足,请重新配置. 当前${number}个, 需求${cfgCountNumber}个`))
}
return newSend
}

0 comments on commit 3affd37

Please sign in to comment.