forked from mttu-developers/konabot
添加一些权限目标
This commit is contained in:
@ -39,7 +39,7 @@ steps:
|
|||||||
commands:
|
commands:
|
||||||
- docker run --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python scripts/test_plugin_load.py
|
- docker run --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python scripts/test_plugin_load.py
|
||||||
- docker run --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python scripts/test_playwright.py
|
- docker run --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python scripts/test_playwright.py
|
||||||
- docker run --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python -m pytest --cov=./konabot/ --cov-report term-missing:skip-covered
|
- docker run -v ./tests:/app/tests:ro --rm gitea.service.jazzwhom.top/mttu-developers/konabot:nightly-${DRONE_COMMIT_SHA} python -m pytest --cov=./konabot/ --cov-report term-missing:skip-covered
|
||||||
- name: 发送构建结果到 ntfy
|
- name: 发送构建结果到 ntfy
|
||||||
image: parrazam/drone-ntfy
|
image: parrazam/drone-ntfy
|
||||||
when:
|
when:
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from nonebot import get_plugin_config, on_message
|
from nonebot import get_plugin_config, on_message
|
||||||
|
from nonebot.rule import Rule
|
||||||
from nonebot_plugin_alconna import Reference, Reply, UniMsg
|
from nonebot_plugin_alconna import Reference, Reply, UniMsg
|
||||||
|
|
||||||
from nonebot.adapters import Event
|
from nonebot.adapters import Event
|
||||||
from nonebot.adapters.onebot.v11.event import GroupMessageEvent as OB11GroupEvent
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from konabot.common.permsys import require_permission
|
||||||
|
|
||||||
|
|
||||||
class Config(BaseModel):
|
class Config(BaseModel):
|
||||||
bilifetch_enabled_groups: list[int] = []
|
bilifetch_enabled_groups: list[int] = []
|
||||||
@ -19,11 +21,7 @@ pattern = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def _rule(msg: UniMsg, evt: Event) -> bool:
|
def _rule(msg: UniMsg) -> bool:
|
||||||
if isinstance(evt, OB11GroupEvent):
|
|
||||||
if evt.group_id not in config.bilifetch_enabled_groups:
|
|
||||||
return False
|
|
||||||
|
|
||||||
to_search = msg.exclude(Reply, Reference).dump(json=True)
|
to_search = msg.exclude(Reply, Reference).dump(json=True)
|
||||||
to_search2 = msg.exclude(Reply, Reference).extract_plain_text()
|
to_search2 = msg.exclude(Reply, Reference).extract_plain_text()
|
||||||
if not re.search(pattern, to_search) and not re.search(pattern, to_search2):
|
if not re.search(pattern, to_search) and not re.search(pattern, to_search2):
|
||||||
@ -31,11 +29,11 @@ def _rule(msg: UniMsg, evt: Event) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
matcher_fix = on_message(rule=_rule)
|
matcher_fix = on_message(rule=Rule(_rule) & require_permission("bilifetch"))
|
||||||
|
|
||||||
|
|
||||||
@matcher_fix.handle()
|
@matcher_fix.handle()
|
||||||
async def _(event: Event):
|
async def _(event: Event):
|
||||||
from nonebot_plugin_analysis_bilibili import handle_analysis
|
from nonebot_plugin_analysis_bilibili import handle_analysis
|
||||||
|
|
||||||
await handle_analysis(event)
|
await handle_analysis(event)
|
||||||
|
|
||||||
|
|||||||
@ -70,8 +70,8 @@ async def _(msg: UniMsg, evt: Event, bot: Bot, target: DepLongTaskTarget):
|
|||||||
await target.send_message(res)
|
await target.send_message(res)
|
||||||
return
|
return
|
||||||
|
|
||||||
env = TextHandlerEnvironment(is_trusted=False)
|
env = TextHandlerEnvironment(is_trusted=False, event=evt)
|
||||||
results = await runner.run_pipeline(res, istream or None, env)
|
results = await runner.run_pipeline(res, istream or None, evt, env)
|
||||||
|
|
||||||
# 检查是否有错误
|
# 检查是否有错误
|
||||||
for r in results:
|
for r in results:
|
||||||
|
|||||||
@ -7,11 +7,13 @@ from string import whitespace
|
|||||||
from typing import cast
|
from typing import cast
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
from nonebot.adapters import Event
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class TextHandlerEnvironment:
|
class TextHandlerEnvironment:
|
||||||
is_trusted: bool
|
is_trusted: bool
|
||||||
|
event: Event | None = None
|
||||||
buffers: dict[str, str] = field(default_factory=dict)
|
buffers: dict[str, str] = field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
@ -287,7 +289,7 @@ class PipelineRunner:
|
|||||||
env: TextHandlerEnvironment | None = None,
|
env: TextHandlerEnvironment | None = None,
|
||||||
) -> list[TextHandleResult]:
|
) -> list[TextHandleResult]:
|
||||||
if env is None:
|
if env is None:
|
||||||
env = TextHandlerEnvironment(is_trusted=False, buffers={})
|
env = TextHandlerEnvironment(is_trusted=False, event=None, buffers={})
|
||||||
|
|
||||||
results: list[TextHandleResult] = []
|
results: list[TextHandleResult] = []
|
||||||
|
|
||||||
|
|||||||
@ -1,36 +1,51 @@
|
|||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
from konabot.common.llm import get_llm
|
from konabot.common.llm import get_llm
|
||||||
from konabot.plugins.handle_text.base import TextHandler, TextHandlerEnvironment, TextHandleResult
|
from konabot.common.permsys import perm_manager
|
||||||
|
from konabot.plugins.handle_text.base import (
|
||||||
|
TextHandler,
|
||||||
|
TextHandlerEnvironment,
|
||||||
|
TextHandleResult,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class THQwen(TextHandler):
|
class THQwen(TextHandler):
|
||||||
name = "qwen"
|
name = "qwen"
|
||||||
|
|
||||||
async def handle(self, env: TextHandlerEnvironment, istream: str | None, args: list[str]) -> TextHandleResult:
|
async def handle(
|
||||||
|
self, env: TextHandlerEnvironment, istream: str | None, args: list[str]
|
||||||
|
) -> TextHandleResult:
|
||||||
|
pm = perm_manager()
|
||||||
|
if env.event is None or not pm.check_has_permission(env.event, "textfx.qwen"):
|
||||||
|
return TextHandleResult(
|
||||||
|
code=1,
|
||||||
|
ostream="这里暂未开启 AI 功能",
|
||||||
|
)
|
||||||
|
|
||||||
llm = get_llm()
|
llm = get_llm()
|
||||||
messages = []
|
messages = []
|
||||||
|
|
||||||
if istream is not None:
|
if istream is not None:
|
||||||
messages.append({
|
messages.append({"role": "user", "content": istream})
|
||||||
"role": "user",
|
|
||||||
"content": istream
|
|
||||||
})
|
|
||||||
if len(args) > 0:
|
if len(args) > 0:
|
||||||
message = ' '.join(args)
|
message = " ".join(args)
|
||||||
messages.append({
|
messages.append(
|
||||||
"role": "user",
|
{
|
||||||
"content": message,
|
"role": "user",
|
||||||
})
|
"content": message,
|
||||||
|
}
|
||||||
|
)
|
||||||
if len(messages) == 0:
|
if len(messages) == 0:
|
||||||
return TextHandleResult(
|
return TextHandleResult(
|
||||||
code=1,
|
code=1,
|
||||||
ostream="使用方法:qwen <提示词>",
|
ostream="使用方法:qwen <提示词>",
|
||||||
)
|
)
|
||||||
|
|
||||||
messages = [{
|
messages = [
|
||||||
"role": "system",
|
{
|
||||||
"content": "除非用户要求,请尽可能短点回答。另外,当前环境不支持 Markdown 语法,如果可以,请使用纯文本回答"
|
"role": "system",
|
||||||
}] + messages
|
"content": "除非用户要求,请尽可能短点回答。另外,当前环境不支持 Markdown 语法,如果可以,请使用纯文本回答",
|
||||||
|
}
|
||||||
|
] + messages
|
||||||
result = await llm.chat(cast(Any, messages))
|
result = await llm.chat(cast(Any, messages))
|
||||||
content = result.content
|
content = result.content
|
||||||
if content is None:
|
if content is None:
|
||||||
|
|||||||
@ -4,11 +4,16 @@ import mcstatus
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.adapters import Event
|
from nonebot.adapters import Event
|
||||||
from nonebot_plugin_alconna import UniMessage
|
from nonebot_plugin_alconna import UniMessage
|
||||||
from konabot.common.nb.is_admin import is_admin
|
|
||||||
from mcstatus.responses import JavaStatusResponse
|
from mcstatus.responses import JavaStatusResponse
|
||||||
|
|
||||||
|
from konabot.common.permsys import require_permission
|
||||||
|
|
||||||
cmd = on_command("宾几人", aliases=set(("宾人数", "mcbingo")), rule=is_admin)
|
|
||||||
|
cmd = on_command(
|
||||||
|
"宾几人",
|
||||||
|
aliases=set(("宾人数", "mcbingo")),
|
||||||
|
rule=require_permission("minecraft.bingo.check"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def parse_status(motd: str) -> str:
|
def parse_status(motd: str) -> str:
|
||||||
@ -48,10 +53,11 @@ async def _(evt: Event):
|
|||||||
*map(lambda s: s[0].async_status(), servers),
|
*map(lambda s: s[0].async_status(), servers),
|
||||||
return_exceptions=True,
|
return_exceptions=True,
|
||||||
)
|
)
|
||||||
messages = "\n".join((
|
messages = "\n".join(
|
||||||
dump_server_status(n, r)
|
(
|
||||||
for n, r in zip(map(lambda s: s[1], servers), responses)
|
dump_server_status(n, r)
|
||||||
))
|
for n, r in zip(map(lambda s: s[1], servers), responses)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
await UniMessage.text(messages).finish(evt, at_sender=False)
|
await UniMessage.text(messages).finish(evt, at_sender=False)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user