mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-09-03 22:52:25 +08:00
update
This commit is contained in:
parent
80e5e721b3
commit
af17b5042b
@ -30,3 +30,11 @@
|
|||||||
|
|
||||||
## [0.4.1] - 2021-11-31
|
## [0.4.1] - 2021-11-31
|
||||||
- 加入了管理后台
|
- 加入了管理后台
|
||||||
|
|
||||||
|
## [0.4.2]
|
||||||
|
并没有做什么只是为了修复前端文件没有正确打包的问题开了个新的版本号
|
||||||
|
推上pypi
|
||||||
|
|
||||||
|
## [0.4.3]
|
||||||
|
- 使用playwright替换pypeteer(大概能修复渲染失败图片之后CPU跑满的问题)
|
||||||
|
- 增加了help插件`nonebot-plugin-help`
|
||||||
|
1
bot.py
1
bot.py
@ -8,6 +8,7 @@ driver = nonebot.get_driver()
|
|||||||
driver.register_adapter('cqhttp', CQHTTPBot)
|
driver.register_adapter('cqhttp', CQHTTPBot)
|
||||||
|
|
||||||
nonebot.load_builtin_plugins()
|
nonebot.load_builtin_plugins()
|
||||||
|
nonebot.load_plugin('nonebot_plugin_help')
|
||||||
nonebot.load_plugins('src/plugins')
|
nonebot.load_plugins('src/plugins')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
18
poetry.lock
generated
18
poetry.lock
generated
@ -439,6 +439,18 @@ python-versions = ">=3.7.3,<4.0.0"
|
|||||||
httpx = ">=0.18.0,<1.0.0"
|
httpx = ">=0.18.0,<1.0.0"
|
||||||
nonebot2 = ">=2.0.0-alpha.14,<3.0.0"
|
nonebot2 = ">=2.0.0-alpha.14,<3.0.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nonebot-plugin-help"
|
||||||
|
version = "0.1.5"
|
||||||
|
description = "A general help lister for nonebot2 plugins"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7.3,<4.0.0"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
nonebot-adapter-cqhttp = ">=2.0.0a16,<3.0.0"
|
||||||
|
nonebot2 = ">=2.0.0.a16,<3.0.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nonebot2"
|
name = "nonebot2"
|
||||||
version = "2.0.0a16"
|
version = "2.0.0a16"
|
||||||
@ -939,7 +951,7 @@ dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"]
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.9"
|
python-versions = "^3.9"
|
||||||
content-hash = "a12ba453cb761ccbc97a694a0de4d3acf4e9c88bb4650203acbeaaf0d762b3c1"
|
content-hash = "6258435dbcdc3a69af258a1dc3dee54e55cc14dba81521aa33eb54236570d882"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
aiofiles = [
|
aiofiles = [
|
||||||
@ -1194,6 +1206,10 @@ nonebot-adapter-cqhttp = [
|
|||||||
{file = "nonebot-adapter-cqhttp-2.0.0a16.tar.gz", hash = "sha256:9de270291b98c41a45e5b629c02f16e3b25cafb3867b8161851f49c84145d8aa"},
|
{file = "nonebot-adapter-cqhttp-2.0.0a16.tar.gz", hash = "sha256:9de270291b98c41a45e5b629c02f16e3b25cafb3867b8161851f49c84145d8aa"},
|
||||||
{file = "nonebot_adapter_cqhttp-2.0.0a16-py3-none-any.whl", hash = "sha256:831747c55c9c1a660215225f84784a4ca275a84bffa8d1312524367066b68bbe"},
|
{file = "nonebot_adapter_cqhttp-2.0.0a16-py3-none-any.whl", hash = "sha256:831747c55c9c1a660215225f84784a4ca275a84bffa8d1312524367066b68bbe"},
|
||||||
]
|
]
|
||||||
|
nonebot-plugin-help = [
|
||||||
|
{file = "nonebot-plugin-help-0.1.5.tar.gz", hash = "sha256:2ef8c0f8b578c7941e364396532749cabb4d52872ddc4a0419db3cd103223e60"},
|
||||||
|
{file = "nonebot_plugin_help-0.1.5-py3-none-any.whl", hash = "sha256:1c4bb626feb202515f47311e3ca9872ab6c0db5e935bc9561325fcc1a2591511"},
|
||||||
|
]
|
||||||
nonebot2 = [
|
nonebot2 = [
|
||||||
{file = "nonebot2-2.0.0a16-py3-none-any.whl", hash = "sha256:88596c154143fc2203a50d224bacf4e2e5be1b4142fd92e645c40258e5819924"},
|
{file = "nonebot2-2.0.0a16-py3-none-any.whl", hash = "sha256:88596c154143fc2203a50d224bacf4e2e5be1b4142fd92e645c40258e5819924"},
|
||||||
{file = "nonebot2-2.0.0a16.tar.gz", hash = "sha256:f70475e0a9525ed22cc082e35b06145b005412f919880a862e72059a84b0d2d0"},
|
{file = "nonebot2-2.0.0a16.tar.gz", hash = "sha256:f70475e0a9525ed22cc082e35b06145b005412f919880a862e72059a84b0d2d0"},
|
||||||
|
@ -37,6 +37,7 @@ pyjwt = "^2.1.0"
|
|||||||
aiofiles = "^0.7.0"
|
aiofiles = "^0.7.0"
|
||||||
python-socketio = "^5.4.0"
|
python-socketio = "^5.4.0"
|
||||||
playwright = "^1.17.2"
|
playwright = "^1.17.2"
|
||||||
|
nonebot-plugin-help = "^0.1.5"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
ipdb = "^0.13.4"
|
ipdb = "^0.13.4"
|
||||||
|
@ -9,3 +9,8 @@ from . import platform
|
|||||||
from . import types
|
from . import types
|
||||||
from . import utils
|
from . import utils
|
||||||
from . import admin_page
|
from . import admin_page
|
||||||
|
|
||||||
|
__help__version__ = '0.4.3'
|
||||||
|
__help__plugin__name__ = 'nonebot_bison'
|
||||||
|
__usage__ = ('本bot可以提供b站、微博等社交媒体的消息订阅,详情'
|
||||||
|
'请查看本bot文档,或者at本bot发送“添加订阅”订阅第一个帐号')
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
|
||||||
import os
|
import os
|
||||||
|
from pathlib import Path
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi.templating import Jinja2Templates
|
|
||||||
from nonebot import get_driver, on_command
|
from nonebot import get_driver, on_command
|
||||||
import nonebot
|
|
||||||
from nonebot.adapters.cqhttp.bot import Bot
|
from nonebot.adapters.cqhttp.bot import Bot
|
||||||
from nonebot.adapters.cqhttp.event import GroupMessageEvent, PrivateMessageEvent
|
from nonebot.adapters.cqhttp.event import GroupMessageEvent, PrivateMessageEvent
|
||||||
from nonebot.drivers.fastapi import Driver
|
from nonebot.drivers.fastapi import Driver
|
||||||
@ -14,14 +12,20 @@ from nonebot.log import logger
|
|||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.typing import T_State
|
from nonebot.typing import T_State
|
||||||
import socketio
|
import socketio
|
||||||
import functools
|
|
||||||
|
|
||||||
from starlette.requests import Request
|
|
||||||
|
|
||||||
from .api import del_group_sub, test, get_global_conf, auth, get_subs_info, get_target_name, add_group_sub, update_group_sub
|
|
||||||
from .token_manager import token_manager as tm
|
|
||||||
from .jwt import load_jwt
|
|
||||||
from ..plugin_config import plugin_config
|
from ..plugin_config import plugin_config
|
||||||
|
from .api import (
|
||||||
|
add_group_sub,
|
||||||
|
auth,
|
||||||
|
del_group_sub,
|
||||||
|
get_global_conf,
|
||||||
|
get_subs_info,
|
||||||
|
get_target_name,
|
||||||
|
test,
|
||||||
|
update_group_sub,
|
||||||
|
)
|
||||||
|
from .jwt import load_jwt
|
||||||
|
from .token_manager import token_manager as tm
|
||||||
|
|
||||||
URL_BASE = '/bison/'
|
URL_BASE = '/bison/'
|
||||||
GLOBAL_CONF_URL = f'{URL_BASE}api/global_conf'
|
GLOBAL_CONF_URL = f'{URL_BASE}api/global_conf'
|
||||||
@ -122,9 +126,11 @@ if (STATIC_PATH / 'index.html').exists():
|
|||||||
|
|
||||||
get_token = on_command('后台管理', rule=to_me(), priority=5)
|
get_token = on_command('后台管理', rule=to_me(), priority=5)
|
||||||
@get_token.handle()
|
@get_token.handle()
|
||||||
async def send_token(bot: "Bot", event: PrivateMessageEvent, state: T_State):
|
async def send_token(_: "Bot", event: PrivateMessageEvent, state: T_State):
|
||||||
driver = nonebot.get_driver()
|
|
||||||
token = tm.get_user_token((event.get_user_id(), event.sender.nickname))
|
token = tm.get_user_token((event.get_user_id(), event.sender.nickname))
|
||||||
await get_token.finish(f'请访问: {plugin_config.bison_outer_url}auth/{token}')
|
await get_token.finish(f'请访问: {plugin_config.bison_outer_url}auth/{token}')
|
||||||
|
get_token.__help__name__ = '获取后台管理地址'
|
||||||
|
get_token.__help__info__ = ('获取管理bot后台的地址,该地址会'
|
||||||
|
'在一段时间过后过期,请不要泄漏该地址')
|
||||||
else:
|
else:
|
||||||
logger.warning("Frontend file not found, please compile it or use docker or pypi version")
|
logger.warning("Frontend file not found, please compile it or use docker or pypi version")
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from ..platform import platform_manager, check_sub_target
|
|
||||||
from .token_manager import token_manager
|
|
||||||
from .jwt import pack_jwt
|
|
||||||
from ..config import Config, NoSuchSubscribeException, NoSuchUserException
|
|
||||||
import nonebot
|
import nonebot
|
||||||
from nonebot.adapters.cqhttp.bot import Bot
|
from nonebot.adapters.cqhttp.bot import Bot
|
||||||
|
|
||||||
|
from ..config import Config, NoSuchSubscribeException, NoSuchUserException
|
||||||
|
from ..platform import check_sub_target, platform_manager
|
||||||
|
from .jwt import pack_jwt
|
||||||
|
from .token_manager import token_manager
|
||||||
|
|
||||||
async def test():
|
async def test():
|
||||||
return {"status": 200, "text": "test"}
|
return {"status": 200, "text": "test"}
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ async def get_target_name(platform_name: str, target: str, jwt_obj: dict):
|
|||||||
return {'targetName': await check_sub_target(platform_name, target)}
|
return {'targetName': await check_sub_target(platform_name, target)}
|
||||||
|
|
||||||
async def add_group_sub(group_number: str, platform_name: str, target: str,
|
async def add_group_sub(group_number: str, platform_name: str, target: str,
|
||||||
target_name: str, cats: list[str], tags: list[str]):
|
target_name: str, cats: list[int], tags: list[str]):
|
||||||
config = Config()
|
config = Config()
|
||||||
config.add_subscribe(int(group_number), 'group', target, target_name, platform_name, cats, tags)
|
config.add_subscribe(int(group_number), 'group', target, target_name, platform_name, cats, tags)
|
||||||
return { 'status': 200, 'msg': '' }
|
return { 'status': 200, 'msg': '' }
|
||||||
@ -103,7 +104,7 @@ async def del_group_sub(group_number: str, platform_name: str, target: str):
|
|||||||
|
|
||||||
|
|
||||||
async def update_group_sub(group_number: str, platform_name: str, target: str,
|
async def update_group_sub(group_number: str, platform_name: str, target: str,
|
||||||
target_name: str, cats: list[str], tags: list[str]):
|
target_name: str, cats: list[int], tags: list[str]):
|
||||||
config = Config()
|
config = Config()
|
||||||
try:
|
try:
|
||||||
config.update_subscribe(int(group_number), 'group',
|
config.update_subscribe(int(group_number), 'group',
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
from nonebot import logger, on_command
|
from nonebot import logger, on_command
|
||||||
|
from nonebot.adapters._bot import Bot as AbstractBot
|
||||||
|
from nonebot.adapters._event import Event as AbstractEvent
|
||||||
from nonebot.adapters.cqhttp import Bot, Event, GroupMessageEvent
|
from nonebot.adapters.cqhttp import Bot, Event, GroupMessageEvent
|
||||||
from nonebot.adapters.cqhttp.message import Message
|
from nonebot.adapters.cqhttp.message import Message
|
||||||
from nonebot.adapters.cqhttp.permission import GROUP_ADMIN, GROUP_MEMBER, GROUP_OWNER
|
from nonebot.adapters.cqhttp.permission import GROUP_ADMIN, GROUP_MEMBER, GROUP_OWNER
|
||||||
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.permission import Permission, SUPERUSER
|
from nonebot.permission import Permission, SUPERUSER
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.typing import T_State
|
from nonebot.typing import T_State
|
||||||
from nonebot.matcher import Matcher
|
|
||||||
|
|
||||||
from .config import Config, NoSuchSubscribeException
|
from .config import Config, NoSuchSubscribeException
|
||||||
from .platform import platform_manager, check_sub_target
|
from .platform import check_sub_target, platform_manager
|
||||||
from .utils import parse_text
|
|
||||||
from .types import Target
|
from .types import Target
|
||||||
|
from .utils import parse_text
|
||||||
|
|
||||||
def _gen_prompt_template(prompt: str):
|
def _gen_prompt_template(prompt: str):
|
||||||
if hasattr(Message, 'template'):
|
if hasattr(Message, 'template'):
|
||||||
@ -38,7 +41,7 @@ def do_add_sub(add_sub: Type[Matcher]):
|
|||||||
for platform_name in common_platform]) + \
|
for platform_name in common_platform]) + \
|
||||||
'要查看全部平台请输入:“全部”'
|
'要查看全部平台请输入:“全部”'
|
||||||
|
|
||||||
async def parse_platform(bot: Bot, event: Event, state: T_State) -> None:
|
async def parse_platform(bot: AbstractBot, event: AbstractEvent, state: T_State) -> None:
|
||||||
platform = str(event.get_message()).strip()
|
platform = str(event.get_message()).strip()
|
||||||
if platform == '全部':
|
if platform == '全部':
|
||||||
message = '全部平台\n' + \
|
message = '全部平台\n' + \
|
||||||
@ -59,7 +62,7 @@ def do_add_sub(add_sub: Type[Matcher]):
|
|||||||
state['id'] = 'default'
|
state['id'] = 'default'
|
||||||
state['name'] = await platform_manager[state['platform']].get_target_name(Target(''))
|
state['name'] = await platform_manager[state['platform']].get_target_name(Target(''))
|
||||||
|
|
||||||
async def parse_id(bot: Bot, event: Event, state: T_State):
|
async def parse_id(bot: AbstractBot, event: AbstractEvent, state: T_State):
|
||||||
target = str(event.get_message()).strip()
|
target = str(event.get_message()).strip()
|
||||||
name = await check_sub_target(state['platform'], target)
|
name = await check_sub_target(state['platform'], target)
|
||||||
if not name:
|
if not name:
|
||||||
@ -76,7 +79,7 @@ def do_add_sub(add_sub: Type[Matcher]):
|
|||||||
state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format(
|
state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format(
|
||||||
' '.join(list(platform_manager[state['platform']].categories.values())))
|
' '.join(list(platform_manager[state['platform']].categories.values())))
|
||||||
|
|
||||||
async def parser_cats(bot: Bot, event: Event, state: T_State):
|
async def parser_cats(bot: AbstractBot, event: AbstractEvent, state: T_State):
|
||||||
res = []
|
res = []
|
||||||
for cat in str(event.get_message()).strip().split():
|
for cat in str(event.get_message()).strip().split():
|
||||||
if cat not in platform_manager[state['platform']].reverse_category:
|
if cat not in platform_manager[state['platform']].reverse_category:
|
||||||
@ -92,7 +95,7 @@ def do_add_sub(add_sub: Type[Matcher]):
|
|||||||
return
|
return
|
||||||
state['_prompt'] = '请输入要订阅的tag,订阅所有tag输入"全部标签"'
|
state['_prompt'] = '请输入要订阅的tag,订阅所有tag输入"全部标签"'
|
||||||
|
|
||||||
async def parser_tags(bot: Bot, event: Event, state: T_State):
|
async def parser_tags(bot: AbstractBot, event: AbstractEvent, state: T_State):
|
||||||
if str(event.get_message()).strip() == '全部标签':
|
if str(event.get_message()).strip() == '全部标签':
|
||||||
state['tags'] = []
|
state['tags'] = []
|
||||||
else:
|
else:
|
||||||
@ -155,7 +158,7 @@ def do_del_sub(del_sub: Type[Matcher]):
|
|||||||
else:
|
else:
|
||||||
await del_sub.finish('删除成功')
|
await del_sub.finish('删除成功')
|
||||||
|
|
||||||
async def parse_group_number(bot: Bot, event: Event, state: T_State):
|
async def parse_group_number(bot: AbstractBot, event: AbstractEvent, state: T_State):
|
||||||
state[state["_current_key"]] = int(str(event.get_message()))
|
state[state["_current_key"]] = int(str(event.get_message()))
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
from abc import abstractmethod, ABC
|
from abc import abstractmethod, ABC
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from functools import reduce
|
|
||||||
import time
|
import time
|
||||||
from typing import Any, Collection, Optional, Literal
|
from typing import Any, Collection, Optional, Literal
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user