mirror of
https://github.com/LiteyukiStudio/nonebot-plugin-marshoai.git
synced 2025-01-26 18:12:47 +08:00
✨ 添加日志输出以指示插件功能开发状态;移除未使用的函数注册模块
This commit is contained in:
parent
0704285cde
commit
6c6b45a168
@ -1,7 +1,11 @@
|
|||||||
"""该功能目前正在开发中,暂时不可用,受影响的文件夹 `plugin`, `plugins`
|
"""该功能目前正在开发中,暂时不可用,受影响的文件夹 `plugin`, `plugins`
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from nonebot import logger
|
||||||
|
|
||||||
from .func_call import *
|
from .func_call import *
|
||||||
from .load import *
|
from .load import *
|
||||||
from .models import *
|
from .models import *
|
||||||
from .utils import *
|
from .utils import *
|
||||||
|
|
||||||
|
logger.opt(colors=True).info("<y>MarshoAI 插件功能开发中,用户请忽略相关日志</y>")
|
||||||
|
@ -1,3 +1,2 @@
|
|||||||
from .caller import *
|
from .caller import *
|
||||||
from .params import *
|
from .params import *
|
||||||
from .register import *
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
from typing import Generic
|
from typing import Generic, TypeVar
|
||||||
|
|
||||||
|
from nonebot import logger
|
||||||
|
|
||||||
from ..typing import FUNCTION_CALL_FUNC
|
from ..typing import FUNCTION_CALL_FUNC
|
||||||
from .params import P
|
from .params import P
|
||||||
from .register import F
|
|
||||||
|
F = TypeVar("F", bound=FUNCTION_CALL_FUNC)
|
||||||
|
|
||||||
|
|
||||||
class Caller(Generic[P]):
|
class Caller(Generic[P]):
|
||||||
@ -60,6 +63,17 @@ class Caller(Generic[P]):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def __call__(self, func: F) -> F:
|
def __call__(self, func: F) -> F:
|
||||||
|
"""装饰函数,注册为一个可被AI调用的function call函数
|
||||||
|
|
||||||
|
Args:
|
||||||
|
func (F): 函数对象
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
F: 函数对象
|
||||||
|
"""
|
||||||
|
logger.opt(colors=True).info(
|
||||||
|
f"<y>加载函数 {func.__name__} {self._description}</y>"
|
||||||
|
)
|
||||||
self.func = func
|
self.func = func
|
||||||
return func
|
return func
|
||||||
|
|
||||||
@ -73,4 +87,5 @@ def on_function_call(name: str | None = None, description: str | None = None) ->
|
|||||||
Returns:
|
Returns:
|
||||||
Caller: Caller对象
|
Caller: Caller对象
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return Caller(name=name, description=description)
|
return Caller(name=name, description=description)
|
||||||
|
@ -1,126 +0,0 @@
|
|||||||
"""此模块用于获取function call中函数定义信息以及注册函数
|
|
||||||
"""
|
|
||||||
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from nonebot import logger
|
|
||||||
|
|
||||||
from ..docstring.parser import parse
|
|
||||||
from ..typing import (
|
|
||||||
ASYNC_FUNCTION_CALL_FUNC,
|
|
||||||
FUNCTION_CALL_FUNC,
|
|
||||||
SYNC_FUNCTION_CALL_FUNC,
|
|
||||||
)
|
|
||||||
from .params import *
|
|
||||||
|
|
||||||
F = TypeVar("F", bound=FUNCTION_CALL_FUNC)
|
|
||||||
|
|
||||||
_loaded_functions: dict[str, FUNCTION_CALL_FUNC] = {}
|
|
||||||
|
|
||||||
|
|
||||||
def async_wrapper(func: SYNC_FUNCTION_CALL_FUNC) -> ASYNC_FUNCTION_CALL_FUNC:
|
|
||||||
"""将同步函数包装为异步函数,但是不会真正异步执行,仅用于统一调用及函数签名
|
|
||||||
|
|
||||||
Args:
|
|
||||||
func: 同步函数
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
ASYNC_FUNCTION_CALL: 异步函数
|
|
||||||
"""
|
|
||||||
|
|
||||||
async def wrapper(*args, **kwargs) -> str:
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
def function_call(func: F) -> F:
|
|
||||||
"""返回一个装饰器,装饰一个函数, 使其注册为一个可被AI调用的function call函数
|
|
||||||
|
|
||||||
Args:
|
|
||||||
func: 函数对象,要有完整的 Google Style Docstring
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: 函数定义信息
|
|
||||||
"""
|
|
||||||
# TODO
|
|
||||||
# pre check docstring
|
|
||||||
if not func.__doc__:
|
|
||||||
logger.error(f"函数 {func.__name__} 没有文档字串,不被加载")
|
|
||||||
return func
|
|
||||||
else:
|
|
||||||
# 解析函数文档字串
|
|
||||||
result = parse(docstring=func.__doc__)
|
|
||||||
logger.debug(result.reduction())
|
|
||||||
return func
|
|
||||||
|
|
||||||
|
|
||||||
def caller(
|
|
||||||
description: str | None = None,
|
|
||||||
parameters: dict[str, P] | None = None,
|
|
||||||
):
|
|
||||||
"""返回一个装饰器,装饰一个函数, 使其注册为一个可被AI调用的function call函数
|
|
||||||
|
|
||||||
Args:
|
|
||||||
description: 函数描述
|
|
||||||
parameters: 函数参数
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: 函数定义信息
|
|
||||||
"""
|
|
||||||
|
|
||||||
def decorator(func: FUNCTION_CALL_FUNC) -> FUNCTION_CALL_FUNC:
|
|
||||||
# TODO
|
|
||||||
# pre check docstring
|
|
||||||
if not func.__doc__:
|
|
||||||
logger.error(f"函数 {func.__name__} 没有文档字串,不被加载")
|
|
||||||
return func
|
|
||||||
else:
|
|
||||||
# 解析函数文档字串
|
|
||||||
result = parse(docstring=func.__doc__)
|
|
||||||
logger.debug(result.reduction())
|
|
||||||
return func
|
|
||||||
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
|
|
||||||
# TODO 草案
|
|
||||||
# @caller(
|
|
||||||
# description="这个函数用来给你算命",
|
|
||||||
# parameters={
|
|
||||||
# "birthday": String(description="生日"),
|
|
||||||
# "gender": String(enum=["男", "女"], description="性别"),
|
|
||||||
# "name": String(description="姓名"),
|
|
||||||
# },
|
|
||||||
# )
|
|
||||||
# async def tell_fortune(birthday: str, name: str, gender: str) -> str:
|
|
||||||
# """这个函数用来给你算命
|
|
||||||
|
|
||||||
# Args:
|
|
||||||
# birthday: 生日
|
|
||||||
# name: 姓名
|
|
||||||
|
|
||||||
# Returns:
|
|
||||||
# str: 算命结果
|
|
||||||
# """
|
|
||||||
# return f"{name},你的生日是{birthday},你的运势是大吉大利"
|
|
||||||
|
|
||||||
|
|
||||||
@caller(
|
|
||||||
description="这个函数用来给你算命",
|
|
||||||
).parameters(
|
|
||||||
birthday=String(description="生日"),
|
|
||||||
name=String(enum=["男", "女"], description="性别"),
|
|
||||||
gender=String(description="姓名"),
|
|
||||||
)
|
|
||||||
async def tell_fortune(birthday: str, name: str, gender: str) -> str:
|
|
||||||
"""这个函数用来给你算命
|
|
||||||
|
|
||||||
Args:
|
|
||||||
birthday: 生日
|
|
||||||
name: 姓名
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: 算命结果
|
|
||||||
"""
|
|
||||||
return f"{name},你的生日是{birthday},你的运势是大吉大利"
|
|
@ -2,13 +2,7 @@ import traceback
|
|||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
from nonebot_plugin_marshoai.plugin import (
|
from nonebot_plugin_marshoai.plugin import PluginMetadata
|
||||||
Integer,
|
|
||||||
PluginMetadata,
|
|
||||||
String,
|
|
||||||
function_call,
|
|
||||||
on_function_call,
|
|
||||||
)
|
|
||||||
|
|
||||||
__marsho_meta__ = PluginMetadata(
|
__marsho_meta__ = PluginMetadata(
|
||||||
name="Bangumi 番剧信息",
|
name="Bangumi 番剧信息",
|
||||||
@ -17,42 +11,3 @@ __marsho_meta__ = PluginMetadata(
|
|||||||
author="Liteyuki",
|
author="Liteyuki",
|
||||||
homepage="",
|
homepage="",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@function_call
|
|
||||||
async def fetch_calendar():
|
|
||||||
"""获取今天日期"""
|
|
||||||
url = "https://api.bgm.tv/calendar"
|
|
||||||
headers = {
|
|
||||||
"User-Agent": "LiteyukiStudio/nonebot-plugin-marshoai (https://github.com/LiteyukiStudio/nonebot-plugin-marshoai)"
|
|
||||||
}
|
|
||||||
async with httpx.AsyncClient() as client:
|
|
||||||
response = await client.get(url, headers=headers)
|
|
||||||
# print(response.text)
|
|
||||||
return response.json()
|
|
||||||
|
|
||||||
|
|
||||||
@function_call
|
|
||||||
async def get_bangumi_news() -> str:
|
|
||||||
"""获取今天的新番(动漫)列表,在调用之前,你需要知道今天星期几。"""
|
|
||||||
result = await fetch_calendar()
|
|
||||||
info = ""
|
|
||||||
try:
|
|
||||||
for i in result:
|
|
||||||
weekday = i["weekday"]["cn"]
|
|
||||||
# print(weekday)
|
|
||||||
info += f"{weekday}:"
|
|
||||||
items = i["items"]
|
|
||||||
for item in items:
|
|
||||||
name = item["name_cn"]
|
|
||||||
info += f"《{name}》"
|
|
||||||
info += "\n"
|
|
||||||
return info
|
|
||||||
except Exception as e:
|
|
||||||
traceback.print_exc()
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
@function_call
|
|
||||||
def test_sync() -> str:
|
|
||||||
return "sync"
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user