Skip to content

Commit 38314be

Browse files
committed
✨ shortcut listen
1 parent df92355 commit 38314be

File tree

8 files changed

+42
-46
lines changed

8 files changed

+42
-46
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ app.run()
7373
指令 `add {a} {b}`:
7474

7575
```python
76-
from arclet.entari import Session, Entari, WS, command
76+
from arclet.entari import Entari, WS, command
7777

7878
@command.on("add {a} {b}")
7979
def add(a: int, b: int):
@@ -87,7 +87,7 @@ app.run()
8787
编写插件:
8888

8989
```python
90-
from arclet.entari import Session, MessageCreatedEvent, metadata, plugin
90+
from arclet.entari import Session, MessageCreatedEvent, metadata, listen
9191

9292
metadata(
9393
name="Hello, World!",
@@ -97,7 +97,7 @@ metadata(
9797
)
9898
# or __plugin_metadata__ = PluginMetadata(...)
9999

100-
@plugin.dispatch(MessageCreatedEvent)
100+
@listen(MessageCreatedEvent) # or plugin.dispatch(MessageCreatedEvent)
101101
async def _(session: Session):
102102
await session.send("Hello, World!")
103103
```

arclet/entari/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from arclet.letoderea import bind as bind
2+
from arclet.letoderea import es as es
23
from satori import ArgvInteraction as ArgvInteraction
34
from satori import At as At
45
from satori import Audio as Audio
@@ -48,19 +49,21 @@
4849
from .message import MessageChain as MessageChain
4950
from .plugin import Plugin as Plugin
5051
from .plugin import PluginMetadata as PluginMetadata
52+
from .plugin import add_service as add_service
5153
from .plugin import declare_static as declare_static
52-
from .plugin import dispose as dispose_plugin # noqa: F401
5354
from .plugin import keeping as keeping
5455
from .plugin import load_plugin as load_plugin
5556
from .plugin import load_plugins as load_plugins
5657
from .plugin import metadata as metadata
5758
from .plugin import package as package
5859
from .plugin import plugin_config as plugin_config
60+
from .plugin import unload_plugin as unload_plugin
5961
from .session import Session as Session
6062
from .utils.local_data import local_data as local_data
6163

6264
WS = WebsocketsInfo
6365
WH = WebhookInfo
6466
filter_ = Filter
67+
listen = es.on
6568

6669
__version__ = "0.10.5"

arclet/entari/builtins/auto_reload.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
except ModuleNotFoundError:
1212
raise ImportError("Please install `watchfiles` first. Install with `pip install arclet-entari[reload]`")
1313

14-
from arclet.entari import Plugin, declare_static, dispose_plugin, load_plugin, metadata
14+
from arclet.entari import add_service, declare_static, load_plugin, metadata, plugin_config, unload_plugin
1515
from arclet.entari.config import EntariConfig
1616
from arclet.entari.event.config import ConfigReload
1717
from arclet.entari.logger import log
@@ -78,7 +78,7 @@ async def watch(self):
7878
logger("INFO", f"Detected change in <blue>{plugin.id!r}</blue>, reloading...")
7979
pid = plugin.id
8080
del plugin
81-
dispose_plugin(pid)
81+
unload_plugin(pid)
8282
if plugin := load_plugin(pid):
8383
logger("INFO", f"Reloaded <blue>{plugin.id!r}</blue>")
8484
del plugin
@@ -127,7 +127,7 @@ async def watch_config(self):
127127
if plugin_name not in EntariConfig.instance.plugin:
128128
if plugin := find_plugin(pid):
129129
del plugin
130-
dispose_plugin(pid)
130+
unload_plugin(pid)
131131
logger("INFO", f"Disposed plugin <blue>{pid!r}</blue>")
132132
continue
133133
if old_plugin[plugin_name] != EntariConfig.instance.plugin[plugin_name]:
@@ -152,7 +152,7 @@ async def watch_config(self):
152152
continue
153153
logger("INFO", f"Detected <blue>{pid!r}</blue>'s config change, reloading...")
154154
plugin_file = str(plugin.module.__file__)
155-
dispose_plugin(plugin_name)
155+
unload_plugin(plugin_name)
156156
if plugin := load_plugin(plugin_name, new_conf):
157157
logger("INFO", f"Reloaded <blue>{plugin.id!r}</blue>")
158158
del plugin
@@ -186,11 +186,11 @@ async def launch(self, manager: Launart):
186186
self.fail.clear()
187187

188188

189-
plug = Plugin.current()
190-
watch_dirs = plug.config.get("watch_dirs", ["."])
191-
watch_config = plug.config.get("watch_config", False)
189+
conf = plugin_config()
190+
watch_dirs = conf.get("watch_dirs", ["."])
191+
watch_config = conf.get("watch_config", False)
192192

193-
plug.service(serv := Watcher(watch_dirs, watch_config))
193+
add_service(serv := Watcher(watch_dirs, watch_config))
194194

195195

196196
@es.on(ConfigReload)

arclet/entari/core.py

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from contextlib import suppress
44
import os
55

6-
from arclet.letoderea import BaseAuxiliary, Contexts, Param, Provider, ProviderFactory, Subscriber, es, global_providers
6+
from arclet.letoderea import Contexts, Param, Provider, ProviderFactory, es, global_providers
77
from creart import it
88
from launart import Launart, Service
99
from satori import LoginStatus
@@ -21,7 +21,7 @@
2121
from .event.send import SendResponse
2222
from .logger import log
2323
from .plugin import load_plugin, plugin_config, requires
24-
from .plugin.model import Plugin, RootlessPlugin
24+
from .plugin.model import RootlessPlugin
2525
from .plugin.service import plugin_service
2626
from .session import EntariProtocol, Session
2727

@@ -54,17 +54,18 @@ async def __call__(self, context: Contexts):
5454
return context["account"]
5555

5656

57-
class PluginProvider(Provider[Plugin]):
58-
async def __call__(self, context: Contexts):
59-
subscriber: Subscriber = context["$subscriber"]
60-
func = subscriber.callable_target
61-
if hasattr(func, "__globals__") and "__plugin__" in func.__globals__: # type: ignore
62-
return func.__globals__["__plugin__"]
63-
if hasattr(func, "__module__"):
64-
return plugin_service.plugins.get(func.__module__)
57+
#
58+
# class PluginProvider(Provider[Plugin]):
59+
# async def __call__(self, context: Contexts):
60+
# subscriber: Subscriber = context["$subscriber"]
61+
# func = subscriber.callable_target
62+
# if hasattr(func, "__globals__") and "__plugin__" in func.__globals__: # type: ignore
63+
# return func.__globals__["__plugin__"]
64+
# if hasattr(func, "__module__"):
65+
# return plugin_service.plugins.get(func.__module__)
6566

6667

67-
global_providers.extend([ApiProtocolProvider(), SessionProvider(), AccountProvider(), PluginProvider()])
68+
global_providers.extend([ApiProtocolProvider(), SessionProvider(), AccountProvider()])
6869

6970

7071
@RootlessPlugin.apply("record_message")
@@ -166,22 +167,8 @@ def reset_self(self, scope, key, value):
166167
for conn in self.connections:
167168
it(Launart).add_component(conn)
168169

169-
def on(
170-
self,
171-
*events: type,
172-
priority: int = 16,
173-
auxiliaries: list[BaseAuxiliary] | None = None,
174-
providers: list[Provider | type[Provider] | ProviderFactory | type[ProviderFactory]] | None = None,
175-
):
176-
return es.on(events, priority=priority, auxiliaries=auxiliaries, providers=providers)
177-
178-
def on_message(
179-
self,
180-
priority: int = 16,
181-
auxiliaries: list[BaseAuxiliary] | None = None,
182-
providers: list[Provider | type[Provider] | ProviderFactory | type[ProviderFactory]] | None = None,
183-
):
184-
return es.on(MessageCreatedEvent, priority=priority, auxiliaries=auxiliaries, providers=providers)
170+
def on_message(self, priority: int = 16):
171+
return es.on(MessageCreatedEvent, priority=priority)
185172

186173
def ensure_manager(self, manager: Launart):
187174
self.manager = manager

arclet/entari/plugin/__init__.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .model import RegisterNotInPluginError
1313
from .model import RootlessPlugin as RootlessPlugin
1414
from .model import StaticPluginDispatchError, _current_plugin
15-
from .model import TE, Plugin
15+
from .model import TE, TS, Plugin
1616
from .model import keeping as keeping
1717
from .module import import_plugin
1818
from .module import package as package
@@ -75,7 +75,7 @@ def load_plugin(
7575
log.plugin.opt(colors=True).debug(
7676
f"reloading <y>{mod.__name__}</y>'s referent <y>{referent!r}</y>"
7777
)
78-
dispose(referent)
78+
unload_plugin(referent)
7979
if not load_plugin(referent):
8080
plugin_service._referents[mod.__name__].add(referent)
8181
else:
@@ -99,7 +99,7 @@ def load_plugins(dir_: str | PathLike | Path):
9999
load_plugin(".".join(p.parts[:-1:1]) + "." + p.stem)
100100

101101

102-
def dispose(plugin: str):
102+
def unload_plugin(plugin: str):
103103
while plugin in plugin_service._subplugined:
104104
plugin = plugin_service._subplugined[plugin]
105105
if plugin not in plugin_service.plugins:
@@ -132,6 +132,12 @@ def declare_static():
132132
raise StaticPluginDispatchError("static plugin cannot dispatch events")
133133

134134

135+
def add_service(serv: TS | type[TS]) -> TS:
136+
if not (plugin := _current_plugin.get(None)):
137+
raise LookupError("no plugin context found")
138+
return plugin.service(serv)
139+
140+
135141
def find_plugin(name: str) -> Plugin | None:
136142
if name in plugin_service.plugins:
137143
return plugin_service.plugins[name]

arclet/entari/plugin/model.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
T = TypeVar("T")
2525
TE = TypeVar("TE")
26+
TS = TypeVar("TS", bound=Service)
2627
R = TypeVar("R")
2728

2829

@@ -359,7 +360,7 @@ def proxy(self):
359360
def subproxy(self, sub_id: str):
360361
return proxy(plugin_service.plugins[sub_id].module)
361362

362-
def service(self, serv: Service | type[Service]):
363+
def service(self, serv: TS | type[TS]) -> TS:
363364
if isinstance(serv, type):
364365
serv = serv()
365366
self._services[serv.id] = serv

example_plugin.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import sys
21
from arclet.entari import (
32
Session,
43
MessageChain,

main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from satori import Image
22

3-
from arclet.entari import Session, Entari, command, load_plugin, dispose_plugin
3+
from arclet.entari import Session, Entari, command, load_plugin, unload_plugin
44

55

66
@command.on("echoimg {img}")
@@ -21,7 +21,7 @@ async def load(plugin: str, session: Session):
2121

2222
@command.on("unload {plugin}")
2323
async def unload(plugin: str, session: Session):
24-
if dispose_plugin(plugin):
24+
if unload_plugin(plugin):
2525
await session.send_message(f"Unloaded {plugin}")
2626
else:
2727
await session.send_message(f"Failed to unload {plugin}")

0 commit comments

Comments
 (0)