🐛 fix arg message store

This commit is contained in:
yanyongyu
2021-12-23 22:16:55 +08:00
parent 76104d3237
commit 17f3c8fd09
6 changed files with 28 additions and 38 deletions

View File

@ -1,8 +1,7 @@
# used by Matcher
RECEIVE_KEY = "_receive_{id}"
LAST_RECEIVE_KEY = "_last_receive"
ARG_KEY = "_arg_{key}"
ARG_STR_KEY = "{key}"
ARG_KEY = "{key}"
REJECT_TARGET = "_current_target"
# used by Rule

View File

@ -28,6 +28,7 @@ from nonebot.rule import Rule
from nonebot.log import logger
from nonebot.dependencies import Dependent
from nonebot.permission import USER, Permission
from nonebot.consts import ARG_KEY, RECEIVE_KEY, REJECT_TARGET, LAST_RECEIVE_KEY
from nonebot.adapters import (
Bot,
Event,
@ -35,13 +36,6 @@ from nonebot.adapters import (
MessageSegment,
MessageTemplate,
)
from nonebot.consts import (
ARG_KEY,
ARG_STR_KEY,
RECEIVE_KEY,
REJECT_TARGET,
LAST_RECEIVE_KEY,
)
from nonebot.exception import (
PausedException,
StopPropagation,
@ -483,7 +477,7 @@ class Matcher(metaclass=MatcherMeta):
async def _key_getter(event: Event, matcher: "Matcher"):
if matcher.get_target() == ARG_KEY.format(key=key):
matcher.set_arg(key, event)
matcher.set_arg(key, event.get_message())
return
if matcher.get_arg(key):
return
@ -654,15 +648,11 @@ class Matcher(metaclass=MatcherMeta):
def get_last_receive(self, default: T = None) -> Union[Event, T]:
return self.state.get(LAST_RECEIVE_KEY, default)
def get_arg(self, key: str, default: T = None) -> Union[Event, T]:
def get_arg(self, key: str, default: T = None) -> Union[Message, T]:
return self.state.get(ARG_KEY.format(key=key), default)
def get_arg_str(self, key: str, default: T = None) -> Union[str, T]:
return self.state.get(ARG_STR_KEY.format(key=key), default)
def set_arg(self, key: str, event: Event) -> None:
self.state[ARG_KEY.format(key=key)] = event
self.state[ARG_STR_KEY.format(key=key)] = str(event.get_message())
def set_arg(self, key: str, message: Message) -> None:
self.state[ARG_KEY.format(key=key)] = message
def set_target(self, target: str) -> None:
self.state[REJECT_TARGET] = target

View File

@ -334,7 +334,7 @@ def LastReceived(default: Any = None) -> Any:
class ArgInner:
def __init__(
self, key: Optional[str], type: Literal["event", "message", "str"]
self, key: Optional[str], type: Literal["message", "str", "plaintext"]
) -> None:
self.key = key
self.type = type
@ -344,12 +344,12 @@ def Arg(key: Optional[str] = None) -> Any:
return ArgInner(key, "message")
def ArgEvent(key: Optional[str] = None) -> Any:
return ArgInner(key, "event")
def ArgStr(key: Optional[str] = None) -> str:
return ArgInner(key, "str") # type: ignore
def ArgStr(key: Optional[str] = None) -> Any:
return ArgInner(key, "str")
def ArgPlainText(key: Optional[str] = None) -> str:
return ArgInner(key, "plaintext") # type: ignore
class ArgParam(Param):
@ -361,13 +361,15 @@ class ArgParam(Param):
return cls(Required, key=param.default.key or name, type=param.default.type)
async def _solve(self, matcher: "Matcher", **kwargs: Any) -> Any:
event = matcher.get_arg(self.extra["key"])
if self.extra["type"] == "event":
return event
elif self.extra["type"] == "message":
return event.get_message()
message = matcher.get_arg(self.extra["key"])
if message is None:
return message
if self.extra["type"] == "message":
return message
elif self.extra["type"] == "str":
return str(message)
else:
return matcher.get_arg_str(self.extra["key"])
return message.extract_plain_text()
class ExceptionParam(Param):

View File

@ -17,8 +17,6 @@ from nonebot.typing import (
T_PermissionChecker,
)
from nonebot.rule import (
PREFIX_KEY,
RAW_CMD_KEY,
Rule,
ArgumentParser,
regex,
@ -395,7 +393,9 @@ def on_command(
"""
commands = set([cmd]) | (aliases or set())
return on_message(command(*commands) & rule, **kwargs, _depth=_depth + 1)
return on_message(
command(*commands) & rule, block=False, **kwargs, _depth=_depth + 1
)
def on_shell_command(