format md

This commit is contained in:
felinae98 2022-02-12 10:22:19 +08:00
parent 709a3e214b
commit 9055a039a8
No known key found for this signature in database
GPG Key ID: 00C8B010587FF610
4 changed files with 215 additions and 150 deletions

View File

@ -1,76 +1,85 @@
<div align="center">
<h1>Bison </br>通用订阅推送插件</h1>
[![pypi](https://badgen.net/pypi/v/nonebot-bison)](https://pypi.org/project/nonebot-bison/)
[![license](https://img.shields.io/github/license/felinae98/nonebot-bison)](https://github.com/felinae98/nonebot-bison/blob/main/LICENSE)
[![felinae98](https://circleci.com/gh/felinae98/nonebot-bison.svg?style=shield)](https://circleci.com/gh/felinae98/nonebot-bison)
[![docker](https://img.shields.io/docker/image-size/felinae98/nonebot-bison)](https://hub.docker.com/r/felinae98/nonebot-bison)
[![codecov](https://codecov.io/gh/felinae98/nonebot-bison/branch/main/graph/badge.svg?token=QCFIODJOOA)](https://codecov.io/gh/felinae98/nonebot-bison)
[![qq group](https://img.shields.io/badge/QQ%E7%BE%A4-868610060-orange )](https://qm.qq.com/cgi-bin/qm/qr?k=pXYMGB_e8b6so3QTqgeV6lkKDtEeYE4f&jump_from=webapi)
[![qq group](https://img.shields.io/badge/QQ%E7%BE%A4-868610060-orange)](https://qm.qq.com/cgi-bin/qm/qr?k=pXYMGB_e8b6so3QTqgeV6lkKDtEeYE4f&jump_from=webapi)
[文档](https://nonebot-bison.vercel.app)|[开发文档](https://nonebot-bison.vercel.app/dev)
</div>
## 简介
一款自动爬取各种站点社交平台更新动态并将信息推送到QQ的机器人。
基于 [`NoneBot2`](https://github.com/nonebot/nonebot2 ) 开发(诞生于明日方舟的蹲饼活动)
一款自动爬取各种站点,社交平台更新动态,并将信息推送到 QQ 的机器人。
基于 [`NoneBot2`](https://github.com/nonebot/nonebot2) 开发(诞生于明日方舟的蹲饼活动)
<details>
<summary>本项目原名原名nonebot-hk-reporter</summary>
寓意本Bot要做全世界跑的最快的搬运机器人后因名字过于暴力改名
寓意本 Bot 要做全世界跑的最快的搬运机器人,后因名字过于暴力改名
</details>
本项目名称来源于明日方舟角色拜松——一名龙门的信使,曾经骑自行车追上骑摩托车的德克萨斯
支持的平台:
* 微博
* B站
* RSS
* 明日方舟
* 塞壬唱片新闻
* 游戏内公告
* 版本更新等通知
* 网易云音乐
* 歌手发布新专辑
* 电台更新
- 微博
- Bilibili
- RSS
- 明日方舟
- 塞壬唱片新闻
- 游戏内公告
- 版本更新等通知
- 网易云音乐
- 歌手发布新专辑
- 电台更新
## 功能
* 定时爬取指定网站
* 通过图片发送文本,防止风控
* 使用队列限制发送频率
* 使用网页后台管理Bot订阅
- 定时爬取指定网站
- 通过图片发送文本,防止风控
- 使用队列限制发送频率
- 使用网页后台管理 Bot 订阅
## 使用方法
**!!注意如果要使用后台管理功能请使用pypi版本或者docker版本如果直接clone源代码
需要按下面方式进行build**
**!!注意,如果要使用后台管理功能请使用 pypi 版本或者 docker 版本,如果直接 clone 源代码
需要按下面方式进行 build**
```bash
cd ./admin-frontend
yarn && yarn build
```
可以使用Dockerdocker-compose作为插件安装在nonebot中或者直接运行
可以使用 Dockerdocker-compose作为插件安装在 nonebot 中,或者直接运行
参考[文档](https://nonebot-bison.vercel.app/usage/#%E4%BD%BF%E7%94%A8)
## FAQ
1. 报错`TypeError: 'type' object is not subscriptable`
本项目使用了Python 3.9的语法请将Python版本升级到3.9及以上推荐使用docker部署
2. bot不理我
请确认自己是群主或者管理员,并且检查`COMMAND_START`环境变量是否设为`[""]`
本项目使用了 Python 3.9 的语法,请将 Python 版本升级到 3.9 及以上,推荐使用 docker 部署
2. bot 不理我
请确认自己是群主或者管理员,并且检查`COMMAND_START`环境变量是否设为`[""]`
3. 微博漏订阅了
微博更新了新的风控措施,某些含有某些关键词的微博会获取不到。
微博更新了新的风控措施,某些含有某些关键词的微博会获取不到。
## 参与开发
欢迎各种PR参与开发本插件很简单只需要对相应平台完成几个接口的编写就行。你只需要一点简单的爬虫知识就行。
如果对整体框架有任何意见或者建议欢迎issue。
欢迎各种 PR参与开发本插件很简单只需要对相应平台完成几个接口的编写就行。你只需要一点简单的爬虫知识就行。
如果对整体框架有任何意见或者建议,欢迎 issue。
## 鸣谢
* [`go-cqhttp`](https://github.com/Mrs4s/go-cqhttp):简单又完善的 cqhttp 实现
* [`NoneBot2`](https://github.com/nonebot/nonebot2):超好用的开发框架
* [`HarukaBot`](https://github.com/SK-415/HarukaBot/): 借鉴了大体的实现思路
* [`rsshub`](https://github.com/DIYgod/RSSHub)提供了大量的api
- [`go-cqhttp`](https://github.com/Mrs4s/go-cqhttp):简单又完善的 cqhttp 实现
- [`NoneBot2`](https://github.com/nonebot/nonebot2):超好用的开发框架
- [`HarukaBot`](https://github.com/SK-415/HarukaBot/): 借鉴了大体的实现思路
- [`rsshub`](https://github.com/DIYgod/RSSHub):提供了大量的 api
## License
MIT
MIT

View File

@ -5,11 +5,11 @@ tagline: 本bot励志做全泰拉骑车最快的信使
actionText: 快速部署
actionLink: /usage/
features:
- title: 拓展性强
details: 没有自己想要的网站?只要简单的爬虫知识就可以给它适配一个新的网站
- title: 通用,强大
details: 社交媒体?网站更新?游戏开服?只要能爬就都能推,还支持自定义过滤
- title: 后台管理
details: 提供后台管理页面,简单快捷修改配置
- title: 拓展性强
details: 没有自己想要的网站?只要简单的爬虫知识就可以给它适配一个新的网站
- title: 通用,强大
details: 社交媒体?网站更新?游戏开服?只要能爬就都能推,还支持自定义过滤
- title: 后台管理
details: 提供后台管理页面,简单快捷修改配置
footer: MIT Licensed
---

View File

@ -1,53 +1,63 @@
---
sidebar: auto
---
# 开发指南
本插件需要你的帮助!只需要会写简单的爬虫,就能给本插件适配新的网站。
## 基本概念
* `nonebot_bison.post.Post`: 可以理解为推送内容,其中包含需要发送的文字,图片,链接,平台信息等
* `nonebot_bison.types.RawPost`: 从站点/平台中爬到的单条信息
* `nonebot_bison.types.Target`: 目标账号Bilibili微博等社交媒体中的账号
* `nonebot_bison.types.Category`: 信息分类,例如视频,动态,图文,文章等
* `nonebot_bison.types.Tag`: 信息标签例如微博中的超话或者hashtag
- `nonebot_bison.post.Post`: 可以理解为推送内容,其中包含需要发送的文字,图片,链接,平台信息等
- `nonebot_bison.types.RawPost`: 从站点/平台中爬到的单条信息
- `nonebot_bison.types.Target`: 目标账号Bilibili微博等社交媒体中的账号
- `nonebot_bison.types.Category`: 信息分类,例如视频,动态,图文,文章等
- `nonebot_bison.types.Tag`: 信息标签,例如微博中的超话或者 hashtag
## 快速上手
上车!我们走
先明确需要适配的站点类型,先明确两个问题:
#### 我要发送什么样的推送
* `nonebot_bison.platform.platform.NewMessage` 最常见的类型,每次爬虫向特定接口爬取一个消息列表,
与之前爬取的信息对比,过滤出新的消息,再根据用户自定义的分类和标签进行过滤,最后处理消息,把
处理过后的消息发送给用户
例如微博Bilibili
* `nonebot_bison.platform.platform.StatusChange` 每次爬虫获取一个状态,在状态改变时发布推送
例如:游戏开服提醒,主播上播提醒
* `nonebot_bison.platform.platform.SimplePost``NewMessage`相似,但是不过滤新的消息
,每次发送全部消息
例如:每日榜单定时发送
#### 这个平台是否有账号的概念
* `nonebot_bison.platform.platform.TargetMixin` 有账号的概念
例如Bilibili用户微博用户
* `nonebot_bison.platform.platform.NoTargetMixin` 没有账号的概念
例如:游戏公告,教务处公告
现在你已经选择了两个类,现在你需要在`src/plugins/nonebot_bison/platform`下新建一个py文件
#### 我要发送什么样的推送
- `nonebot_bison.platform.platform.NewMessage` 最常见的类型,每次爬虫向特定接口爬取一个消息列表,
与之前爬取的信息对比,过滤出新的消息,再根据用户自定义的分类和标签进行过滤,最后处理消息,把
处理过后的消息发送给用户
例如微博Bilibili
- `nonebot_bison.platform.platform.StatusChange` 每次爬虫获取一个状态,在状态改变时发布推送
例如:游戏开服提醒,主播上播提醒
- `nonebot_bison.platform.platform.SimplePost``NewMessage`相似,但是不过滤新的消息
,每次发送全部消息
例如:每日榜单定时发送
#### 这个平台是否有账号的概念
- `nonebot_bison.platform.platform.TargetMixin` 有账号的概念
例如Bilibili 用户,微博用户
- `nonebot_bison.platform.platform.NoTargetMixin` 没有账号的概念
例如:游戏公告,教务处公告
现在你已经选择了两个类,现在你需要在`src/plugins/nonebot_bison/platform`下新建一个 py 文件,
在里面新建一个类,继承你刚刚选择的两个类,重载一些关键的函数,然后……就完成了,不需要修改别的东西了。
例如要适配微博微博有账号并且我希望bot搬运新的消息所以微博的类应该这样定义
例如要适配微博,微博有账号,并且我希望 bot 搬运新的消息,所以微博的类应该这样定义:
```python
class Weibo(NewMessage, TargetMixin):
...
```
当然我们非常希望你对自己适配的平台写一些单元测试,你可以模仿`tests/platforms/test_*.py`中的内容写
一些单元测试。为保证多次运行测试的一致性可以mock http的响应测试的内容包括获取RawPost处理成Post
测试分类以及提取tag等当然最好和rsshub做一个交叉验证。
一些单元测试。为保证多次运行测试的一致性,可以 mock http 的响应,测试的内容包括获取 RawPost处理成 Post
,测试分类以及提取 tag 等,当然最好和 rsshub 做一个交叉验证。
::: danger
Nonebot项目使用了全异步的处理方式所以你需要对异步Python asyncio的机制有一定了解当然
Nonebot 项目使用了全异步的处理方式所以你需要对异步Python asyncio 的机制有一定了解,当然,
依葫芦画瓢也是足够的
:::
## 类的方法与成员变量
## 方法与变量的定义

View File

@ -1,129 +1,175 @@
---
sidebar: auto
---
# 部署和使用
本节将教你快速部署和使用一个nonebot-bison如果你不知道要选择哪种部署方式推荐使用[docker-compose](#docker-compose部署-推荐)
本节将教你快速部署和使用一个 nonebot-bison如果你不知道要选择哪种部署方式推荐使用[docker-compose](#docker-compose部署-推荐)
## 部署
本项目可以作为单独的Bot使用可以作为nonebot2的插件使用
### 作为Bot使用
本项目可以作为单独的 Bot 使用,可以作为 nonebot2 的插件使用
### 作为 Bot 使用
额外提供自动同意超级用户的好友申请和同意超级用户的加群邀请的功能
#### docker-compose部署推荐
#### docker-compose 部署(推荐)
1. 在一个新的目录中下载[docker-compose.yml](https://raw.githubusercontent.com/felinae98/nonebot-bison/main/docker-compose.yml)
将其中的`<your QQ>`改成自己的QQ号
```bash
wget https://raw.githubusercontent.com/felinae98/nonebot-bison/main/docker-compose.yml
```
2. 运行配置go-cqhttp
```bash
docker-compose run go-cqhttp
```
通信方式选择:`3: 反向 Websocket 通信`
编辑`bot-data/config.yml`,更改下面字段:
```
account: # 账号相关
uin: <QQ号> # QQ账号
password: "<QQ密码>" # 密码为空时使用扫码登录
将其中的`<your QQ>`改成自己的 QQ 号
```bash
wget https://raw.githubusercontent.com/felinae98/nonebot-bison/main/docker-compose.yml
```
2. 运行配置 go-cqhttp
message:
post-format: array
```bash
docker-compose run go-cqhttp
```
............
通信方式选择:`3: 反向 Websocket 通信`
编辑`bot-data/config.yml`,更改下面字段:
servers:
- ws-reverse:
universal: ws://nonebot:8080/cqhttp/ws # 将这个字段写为这个值
```
3. 登录go-cqhttp
再次
```bash
docker-compose run go-cqhttp
```
参考[go-cqhttp文档](https://docs.go-cqhttp.org/faq/slider.html#%E6%96%B9%E6%A1%88a-%E8%87%AA%E8%A1%8C%E6%8A%93%E5%8C%85)
完成登录
4. 确定完成登录后启动bot
```bash
docker-compose up -d
```
#### docker部署
本项目的docker镜像为`felinae98/nonebot-bison`可以直接pull后run进行使用
```
account: # 账号相关
uin: <QQ号> # QQ账号
password: "<QQ密码>" # 密码为空时使用扫码登录
message:
post-format: array
............
servers:
- ws-reverse:
universal: ws://nonebot:8080/cqhttp/ws # 将这个字段写为这个值
```
3. 登录 go-cqhttp
再次
```bash
docker-compose run go-cqhttp
```
参考[go-cqhttp 文档](https://docs.go-cqhttp.org/faq/slider.html#%E6%96%B9%E6%A1%88a-%E8%87%AA%E8%A1%8C%E6%8A%93%E5%8C%85)
完成登录
4. 确定完成登录后,启动 bot
```bash
docker-compose up -d
```
#### docker 部署
本项目的 docker 镜像为`felinae98/nonebot-bison`,可以直接 pull 后 run 进行使用,
相关配置参数可以使用`-e`作为环境变量传入
#### 直接运行(不推荐)
可以参考[nonebot的运行方法](https://v2.nonebot.dev/guide/getting-started.html)
可以参考[nonebot 的运行方法](https://v2.nonebot.dev/guide/getting-started.html)
::: danger
直接克隆源代码需要自行编译前端,否则会出现无法使用管理后台等情况。
:::
::: danger
本项目中使用了Python 3.9的语法如果出现问题请检查Python版本
本项目中使用了 Python 3.9 的语法,如果出现问题,请检查 Python 版本
:::
1. 首先安装poetry[安装方法](https://python-poetry.org/docs/#installation)
2. clone本项目在项目中`poetry install`安装依赖
2. 安装yarn配置yarn源推荐
3. 在`admin-fronted`中运行`yarn && yarn build`编译前端
3. 编辑`.env.prod`配置各种环境变量,见[Nonebot2配置](https://v2.nonebot.dev/guide/basic-configuration.html)
4. 运行`poetry run python bot.py`启动机器人
1. 首先安装 poetry[安装方法](https://python-poetry.org/docs/#installation)
2. clone 本项目,在项目中`poetry install`安装依赖
3. 安装 yarn配置 yarn 源(推荐)
4. 在`admin-fronted`中运行`yarn && yarn build`编译前端
5. 编辑`.env.prod`配置各种环境变量,见[Nonebot2 配置](https://v2.nonebot.dev/guide/basic-configuration.html)
6. 运行`poetry run python bot.py`启动机器人
### 作为插件使用
本部分假设大家会部署nonebot2
本部分假设大家会部署 nonebot2
#### 手动安装
1. 安装pip包`nonebot-bison`
1. 安装 pip 包`nonebot-bison`
2. 在`bot.py`中导入插件`nonebot_bison`
### 自动安装
使用`nb-cli`执行:`nb plugin install nonebot_bison`
## 配置
可参考[源文件](https://github.com/felinae98/nonebot-bison/blob/main/src/plugins/nonebot_bison/plugin_config.py)
* `BISON_CONFIG_PATH`: 插件存放配置文件的位置,如果不设定默认为项目目录下的`data`目录
* `BISON_USE_PIC`: 将文字渲染成图片后进行发送,多用于规避风控
* `BISON_BROWSER`: 本插件使用Chrome来渲染图片
* 使用browserless提供的Chrome管理服务设置为`ws://xxxxxxxx`值为Chrome Endpoint推荐
* 使用cdp连接相关服务设置为`wsc://xxxxxxxxx`
* 使用本地安装的Chrome设置为`local:<chrome path>`,例如`local:/usr/bin/google-chrome-stable`
* 如果不进行配置那么会在启动时候自动进行安装在官方的docker镜像中已经安装了浏览器
::: warning
截止发布时本项目尚不能完全与browserless兼容目前建议使用镜像内自带的浏览器
不要配置这个变量
:::
* `BISON_OUTER_URL`: 从外部访问服务器的地址,默认为`http://localhost:8080/bison`,如果你的插件部署
在服务器上,建议配置为`http://<你的服务器ip>:8080/bison`
* `BISON_FILTER_LOG`: 是否过滤来自`nonebot`的warning级以下的log如果你的bot只运行了这个插件可以考虑
开启,默认关
* `BISON_USE_QUEUE`: 是否用队列的方式发送消息,降低发送频率,默认开
可参考[源文件](https://github.com/felinae98/nonebot-bison/blob/main/src/plugins/nonebot_bison/plugin_config.py)
- `BISON_CONFIG_PATH`: 插件存放配置文件的位置,如果不设定默认为项目目录下的`data`目录
- `BISON_USE_PIC`: 将文字渲染成图片后进行发送,多用于规避风控
- `BISON_BROWSER`: 本插件使用 Chrome 来渲染图片
- 使用 browserless 提供的 Chrome 管理服务,设置为`ws://xxxxxxxx`,值为 Chrome Endpoint推荐
- 使用 cdp 连接相关服务,设置为`wsc://xxxxxxxxx`
- 使用本地安装的 Chrome设置为`local:<chrome path>`,例如`local:/usr/bin/google-chrome-stable`
- 如果不进行配置,那么会在启动时候自动进行安装,在官方的 docker 镜像中已经安装了浏览器
::: warning
截止发布时,本项目尚不能完全与 browserless 兼容,目前建议使用镜像内自带的浏览器,即
不要配置这个变量
:::
- `BISON_OUTER_URL`: 从外部访问服务器的地址,默认为`http://localhost:8080/bison`,如果你的插件部署
在服务器上,建议配置为`http://<你的服务器ip>:8080/bison`
- `BISON_FILTER_LOG`: 是否过滤来自`nonebot`的 warning 级以下的 log如果你的 bot 只运行了这个插件可以考虑
开启,默认关
- `BISON_USE_QUEUE`: 是否用队列的方式发送消息,降低发送频率,默认开
## 使用
::: warning
本节假设`COMMAND_START`设置中包含`''`如果出现bot不响应的问题请先
本节假设`COMMAND_START`设置中包含`''`,如果出现 bot 不响应的问题,请先
排查这个设置
:::
### 命令
#### 在本群中进行配置
所有命令都需要@bot触发
* 添加订阅仅管理员和群主和SUPERUSER`添加订阅`
* 查询订阅:`查询订阅`
* 删除订阅仅管理员和群主和SUPERUSER`删除订阅`
所有命令都需要@bot 触发
- 添加订阅(仅管理员和群主和 SUPERUSER`添加订阅`
- 查询订阅:`查询订阅`
- 删除订阅(仅管理员和群主和 SUPERUSER`删除订阅`
#### 私聊机器人获取后台地址
`后台管理`,之后点击返回的链接
如果你是superuser那么你可以管理所有群的订阅如果你是bot所在的群的其中部分群的管理
你可以管理你管理的群里的订阅如果你不是任意一个群的管理那么bot将会报错。
如果你是 superuser那么你可以管理所有群的订阅如果你是 bot 所在的群的其中部分群的管理,
你可以管理你管理的群里的订阅;如果你不是任意一个群的管理,那么 bot 将会报错。
::: tip
可以和bot通过临时聊天触发
可以和 bot 通过临时聊天触发
:::
::: warning
网页的身份鉴别机制全部由bot返回的链接确定所以这个链接并不能透露给别人。
并且链接会过期所以一段时间后需要重新私聊bot获取新的链接。
网页的身份鉴别机制全部由 bot 返回的链接确定,所以这个链接并不能透露给别人。
并且链接会过期,所以一段时间后需要重新私聊 bot 获取新的链接。
:::
#### 私聊机器人进行配置需要SUPERUER权限
* 添加订阅:`管理-添加订阅`
* 查询订阅:`管理-查询订阅`
* 删除订阅:`管理-删除订阅`
### 所支持平台的uid
#### 私聊机器人进行配置(需要 SUPERUER 权限)
- 添加订阅:`管理-添加订阅`
- 查询订阅:`管理-查询订阅`
- 删除订阅:`管理-删除订阅`
### 所支持平台的 uid
#### Weibo
* 对于一般用户主页`https://weibo.com/u/6441489862?xxxxxxxxxxxxxxx``/u/`后面的数字即为uid
* 对于有个性域名的用户如:`https://weibo.com/arknights`,需要点击左侧信息标签下“更多”,链接为`https://weibo.com/6279793937/about`其中中间数字即为uid
- 对于一般用户主页`https://weibo.com/u/6441489862?xxxxxxxxxxxxxxx``/u/`后面的数字即为 uid
- 对于有个性域名的用户如:`https://weibo.com/arknights`,需要点击左侧信息标签下“更多”,链接为`https://weibo.com/6279793937/about`,其中中间数字即为 uid
#### Bilibili
主页链接一般为`https://space.bilibili.com/161775300?xxxxxxxxxx`数字即为uid
主页链接一般为`https://space.bilibili.com/161775300?xxxxxxxxxx`,数字即为 uid
#### RSS
RSS链接即为uid
RSS 链接即为 uid
#### 网易云音乐-歌手
在网易云网页上歌手的链接一般为`https://music.163.com/#/artist?id=32540734``id=`
后面的数字即为uid
后面的数字即为 uid
#### 网易云音乐-电台
在网易云网页上电台的链接一般为`https://music.163.com/#/djradio?id=793745436``id=`
后面的数字即为uid
后面的数字即为 uid