Simple IM Framework based on satori-python
Project description
Entari
lí no etheclim, nann ze entám rish.
一个基于 Satori
协议的简易 IM framework
特性
- 基于 Satori 协议,一份代码即可对接多种平台
- 异步并发,基于 Python 的异步特性,即使有大量的事件传入,也能吞吐自如
- 易上手的开发体验,没有过多的冗余代码,可以让开发者专注于业务逻辑
- 既可集成式也可分布式的配置文件,内建且可拓展的配置模型
- 可热重载的插件机制与服务机制,同时还能提供自定义事件
- 高度可拓展的事件响应器,能够依托强大的、符合直觉依赖注入进行会话控制
- 内置强大的命令系统、定时任务系统与多种插件
示例
使用命令行:
# 生成配置文件
$ entari config new
# 运行
$ entari run
使用配置文件:
# config.yml
basic:
network:
- type: ws
host: "127.0.0.1"
port: 5140
path: "satori"
ignore_self_message: true
log_level: INFO
prefix: ["/"]
plugins:
$prelude:
- ::auto_reload
.record_message: {}
::auto_reload:
watch_dirs: ["."]
::echo: {}
::inspect: {}
from arclet.entari import Entari
app = Entari.load("config.yml")
app.run()
复读:
from arclet.entari import Session, Entari, WS
app = Entari(WS(host="127.0.0.1", port=5140, path="satori"))
@app.on_message()
async def repeat(session: Session):
await session.send(session.content)
app.run()
指令 add {a} {b}
:
from arclet.entari import Entari, WS, command
@command.on("add {a} {b}")
def add(a: int, b: int):
return f"{a + b = }"
app = Entari(WS(port=5500, token="XXX"))
app.run()
编写插件:
from arclet.entari import BasicConfModel, Session, MessageCreatedEvent, plugin
class Config(BasicConfModel):
name: str
plugin.metadata(
name="Hello, World!",
author=["Arclet"],
version="0.1.0",
description="A simple plugin that replies 'Hello, World!' to every message.",
config=Config
)
# or __plugin_metadata__ = PluginMetadata(...)
config = plugin.get_config(Config)
@plugin.listen(MessageCreatedEvent) # or plugin.dispatch(MessageCreatedEvent)
async def _(session: Session):
await session.send(f"Hello, World! {config.name}")
加载插件:
from arclet.entari import Entari, WS, load_plugin
app = Entari(WS(port=5140, path="satori"))
load_plugin("example_plugin", {"name": "Entari"})
load_plugin("::echo")
load_plugin("::auto_reload", {"watch_dirs": ["plugins"]})
app.run()
导入插件:
from arclet.entari import command, MessageChain, Image
from entari_plugin_browser import md2img # entari: plugin
@command.on("md2img {content}")
async def _(content: str):
return MessageChain(Image.of(raw=await md2img(content)))
配置文件
basic:
network:
- type: ws
host: "127.0.0.1"
port: 5140
path: "satori"
ignore_self_message: true
log_level: INFO
prefix: ["/"]
plugins:
$files: ["./plugins"]
$prelude: ["::auto_reload"]
.record_message:
record_send: true
.commands:
use_config_prefix: false
::auto_reload:
watch_dirs: ["."]
watch_config: false
::echo: {}
::help:
page_size: null
basic
: Entari 基础配置network
: 网络配置, 可写多个网络配置type
: 网络类型, 可填项有ws
,websocket
,wh
,webhook
host
: satori 服务器地址port
: satori 服务器端口path
: satori 服务器路径
ignore_self_message
: 是否忽略自己发送的消息事件log_level
: 日志等级prefix
: 指令前缀, 可留空
plugins
: 插件配置$files
: 额外的插件配置文件搜索目录$prelude
: 预加载插件列表.record_message
: 消息日志并配置record_send
: 是否记录发送消息 (默认为true
)
.commands
: 指令插件配置 (适用于所有使用了command.on/command.command
的插件)need_notice_me
: 指令是否需要 @ 机器人need_reply_me
: 指令是否需要回复机器人use_config_prefix
: 是否使用配置文件中的前缀
::auto_reload
: 启用自动重载插件并配置watch_dirs
: 监听目录watch_config
: 是否监听配置文件的变化 (默认为true
)
::echo
: 启用回声插件::help
: 启用帮助插件并配置help_command
: 帮助指令, 默认为help
help_alias
: 帮助指令别名, 默认为["帮助", "命令帮助"]
page_size
: 每页显示的指令数量, 留空则不分页
对于其他插件的配置, 有三种写法:
foo.bar: {}
(仅启用插件)~foo.bar: xxxx
(禁用插件)foo.bar: {"key": "value"}
(启用插件并配置)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
arclet_entari-0.13.0.tar.gz
(55.6 kB
view details)
Built Distribution
File details
Details for the file arclet_entari-0.13.0.tar.gz
.
File metadata
- Download URL: arclet_entari-0.13.0.tar.gz
- Upload date:
- Size: 55.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.25.3 CPython/3.12.3 Linux/6.11.0-1015-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
96b17b9bb466ab5ca6a26aa66e1dacaac48c2da195d15b29530f10e2c3081446
|
|
MD5 |
2f91712b864735f8c0142b23e208c12d
|
|
BLAKE2b-256 |
46846fdd707f699436be7a60ef0f97a1aee4629e65cf855b012a9a0cf1609f63
|
File details
Details for the file arclet_entari-0.13.0-py3-none-any.whl
.
File metadata
- Download URL: arclet_entari-0.13.0-py3-none-any.whl
- Upload date:
- Size: 71.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.25.3 CPython/3.12.3 Linux/6.11.0-1015-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
9531d7ce16504b31eaac1cb7ba928415be43bddbe31f385537f8f3d20832d5da
|
|
MD5 |
faf92f98859d4276e1bddcd745ccd937
|
|
BLAKE2b-256 |
4016bf724a879e98a41dcc27926011113fb72fbfc5270b455ac2e7e85507c599
|