Skip to content

iori2333/Felis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Iori Ichinose
Mar 13, 2023
3ac1139 · Mar 13, 2023

History

38 Commits
Mar 13, 2023
Feb 27, 2023
Mar 12, 2023
Mar 12, 2023
Feb 27, 2023
Mar 12, 2023

Repository files navigation

Felis

基于Actor模式的Python机器人框架

license python onebot

快速开始

  1. 为bot提供配置
    # neko.json
    {
        "name": "Neko",
        "driver": {
            "connect_url": "ws://url-to-server"
        }
    }
  2. 运行项目
    async def main():
        neko = Neko.from_file("neko.json")
        await neko.start()
    
    if __name__ == "__main__":
        asyncio.run(main())

使用命令

  1. 通过继承Command[T]MessageCommand新建自定义命令。新建的命令会自动通过Commands注册。
    @Commands.register(name="cmd", description="xxxx")
    class MyCommand(MessageCommand):
        @override
        async def handle_message(self, event: MessageEvent, message: Message) -> None:
            self.send_back(event, message)
  2. 配置client.commands
    # neko.json
    {
        ...
        client: {
            commands: ["cmd", ...]
        }
    }

扩展

Neko类提供了customized_setup作为扩展点,可以通过继承的方式进行扩展。

class MyEventHandler:
    @staticmethod
    def apply() -> Behavior[ClientMessage]:
        def on_message(_, message: ClientMessage) -> Behavior[ClientMessage]:
            print(message)
            return Behavior[ClientMessage].same

        def setup(context: ActorContext[ClientMessage]) -> Behavior[ClientMessage]:
            context.system.receptionist.tell(
                ReceptionistRequest.register(EVENT_KEY, context.self)
            )
            return Behaviors.receive_message(on_message)

        return Behaviors.setup(setup)

class Felis(Neko):
    @override
    def customized_setup(self, context: ActorContext[NekoMessage]) -> None:
        context.spawn(MyEventHandler.apply(), "event_handler")

在上例中,我们创建了一个自定义的Actor: MyEventHandler。它通过EVENT_KEY订阅了从服务器推送的事件信息并打印出来; 通过继承Neko类,我们得以在customized_setup中生成MyEventHandler

结构

Loading
graph RL;

round((Receptionist))-.EVENT_KEY.->Driver--data-->Adapter
Adapter--Events/Response-->round((Receptionist))
round((Receptionist))-.ACTION_KEY.->Client--request-->Adapter;
round((Receptionist))-.xx_KEY.->...

Felis结构主要分为DriverAdapterClient三部分:

  • Driver:用于与后端交互,包括接收事件和动作响应、发送动作请求。
  • Client:用于处理事件,如使用Command
  • AdapterDriverClient的中间件,用于转换并广播事件。用户自定义的Actor可以通过订阅EVENT_KEYACTION_KEY获取事件和动作信息。

About

基于Actor模式的Python机器人框架

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages