diff --git a/avilla/core/ryanvk/staff.py b/avilla/core/ryanvk/staff.py index adafa718..600e35d5 100644 --- a/avilla/core/ryanvk/staff.py +++ b/avilla/core/ryanvk/staff.py @@ -75,8 +75,17 @@ async def query_entities(self, pattern: str, **predicators: FollowsPredicater): def build_handler(artifact: tuple[BaseCollector, QueryHandlerPerform]) -> QueryHandler: async def handler(predicate: Callable[[str, str], bool] | str, previous: Selector | None = None): - instance, entity = artifact - async for i in entity(instance, predicate, previous): + collector, entity = artifact + + def _get_instance(_staff: Staff, _cls: type[N]) -> N: + if _cls not in _staff.instances: + res = _staff.instances[_cls] = _cls(_staff) + else: + res = _staff.instances[_cls] + + return res + + async for i in entity(_get_instance(self, collector.cls), predicate, previous): yield i return handler diff --git a/avilla/elizabeth/perform/event/member.py b/avilla/elizabeth/perform/event/member.py index 14a06621..567c5cb7 100644 --- a/avilla/elizabeth/perform/event/member.py +++ b/avilla/elizabeth/perform/event/member.py @@ -90,7 +90,7 @@ async def member_special_title_change(self, raw_event: dict): group_data = member_data["group"] group = land.group(str(group_data["id"])) member = group.member(str(member_data["id"])) - members = await self.connection.call("fetch", "memberList", {"target": raw_event["group"]["id"]}) + members = await self.connection.call("fetch", "memberList", {"target": member_data["group"]["id"]}) members = cast(list[dict], members) operator_data = next((d for d in members if d["id"] == raw_event["operator"]["id"]), None) operator = group.member(str(operator_data["id"])) if operator_data else group