📝 在文档和log中强调bison网页后台网址不能直接访问,并优化部分文档的表达 (#235)

This commit is contained in:
AzideCupric 2023-04-12 10:49:58 +08:00 committed by GitHub
parent acd7fb1485
commit ce950ac4ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 99 additions and 23 deletions

View File

@ -75,7 +75,7 @@ sidebar: auto
直接克隆源代码需要自行编译前端,否则会出现无法使用管理后台等情况。
:::
::: danger
本项目中使用了 Python 3.9 的语法,如果出现问题,请检查 Python 版本
本项目中使用了 Python 3.10 的语法,如果出现问题,请检查 Python 版本
:::
1. 首先安装 poetry[安装方法](https://python-poetry.org/docs/#installation)
@ -88,6 +88,10 @@ sidebar: auto
### 作为插件使用
本部分假设大家会部署 nonebot2
::: tip
参考教程 [nonebot2 部署](https://v2.nonebot.dev/docs/quick-start)
参考视频教程 [保姆级新手教学 - Well404](https://www.bilibili.com/video/BV1984y1b7JY)
:::
#### 手动安装
@ -122,6 +126,9 @@ sidebar: auto
- `BISON_OUTER_URL`: 从外部访问服务器的地址,默认为`http://localhost:8080/bison/`,如果你的插件部署
在服务器上,建议配置为`http://<你的服务器ip>:8080/bison/`
::: warning
请注意,该网址**并不能直接访问**Bison 的后台管理网页,正确的访问方法请参见[私聊机器人获取后台地址](#私聊机器人获取后台地址)
:::
::: tip
如果需要从外网或者 Docker 容器外访问后台页面,请确保`HOST=0.0.0.0`
:::
- `BISON_FILTER_LOG`: 是否过滤来自`nonebot`的 warning 级以下的 log如果你的 bot 只运行了这个插件可以考虑
@ -179,16 +186,18 @@ sidebar: auto
#### 私聊机器人获取后台地址
`后台管理`,之后点击返回的链接
如果你是 superuser那么你可以管理所有群的订阅
如果你是 bot 所在的群的其中部分群的管理,你可以管理你管理的群里的订阅;
如果你不是任意一个群的管理,那么 bot 将会报错。
要管理订阅,请输入`后台管理`命令,然后点击回复中的链接。你的管理权限取决于你的身份:
- 如果你是 superuser你可以管理所有群的订阅
- 如果你是某些群的管理员,你可以管理这些群的订阅;
- 如果你不是任何群的管理员bot 会提示你无法执行此操作。
::: tip
可以和 bot 通过临时聊天触发
:::
::: warning
网页的身份鉴别机制全部由 bot 返回的链接确定,所以这个链接并不能透露给别人。
并且链接会过期,所以一段时间后需要重新私聊 bot 获取新的链接。
bot 返回的链接是网页的唯一身份凭证,不要泄露给他人。
链接有时效性,过期后需重新向 bot 索取新链接。
:::
#### 私聊机器人进行配置(需要 SUPERUER 权限)
@ -250,26 +259,26 @@ RSS 链接即为 uid
### 平台订阅标签Tag
社交平台中的 Tag 一般指使用井号(`#`)作为前缀,将关键词进行标记,方便用户进行搜索的功能。
子:`#明日方舟# #每日打卡#weibo、bilibili #baracampTwitter`
Tag 是社交平台中一种常见的功能,它用井号(#)作为前缀,标记关键词,方便用户搜索相关内容。
如:`#明日方舟# #每日打卡#(微博、哔哩哔哩) #baracamp推特`
在 Bison 中,用户在添加平台账号订阅时(如果该平台提供有 hashtag 功能),
会进行`输入需要订阅/屏蔽tag`的步骤
在 Bison 中,用户可以在添加平台账号订阅时(如果该平台支持 hashtag 功能),
选择需要订阅或屏蔽的 Tag
如果需要订阅某些 tag需要直接向 bison 发送需要订阅的一系列 tag并使用空格进行分隔。
例:`A1行动预备组 罗德厨房——回甘`
订阅 Tag 的方法是直接向 Bison 发送一系列 Tag用空格分隔。
`A1行动预备组 罗德厨房——回甘`
如果需要屏蔽某些 tag需要在需要屏蔽的 tag 前加上前缀`~`,对于复数的 tag使用空格进行分隔。
例:`~123罗德岛 ~莱茵生命漫画`
屏蔽 Tag 的方法是在 Tag 前加上前缀~,也用空格分隔。
`~123罗德岛 ~莱茵生命漫画`
可以综合运用以上规则进行同时订阅/屏蔽
例:`A1行动预备组 ~123罗德岛 罗德厨房——回甘 ~莱茵生命漫画`
订阅和屏蔽的 Tag 可以同时使用,按照上述方法发送即可
`A1行动预备组 ~123罗德岛 罗德厨房——回甘 ~莱茵生命漫画`
#### Tag 的推送规则
每当 Bison 抓取到一条推送,推送中的 Tag 会经过一下检查
Bison 在处理每条推送时,会按照以下规则检查推送中的 Tag
- Bison 会对**需屏蔽 Tag**进行最优先检查,只要检测到本次推送中存在**任一**已记录的**需屏蔽 tag**Bison 便会将该推送丢弃
- 上一个检查通过后Bison 会对**需订阅 tag**进行检查,如果本次推送中存在**任一**已记录的**需订阅 tag**Bison 便会将该推送发送到群中
- 当已记录的**需订阅 tag**为空时,只要通过了*第一条规则*的检查Bison 就会将该推送发送到群中。
- 当已记录的**需订阅 tag**不为空时,即使通过了*第一条规则*的检查,若本次推送不含**任何**已记录的**需订阅 tag**Bison 也会将该推送丢弃
- 如果推送中含有任何已记录的**需屏蔽 Tag**Bison 会直接**丢弃**该推送,不进行后续检查
- 如果推送中含有任何已记录的**需订阅 Tag**Bison 会将该推送发送到群中,不管是否有其他 Tag
- 如果**没有记录**任何需订阅 TagBison 会将所有通过第一条规则检查的推送发送到群中。
- 如果记录了至少一个需订阅 TagBison 会**丢弃所有**不含任何需订阅 Tag 的推送,即使通过了第一条规则检查

View File

@ -63,9 +63,10 @@ def init_fastapi():
if host in ["0.0.0.0", "127.0.0.1"]:
host = "localhost"
logger.opt(colors=True).info(
f"Nonebot test frontend will be running at: "
f"Nonebot Bison frontend will be running at: "
f"<b><u>http://{host}:{port}/bison</u></b>"
)
logger.opt(colors=True).info(f"该页面不能被直接访问请私聊bot <b><u>后台管理</u></b> 以获取可访问地址")
def register_get_token_handler():

66
tests/test_admin_page.py Normal file
View File

@ -0,0 +1,66 @@
from pathlib import Path
from unittest.mock import patch
import pytest
from nonebug import App
from .utils import fake_admin_user, fake_private_message_event
@pytest.mark.asyncio
async def test_command(app: App):
from nonebot.adapters.onebot.v11.bot import Bot
from nonebot.adapters.onebot.v11.message import Message
from nonebot_bison.admin_page import register_get_token_handler
from nonebot_bison.admin_page.token_manager import token_manager as tm
from nonebot_bison.plugin_config import plugin_config
with patch.object(tm, "get_user_token", return_value="test_token"):
register_get_token_handler()
async with app.test_matcher() as ctx:
bot = ctx.create_bot(base=Bot)
event_1 = fake_private_message_event(
message=Message("后台管理"),
sender=fake_admin_user,
to_me=True,
)
ctx.receive_event(bot, event_1)
ctx.should_call_send(
event_1, f"请访问: {plugin_config.bison_outer_url}auth/test_token", True
)
ctx.should_finished()
event_2 = fake_private_message_event(
message=Message("管理后台"), sender=fake_admin_user, to_me=True
)
ctx.receive_event(bot, event_2)
ctx.should_call_send(
event_2, f"请访问: {plugin_config.bison_outer_url}auth/test_token", True
)
ctx.should_finished()
@pytest.mark.asyncio
async def test_log(app: App, tmp_path: Path):
import contextlib
import io
from nonebot.log import default_format, logger
from nonebot_bison.admin_page import init_fastapi
log_path = tmp_path / "temp.log"
logger.add(log_path, level="INFO", format=default_format, rotation="1 day")
with contextlib.redirect_stderr(io.StringIO()) as f:
init_fastapi()
with log_path.open("r", encoding="utf-8") as f:
log = f.read()
assert "Nonebot Bison frontend will be running at" in log
assert "该页面不能被直接访问请私聊bot 后台管理 以获取可访问地址" in log