Skip to content

Commit b284230

Browse files
committed
0.0.17
Signed-off-by: RF-Tar-Railt <3165388245@qq.com>
1 parent 3a2b6a5 commit b284230

34 files changed

Lines changed: 1087 additions & 877 deletions

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ app = Edoves(
7272
)
7373
}
7474
)
75-
app["MAH-default"].require_module(MessageModule).add_handler(MessageReceived, test_message_reaction)
75+
with app["MAH-default"].context() as scene:
76+
scene.require_module(MessageModule).add_handler(MessageReceived, test_message_reaction)
7677
app.run()
7778
```
7879

arclet/edoves/builtin/actions.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ class GetMonomer(ExecutiveAction):
1212
mono_id: str
1313
rs: str
1414

15-
def __init__(self, target: Union[int, str], relationship: str, **kwargs):
15+
def __init__(self, target: Union[int, str], relationship: str, whole: bool = False, **kwargs):
1616
self.mono_id = str(target)
1717
self.rs = relationship
1818
self.rest = kwargs
19+
self.rest.setdefault("list_all", whole)
1920
super().__init__("relationship_get")
2021

2122
async def execute(self):
@@ -24,7 +25,9 @@ async def execute(self):
2425
return await self.target.action(self.action)(
2526
self.mono_id, self.rs, **self.rest
2627
)
27-
entity.metadata.update_data("group_id", self.target.metadata.group_id)
28+
gid = self.target.metadata.group_id
29+
if gid:
30+
entity.metadata.update_data("group_id", gid)
2831
return entity
2932

3033

arclet/edoves/builtin/behavior.py

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional, Union
1+
from typing import Optional, Union, Any
22
from ..main.monomer import BaseMonoBehavior, Monomer
33
from ..main.protocol import AbstractProtocol
44
from .medium import Message, Request, DictMedium
@@ -11,7 +11,7 @@ def activate(self):
1111
self.protocol = self.io.metadata.protocol
1212

1313
async def revoke(self, medium: Message, target_message_id: int = None):
14-
await self.protocol.push_medium(
14+
await self.protocol.screen.push_medium(
1515
DictMedium().create(
1616
self.io,
1717
{
@@ -20,10 +20,10 @@ async def revoke(self, medium: Message, target_message_id: int = None):
2020
"MessageRevoke"
2121
)
2222
)
23-
await self.protocol.data_parser_dispatch("post")
23+
await self.protocol.execution_handle()
2424

25-
async def nudge(self, target: Union[str, Monomer], **rest):
26-
await self.protocol.push_medium(
25+
async def nudge(self, target: Union[str, Monomer, None], **rest):
26+
await self.protocol.screen.push_medium(
2727
DictMedium().create(
2828
self.io,
2929
{
@@ -33,7 +33,7 @@ async def nudge(self, target: Union[str, Monomer], **rest):
3333
"NudgeSend"
3434
)
3535
)
36-
await self.protocol.data_parser_dispatch("post")
36+
await self.protocol.execution_handle()
3737

3838
async def send_with(
3939
self,
@@ -47,7 +47,7 @@ async def send_with(
4747
if nudge:
4848
await self.nudge(target.metadata.pure_id, **rest)
4949

50-
resp = await self.protocol.push_medium(
50+
resp = await self.protocol.screen.push_medium(
5151
DictMedium().create(
5252
self.io,
5353
{
@@ -59,17 +59,17 @@ async def send_with(
5959
"MessageSend"
6060
)
6161
)
62-
await self.protocol.data_parser_dispatch("post")
62+
await self.protocol.execution_handle()
6363
resp_data: DictMedium = await resp.wait_response()
64-
self.protocol.scene.edoves.logger.info(
65-
f"{self.protocol.scene.protagonist.metadata.pure_id}: "
64+
self.protocol.screen.edoves.logger.info(
65+
f"{self.protocol.current_scene.protagonist.metadata.pure_id}: "
6666
f"{resp_data.type}({resp_data.content['id']})"
6767
f" <- {medium.content.to_text()}"
6868
)
6969
return resp_data.content.get('messageId')
7070

7171
async def request_accept(self, medium: Request, msg: str = None):
72-
await self.protocol.push_medium(
72+
await self.protocol.screen.push_medium(
7373
DictMedium().create(
7474
self.io,
7575
{
@@ -82,10 +82,10 @@ async def request_accept(self, medium: Request, msg: str = None):
8282
"Accept"
8383
)
8484
)
85-
await self.protocol.data_parser_dispatch("post")
85+
await self.protocol.execution_handle()
8686

8787
async def request_reject(self, medium: Request, msg: str = None):
88-
await self.protocol.push_medium(
88+
await self.protocol.screen.push_medium(
8989
DictMedium().create(
9090
self.io,
9191
{
@@ -98,11 +98,11 @@ async def request_reject(self, medium: Request, msg: str = None):
9898
"Reject"
9999
)
100100
)
101-
await self.protocol.data_parser_dispatch("post")
101+
await self.protocol.execution_handle()
102102

103103
async def relationship_remove(self, target: Union[str, Monomer], relationship: str = None):
104104
target = await self.relationship_get(target, relationship) if isinstance(target, str) else target
105-
await self.protocol.push_medium(
105+
await self.protocol.screen.push_medium(
106106
DictMedium().create(
107107
self.io,
108108
{
@@ -112,10 +112,10 @@ async def relationship_remove(self, target: Union[str, Monomer], relationship:
112112
"RelationshipRemove"
113113
)
114114
)
115-
await self.protocol.data_parser_dispatch("post")
115+
await self.protocol.execution_handle()
116116

117117
async def relationship_get(self, target: str, relationship: str, **rest):
118-
resp = await self.protocol.push_medium(
118+
resp = await self.protocol.screen.push_medium(
119119
DictMedium().create(
120120
self.io,
121121
{
@@ -126,11 +126,11 @@ async def relationship_get(self, target: str, relationship: str, **rest):
126126
"RelationshipGet"
127127
)
128128
)
129-
await self.protocol.data_parser_dispatch("post")
129+
await self.protocol.execution_handle()
130130
return await resp.wait_response()
131131

132132
async def change_monomer_status(self, target: Monomer, status: str, **rest):
133-
await self.protocol.push_medium(
133+
await self.protocol.screen.push_medium(
134134
DictMedium().create(
135135
self.io,
136136
{
@@ -141,18 +141,24 @@ async def change_monomer_status(self, target: Monomer, status: str, **rest):
141141
"ChangeMonomerStatus"
142142
)
143143
)
144-
await self.protocol.data_parser_dispatch("post")
144+
await self.protocol.execution_handle()
145145

146-
async def change_monomer_metadata(self, target: Monomer, meta: str, **rest):
147-
await self.protocol.push_medium(
146+
async def change_metadata(
147+
self,
148+
meta: str,
149+
value: Any,
150+
target: Optional["Monomer"] = None,
151+
**addition
152+
):
153+
await self.protocol.screen.push_medium(
148154
DictMedium().create(
149155
self.io,
150156
{
151-
"target": target,
157+
"target": target or self.io,
152158
"meta": meta,
153-
"rest": rest,
159+
"rest": addition,
154160
},
155161
"ChangeMonomerMetadata"
156162
)
157163
)
158-
await self.protocol.data_parser_dispatch("post")
164+
await self.protocol.execution_handle()

arclet/edoves/builtin/chatlog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def __init__(self, protocol: TProtocol):
2626

2727

2828
def log_message(module: ChatLogModule, message: Message, purveyor: Monomer):
29-
scene = module.metadata.protocol.scene
29+
scene = module.metadata.protocol.current_scene
3030
if purveyor.prime_tag == "Member":
3131
scene.edoves.logger.log(
3232
module.metadata.log_level,

arclet/edoves/builtin/client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ async def ensure_network(
9797
):
9898
resp: ClientWebSocketResponse = await self.session.ws_connect(url, timeout=timeout, **kwargs).__aenter__()
9999
yield AiohttpWSConnection(resp)
100+
pass
100101

101102
@asynccontextmanager
102103
async def request(

arclet/edoves/builtin/commander.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class Commander(BaseModule):
8181

8282
def __init__(self, protocol: TProtocol, namespace: Optional[str] = None):
8383
super().__init__(protocol)
84-
self.metadata.command_namespace = namespace or self.metadata.protocol.scene.scene_name + "_Commander"
84+
self.metadata.command_namespace = namespace or self.metadata.protocol.current_scene.scene_name + "_Commander"
8585
self.command_parsers = CommandParsers(self)
8686
if self.local_storage.get(self.__class__):
8787
for k, v in self.local_storage[self.__class__].items():
@@ -100,8 +100,8 @@ async def _action(doc: str):
100100
**result.all_matched_args,
101101
"message": message,
102102
"sender": message.purveyor,
103-
"edoves": self.metadata.protocol.scene.edoves,
104-
"scene": self.metadata.protocol.scene
103+
"edoves": self.metadata.protocol.screen.edoves,
104+
"scene": self.metadata.protocol.current_scene
105105
}
106106
)
107107
break

arclet/edoves/mah/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
from typing import Type
22
from arclet.edoves.main.config import TemplateConfig
33
from arclet.edoves.main.utilles.security import MIRAI_API_HTTP_DEFAULT
4+
from .parsers import *
45
from .protocol import MAHProtocol
56
from .server_docker import MAHServerDocker
6-
from .parsers import *
7+
78

89
VERIFY_CODE = MIRAI_API_HTTP_DEFAULT
910

1011

1112
class MAHConfig(TemplateConfig):
1213
protocol: Type[MAHProtocol] = MAHProtocol
13-
server_docker: Type[MAHServerDocker] = MAHServerDocker
14+
docker_type: Type[MAHServerDocker] = MAHServerDocker
1415
modules_base_path = "./edoves_modules/mah"

arclet/edoves/mah/actions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ def __init__(self, target: MahEntity, mute_time: int = None):
3232

3333

3434
class GetFriend(GetMonomer):
35-
def __init__(self, target: Union[int, str]):
36-
super().__init__(target, "Friend")
35+
def __init__(self, target: Union[int, str], detail: bool = False):
36+
super().__init__(target, "Friend", detail=detail)
3737

3838

3939
class GetMember(GetMonomer):

arclet/edoves/mah/monomers.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
from enum import Enum
2-
from typing import Optional, Dict, Any
2+
from typing import Optional, TYPE_CHECKING
33

4-
from arclet.edoves.main.typings import TProtocol
54
from arclet.edoves.main.monomer import Monomer, MonoMetaComponent
65
from arclet.edoves.builtin.behavior import MiddlewareBehavior
6+
from arclet.edoves.builtin.medium import Message
7+
8+
if TYPE_CHECKING:
9+
from .protocol import MAHProtocol
710

811

912
class Permission(str, Enum):
@@ -24,12 +27,16 @@ class Equipment(str, Enum):
2427

2528

2629
class MEMetadata(MonoMetaComponent):
27-
specialTitle: Optional[str]
30+
protocol: "MAHProtocol"
2831
permission: Permission
32+
group_id: Optional[str]
33+
34+
specialTitle: Optional[str]
2935
joinTimestamp: Optional[int]
3036
lastSpeakTimestamp: Optional[int]
3137
mutetimeRemaining: Optional[int]
32-
group_id: Optional[str]
38+
39+
__limit__ = ["group_id", "permission"]
3340

3441

3542
class MahEntity(Monomer):
@@ -38,15 +45,12 @@ class MahEntity(Monomer):
3845

3946
def __init__(
4047
self,
41-
protocol: TProtocol,
48+
protocol: "MAHProtocol",
4249
nickname: str,
4350
identifier: Optional[str] = None,
4451
remark: Optional[str] = None,
45-
**data: Dict[str, Any]
4652
):
4753
super().__init__(protocol, nickname, identifier, remark)
48-
for k, v in data.items():
49-
self.get_component(MEMetadata).update_data(k, v)
5054

5155
@property
5256
def current_group(self):
@@ -56,4 +60,8 @@ def avatar(self):
5660
return f'https://q4.qlogo.cn/g?b=qq&nk={self.metadata.pure_id}&s=140'
5761

5862
async def reply(self, *args):
59-
raise NotImplementedError
63+
msg = Message(*args, target=self)
64+
msg.type = self.prime_tag + "Message"
65+
return await self.get_component(MiddlewareBehavior).send_with(
66+
msg, reply=True,
67+
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from .message import MessageEventParser, NudgeEventParser
22
from .request import RequestEventParser
33
from .notice import RelationshipOperateParser
4-
from .notice.bot import BotBaseEventParser, BotStatusUpdateEventParser
4+
from .notice.bot import BotBaseEventParser, BotStatusUpdateEventParser, BotBaseEventParser
55
from .notice.friend import FriendEventParser
66
from .notice.group import GroupStatusUpdateParser, GroupMetadataUpdateParser
77
from .notice.member import MemberMetadataUpdateParser, MemberStatusUpdateParser

0 commit comments

Comments
 (0)