Skip to content

AyakaInput

Message转换为我们所需要的一系列参数

基本用法

将需要的参数打包到一个类中,该类继承自AyakaInput,编写方法参考pydantic.BaseModel

使用时放入回调的参数表中即可

from ayaka import AyakaInput, AyakaApp

app = AyakaApp("test")

class UserInput(AyakaInput):
    name:str 
    age:int 

@app.on_cmd("f1")
async def func_1(userinput:UserInput):
    print(userinput)

注意,一定要编写类型提示,默认值可以不写

代码 备注
name:str = "" 正确
name = "" 错误
name:str 正确
name 错误
<<< "user" 说:#f1 张三丰 100 name='张三丰' age=100
<<< "user" 说:#f1 张三丰 >>> "Bot" 说: 1 validation error for UserInput age field required (type=value_error.missing)
<<< "user" 说:#f1 张三丰 测试 >>> "Bot" 说: 1 validation error for UserInput age value is not a valid integer (type=type_error.integer)

进阶:msg_type

使用msg_type获取指定类型的MessageSegment(除了type=text类型)

from ayaka import AyakaInput, msg_type, AyakaApp

app = AyakaApp("test")

class UserInput(AyakaInput):
    at:msg_type.T_At 

@app.on_cmd("f1")
async def func_1(userinput:UserInput):
    print(userinput)
<<< "user" 说:#f1 123 >>> "Bot" 说: 1 validation error for UserInput at MessageSegment required (type=type_error)
<<< "user" 说:#f1 [CQ:at,qq=12] at=MessageSegment(type='at', data={'qq': '12'})

进阶:约束

使用pydantic进行约束,约束条件参考pydantic.Field

from ayaka import AyakaInput, AyakaApp
from pydantic import Field

app = AyakaApp("test")

class UserInput(AyakaInput):
    age:int = Field(gt=0)

@app.on_cmd("f1")
async def func_1(userinput:UserInput):
    print(userinput)
<<< "user" 说:#f1 -1 >>> "Bot" 说: 1 validation error for UserInput age ensure this value is greater than 0 (type=value_error.number.not_gt; limit_value=0)
<<< "user" 说:#f1 100 age=100

进阶:帮助

使用Field,编写description,以便ayaka_master为该属性提供帮助

from pydantic import Field
from ayaka import AyakaInput, AyakaApp

app = AyakaApp("test")


class UserInput(AyakaInput):
    name: str = Field(description="名字")
    age: int = Field(description="年龄")


@app.on_cmd("f1")
async def func_1(userinput: UserInput):
    pass
<<< "user" 说:#help test >>> "Bot" 说:[test] - f1 <name> <age> <name> 名字 <age> 年龄

特殊:不能嵌套

不可以嵌套其他BaseModel模型

from pydantic import BaseModel, Field
from ayaka import AyakaInput, AyakaApp

app = AyakaApp("test")


class User(BaseModel):
    name: str = Field(description="名字")
    age: int = Field(description="年龄")


class UserInput(AyakaInput):
    user: User


@app.on_cmd("f1")
async def func_1(userinput: UserInput):
    print(userinput)
<<< "user" 说:#f1 >>> "Bot" 说: 1 validation error for UserInput user field required (type=value_error.missing)

下一步

在这里~ ↘