一个基于 Satori 协议的灵活、高效的 IM framework
特性
- 基于 Satori 协议,一份代码即可对接多种平台
- 异步并发,基于 Python 的异步特性,即使有大量的事件传入,也能吞吐自如。在常规使用下能达到1000+ RPS
- 易上手的开发体验,没有过多的冗余代码,可以让开发者专注于业务逻辑
- 既可集成式也可分布式的配置文件,内建且可拓展的配置模型
- 即插即拔,可热重载、可重用的插件机制
- 自定义服务、自定义事件等高度可拓展的功能
- 高度可拓展的事件响应器,能够依托强大的、符合直觉依赖注入进行会话控制
- 内置强大的命令系统、定时任务系统与多种插件
示例
使用 entari-cli 命令行:
# 创建新的 entari 项目
$ entari init
是否创建新的虚拟环境? (Y/n): Y
请输入要选择的 Python 解释器路径
0. cpython@3.11 (...)
1. ...
请选择 (0): 0
虚拟环境将创建在 ...
...
# 运行
$ entari run
使用的配置文件:
# entari.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: ["."]
::help: {}
::echo: {}
::inspect: {}
复读:
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}")
加载插件:
# entari.yml
plugins:
$prelude:
- ::auto_reload
.record_message: {}
::auto_reload:
watch_dirs: ["."]
::help: {}
::echo: {}
::inspect: {}
++ example_plugin: {} # 加载 example_plugin 插件
在其他插件中导入插件:
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,webhookhost: satori 服务器地址port: satori 服务器端口path: satori 服务器路径
ignore_self_message: 是否忽略自己发送的消息事件log: 日志配置level: 日志等级, 可填项有TRACEDEBUG,INFO等
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: 帮助指令, 默认为helphelp_alias: 帮助指令别名, 默认为["帮助", "命令帮助"]page_size: 每页显示的指令数量, 留空则不分页
对于其他插件的配置, 有四种写法:
foo.bar: {}(仅启用插件)~foo.bar: xxxx(禁用插件,即加载但不启用)foo.bar: {"key": "value"}(启用插件并配置)?foo.bar: xxxx(仅存储插件配置, 不加载插件)
Metadata
Release files for arclet-entari 0.19.3.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| arclet_entari-0.19.3.post1.tar.gz | 127.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arclet_entari-0.19.3.post1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 283.4 kB
Release files / arclet_entari-0.19.3.post1.tar.gz
| Download URL | arclet_entari-0.19.3.post1.tar.gz |
|---|---|
| Size | 127.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b5dbaf27fb896c611fe1c2dca183f98dbb1e8838ffdaf3ec42f6dedab6e2ad7
|
|
BLAKE2b-256 checksum How to use checksums |
8185204d65e563f2667540bdb69c6a5cd426de9a5c759701a536254ebf439959
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
pdm/2.29.3 CPython/3.12.3 Linux/6.17.0-1022-azure
|
Release files / arclet_entari-0.19.3.post1-py3-none-any.whl
| Download URL | arclet_entari-0.19.3.post1-py3-none-any.whl |
|---|---|
| Size | 155.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
909fc7b6dc326f7ae758c3cdf45f5ca01da3ede1a9213bb84987dd1cb0b4671b
|
|
BLAKE2b-256 checksum How to use checksums |
d50fdff2005d782d8029fe0b1155ee17b5fb10e1e86b3e4ba725124cb0282125
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
pdm/2.29.3 CPython/3.12.3 Linux/6.17.0-1022-azure
|
Security for arclet-entari 0.19.3.post1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.