From 9055a039a83c030efd90e2033d1c35877c2815ab Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Sat, 12 Feb 2022 10:22:19 +0800 Subject: [PATCH] format md --- README.md | 75 ++++++++------- docs/README.md | 12 +-- docs/dev/README.md | 60 +++++++----- docs/usage/README.md | 218 ++++++++++++++++++++++++++----------------- 4 files changed, 215 insertions(+), 150 deletions(-) diff --git a/README.md b/README.md index 9cb8798..d3c6348 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,85 @@

Bison
通用订阅推送插件

- [![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) +
## 简介 -一款自动爬取各种站点,社交平台更新动态,并将信息推送到QQ的机器人。 -基于 [`NoneBot2`](https://github.com/nonebot/nonebot2 ) 开发(诞生于明日方舟的蹲饼活动) + +一款自动爬取各种站点,社交平台更新动态,并将信息推送到 QQ 的机器人。 +基于 [`NoneBot2`](https://github.com/nonebot/nonebot2) 开发(诞生于明日方舟的蹲饼活动) +
本项目原名原名nonebot-hk-reporter -寓意本Bot要做全世界跑的最快的搬运机器人,后因名字过于暴力改名 +寓意本 Bot 要做全世界跑的最快的搬运机器人,后因名字过于暴力改名
本项目名称来源于明日方舟角色拜松——一名龙门的信使,曾经骑自行车追上骑摩托车的德克萨斯 支持的平台: -* 微博 -* B站 -* RSS -* 明日方舟 - * 塞壬唱片新闻 - * 游戏内公告 - * 版本更新等通知 -* 网易云音乐 - * 歌手发布新专辑 - * 电台更新 +- 微博 +- Bilibili +- RSS +- 明日方舟 + - 塞壬唱片新闻 + - 游戏内公告 + - 版本更新等通知 +- 网易云音乐 + - 歌手发布新专辑 + - 电台更新 ## 功能 -* 定时爬取指定网站 -* 通过图片发送文本,防止风控 -* 使用队列限制发送频率 -* 使用网页后台管理Bot订阅 + +- 定时爬取指定网站 +- 通过图片发送文本,防止风控 +- 使用队列限制发送频率 +- 使用网页后台管理 Bot 订阅 ## 使用方法 -**!!注意,如果要使用后台管理功能请使用pypi版本或者docker版本,如果直接clone源代码 -需要按下面方式进行build** + +**!!注意,如果要使用后台管理功能请使用 pypi 版本或者 docker 版本,如果直接 clone 源代码 +需要按下面方式进行 build** + ```bash cd ./admin-frontend yarn && yarn build ``` -可以使用Docker,docker-compose,作为插件安装在nonebot中,或者直接运行 + +可以使用 Docker,docker-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 diff --git a/docs/README.md b/docs/README.md index d79be20..704fce1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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 --- diff --git a/docs/dev/README.md b/docs/dev/README.md index 5137a79..d2dc9f9 100644 --- a/docs/dev/README.md +++ b/docs/dev/README.md @@ -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 的机制有一定了解,当然, 依葫芦画瓢也是足够的 ::: ## 类的方法与成员变量 + ## 方法与变量的定义 diff --git a/docs/usage/README.md b/docs/usage/README.md index 558b078..57ad323 100644 --- a/docs/usage/README.md +++ b/docs/usage/README.md @@ -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) - 将其中的``改成自己的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账号 - password: "" # 密码为空时使用扫码登录 + 将其中的``改成自己的 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账号 + password: "" # 密码为空时使用扫码登录 + + 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:`,例如`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:`,例如`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