Skip to content

Commit

Permalink
Merge pull request #278 from wangxinleo/feature/develop
Browse files Browse the repository at this point in the history
feat(wechat-public-account-push): 增加推送方式,修正部分代码,缓解服务器压力
  • Loading branch information
wangxinleo authored Oct 22, 2022
2 parents 08ae5d5 + c2fa8c9 commit 76e3175
Show file tree
Hide file tree
Showing 12 changed files with 220 additions and 42 deletions.
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,21 @@ wechat-public-account-push 实现自消息推送的原理,是通过调用一

**其他通道**

> 免费版每个接收用户每天允许推送200条消息,付费版每个接收用户每天1000条
>
> 1分钟内接收5次请求,超出的请求将不再推送。另外对于相同的内容,1小时内限制发送3条。
>
> 消息推送时显示的是 **设备通知**,标题需要**进入公众号查看**
>
> 消息放置在消息列表,方便随时查看
>
> 不再是xxxx测试号,而是推送加服务号,更美观
>
> 此通道[可能会被腾讯弃用](https://developers.weixin.qq.com/community/minihome/doc/000a46c7eb8468ba1a1cc863e51401),请评估风险后再选择
>
[⭐pushplus推送加服务号 >>> 点击使用](./docs/message-channel/push-plus.md)

> 免费版每个接收用户每天允许推送5条消息,付费版每个接收用户每天1000条
>
> 消息推送时显示的是 **设备通知**,标题需要**进入公众号查看**
Expand Down Expand Up @@ -172,6 +187,8 @@ wechat-public-account-push 实现自消息推送的原理,是通过调用一

[❓配置自动生成 教程 >>>](https://github.com/shuangxunian/wechat-form)

[❓配置完成后如何手动运行或者更改自动运行时间? 点开链接查看4. 5. >>>](./docs/how-to-use/github-actions.md)

#### 1.2.2 方式二:使用Github-Action(不准时,排队执行,胜在免费)
> 世界上最大的同性交友平台(不是),需要一定的英语基础,**编辑的时候请不要使用网页的自动翻译**
Expand Down
49 changes: 19 additions & 30 deletions __tests__/services.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,9 @@ describe('services', () => {
},
},
})
Object.keys(RUN_TIME_STORAGE).forEach((o) => {
RUN_TIME_STORAGE[o] = null
})
expect(await getWeather('天津', '天津')).toEqual({})
axios.get = async () => ({
status: 199,
Expand Down Expand Up @@ -544,12 +547,7 @@ describe('services', () => {
},
]
config.FESTIVALS_LIMIT = 4
expect(getBirthdayMessage()).toEqual(`
今天是 结婚纪念日 哦,要开心!
距离 李四 的26岁生日还有28天
距离 老婆 的23岁生日还有41天
距离 被搭讪纪念日 还有363天
`.trimStart())
expect(getBirthdayMessage()).toEqual('今天是 结婚纪念日 哦,要开心! \n距离 李四 的26岁生日还有28天 \n距离 老婆 的23岁生日还有41天 \n距离 被搭讪纪念日 还有363天 \n'.trimStart())
MockDate.reset()
MockDate.set('2022-09-31')
config.FESTIVALS = [
Expand All @@ -566,12 +564,7 @@ describe('services', () => {
type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01',
},
]
expect(getBirthdayMessage()).toEqual(`
今天是 李四 的26岁生日哦,祝李四生日快乐!
距离 老婆 的23岁生日还有13天
距离 被搭讪纪念日 还有335天
距离 结婚纪念日 还有337天
`.trimStart())
expect(getBirthdayMessage()).toEqual('今天是 李四 的26岁生日哦,祝李四生日快乐! \n距离 老婆 的23岁生日还有13天 \n距离 被搭讪纪念日 还有335天 \n距离 结婚纪念日 还有337天 \n'.trimStart())
MockDate.reset()
MockDate.set('1999-10-27')
config.FESTIVALS = [
Expand All @@ -588,12 +581,7 @@ describe('services', () => {
type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01',
},
]
expect(getBirthdayMessage()).toEqual(`
今天是 老婆 的0岁生日哦,祝老婆生日快乐!
距离 被搭讪纪念日 还有310天
距离 结婚纪念日 还有312天
距离 李四 的4岁生日还有340天
`.trimStart())
expect(getBirthdayMessage()).toEqual('今天是 老婆 的0岁生日哦,祝老婆生日快乐! \n距离 被搭讪纪念日 还有310天 \n距离 结婚纪念日 还有312天 \n距离 李四 的4岁生日还有340天 \n'.trimStart())
MockDate.reset()
config.FESTIVALS_LIMIT = -1
MockDate.set('2022-09-03')
Expand Down Expand Up @@ -632,12 +620,7 @@ describe('services', () => {
type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01',
},
]
expect(getBirthdayMessage()).toEqual(`
距离 被搭讪纪念日 还有309天
距离 结婚纪念日 还有311天
距离 李四 的4岁生日还有339天
距离 老婆 的生日还有354天
`.trimStart())
expect(getBirthdayMessage()).toEqual('距离 被搭讪纪念日 还有309天 \n距离 结婚纪念日 还有311天 \n距离 李四 的4岁生日还有339天 \n距离 老婆 的生日还有354天 \n'.trimStart())
MockDate.set('1999-10-27')
config.FESTIVALS = [
{
Expand All @@ -653,12 +636,7 @@ describe('services', () => {
type: '节日', name: '被搭讪纪念日', year: '2021', date: '09-01',
},
]
expect(getBirthdayMessage()).toEqual(`
今天是 老婆 的生日哦,祝老婆生日快乐!
距离 李四 的0岁生日还有100天
距离 被搭讪纪念日 还有310天
距离 结婚纪念日 还有312天
`.trimStart())
expect(getBirthdayMessage()).toEqual('今天是 老婆 的生日哦,祝老婆生日快乐! \n距离 李四 的0岁生日还有100天 \n距离 被搭讪纪念日 还有310天 \n距离 结婚纪念日 还有312天 \n'.trimStart())
config.SWITCH = {
birthdayMessage: false,
}
Expand Down Expand Up @@ -823,6 +801,7 @@ describe('services', () => {
axios.post = async () => {
throw new Error()
}
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -833,6 +812,7 @@ describe('services', () => {
successPostIds: '无',
successPostNum: 0,
})
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -854,6 +834,7 @@ describe('services', () => {
axios.post = async () => {
throw new Error()
}
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -869,6 +850,7 @@ describe('services', () => {
errcode: 0,
},
})
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -888,6 +870,7 @@ describe('services', () => {
successPostNum: 0,
})
RUN_TIME_STORAGE.accessToken = 'secret'
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -909,6 +892,7 @@ describe('services', () => {
axios.post = async () => {
throw new Error()
}
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -932,6 +916,7 @@ describe('services', () => {
errcode: 40036,
},
})
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand All @@ -955,6 +940,7 @@ describe('services', () => {
errcode: 40003,
},
})
RUN_TIME_STORAGE.pushNum = 0
expect(await sendMessageReply([
{ id: '123', name: 'me' },
{ id: '456', name: 'you' },
Expand Down Expand Up @@ -1361,6 +1347,9 @@ describe('services', () => {
},
})
await expect(buildTianApi('tianqi')).resolves.toEqual([])
Object.keys(RUN_TIME_STORAGE).forEach((o) => {
RUN_TIME_STORAGE[o] = null
})
axios.get = async () => ({
data: {
code: 200,
Expand Down
10 changes: 9 additions & 1 deletion docs/how-to-use/config-demo.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ const USER_CONFIG = {
* 基本配置
*/

// 使用的推送通道:['push-deer', 'wechat-test', 'server-chan']
// 使用的推送通道:['push-deer', 'wechat-test', 'server-chan', 'push-plus']
// 默认使用 【微信测试号】
// 使用【pushDeer】请填写 push-deer
// 使用【微信测试号】请填写 wechat-test
// 使用【方糖服务号】请填写 server-chan
// 使用【pushplus推送加服务号】请填写 push-plus
USE_PASSAGE: 'wechat-test',

// 使用微信测试号时才需要填写:公众号APP_ID
Expand All @@ -25,6 +26,13 @@ const USER_CONFIG = {
// 建议不要填这里,请使用文档中github secret的方法进行保密配置,保护您的隐私安全。
// 如果你非要填这里也行。脚本也能运行
APP_SECRET: '',

// 为了避免推送服务器误将脚本列为恶意推送脚本,可设置每分钟脚本最大推送数
// 每分钟脚本最大推送数,超过此数将会休眠1分钟后再发送剩余消息,不填则默认为5
// 此项不建议随意修改
MAX_PUSH_ONE_MINUTE: 5,
// 配合MAX_PUSH_ONE_MINUTE使用,休眠<SLEEP_TIME>毫秒后再发送剩余消息,不填则默认为65000
SLEEP_TIME: 65000,

// 功能开关,打开:true,关闭:false
SWITCH: {
Expand Down
63 changes: 63 additions & 0 deletions docs/message-channel/push-plus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
[📌返回首页 >>>](../../README.md)

# 使用PushDeer

运行图示:

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/server-chan3.jpg)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/server-chan4.jpg)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/server-chan2.jpg)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/push-plus.png)

## Ⅰ. 注册并使用push-plus服务

- 浏览器打开并登录 [push-plus首页](https://www.pushplus.plus/login.html)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-plus.png)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-plus-2.png)

- 复制你的token保存备用

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-plus-4.png)

## Ⅱ. 进行模板配置

仓库`config/template-config.cjs` 已内置两个模板,可以根据个人需求进行相应修改

> 模板中{{***.DATA}}都对应相应的数据,需要就保留,不需要就删掉
![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/template-config.png)

## Ⅲ. 进行基础config配置

### 打开仓库中`config/index.cjs`的进行,进行编辑

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/how-to-use/github-into-config.png)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/how-to-use/github-into-config-2.png)

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/how-to-use/github-into-config-3.png)

### 1. 使用push-plus模式
```javascript
// 请将以下代码按照图示粘贴到对应位置
USE_PASSAGE: 'push-plus',
```
![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-plus-3.png)

### 2. 你的token填到哪里?

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-deer.png)

### 3. Ⅲ. 中的模板id填到哪里?

![图片无法查看请移步顶部访问 国内备用仓库地址](../../img/message-channel/use-push-deer2.png)


**以上步骤完成后请返回首页继续进行后续操作**

[📌返回首页 >>>](../../README.md)
Binary file added img/message-channel/push-plus.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/message-channel/use-push-plus-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/message-channel/use-push-plus-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/message-channel/use-push-plus-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/message-channel/use-push-plus.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 3 additions & 1 deletion main.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ export default async function mainForProd() {
}

// 释放运行时临时存储的数据
RUN_TIME_STORAGE.accessToken = null
Object.keys(RUN_TIME_STORAGE).forEach((o) => {
RUN_TIME_STORAGE[o] = null
})
}

const main = () => {
Expand Down
Loading

0 comments on commit 76e3175

Please sign in to comment.