mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-28 05:06:56 +08:00
Make current_arg_text
and current_arg_images
readonly properties
This commit is contained in:
parent
73838ac46a
commit
1fd740d223
@ -260,8 +260,8 @@ class SwitchException(Exception):
|
|||||||
|
|
||||||
|
|
||||||
class CommandSession(BaseSession):
|
class CommandSession(BaseSession):
|
||||||
__slots__ = ('cmd', 'current_key', 'current_arg', 'current_arg_filters',
|
__slots__ = ('cmd', 'current_key', 'current_arg_filters',
|
||||||
'current_arg_text', 'current_arg_images',
|
'current_arg', '_current_arg_text', '_current_arg_images',
|
||||||
'_state', '_last_interaction', '_running')
|
'_state', '_last_interaction', '_running')
|
||||||
|
|
||||||
def __init__(self, bot: NoneBot, ctx: Context_T, cmd: Command, *,
|
def __init__(self, bot: NoneBot, ctx: Context_T, cmd: Command, *,
|
||||||
@ -272,18 +272,19 @@ class CommandSession(BaseSession):
|
|||||||
# unique key of the argument that is currently requesting (asking)
|
# unique key of the argument that is currently requesting (asking)
|
||||||
self.current_key: Optional[str] = None
|
self.current_key: Optional[str] = None
|
||||||
|
|
||||||
# initialize current argument
|
|
||||||
self.current_arg: str = '' # with potential CQ codes
|
|
||||||
self.current_arg_text: str = '' # without any CQ codes TODO: property
|
|
||||||
self.current_arg_images: List[str] = [] # image urls
|
|
||||||
self.refresh(ctx, current_arg=current_arg) # fill the above
|
|
||||||
|
|
||||||
# initialize current argument filters
|
# initialize current argument filters
|
||||||
self.current_arg_filters: Optional[List[ArgFilter_T]] = None
|
self.current_arg_filters: Optional[List[ArgFilter_T]] = None
|
||||||
|
|
||||||
|
# initialize current argument
|
||||||
|
self.current_arg: str = '' # with potential CQ codes
|
||||||
|
self._current_arg_text = None
|
||||||
|
self._current_arg_images = None
|
||||||
|
self.refresh(ctx, current_arg=current_arg) # fill the above
|
||||||
|
|
||||||
self._state: State_T = {}
|
self._state: State_T = {}
|
||||||
if args:
|
if args:
|
||||||
self._state.update(args)
|
self._state.update(args)
|
||||||
|
|
||||||
self._last_interaction = None # last interaction time of this session
|
self._last_interaction = None # last interaction time of this session
|
||||||
self._running = False
|
self._running = False
|
||||||
|
|
||||||
@ -335,6 +336,28 @@ class CommandSession(BaseSession):
|
|||||||
"""
|
"""
|
||||||
return self.state.get('argv', [])
|
return self.state.get('argv', [])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current_arg_text(self) -> str:
|
||||||
|
"""
|
||||||
|
Plain text part in the current argument, without any CQ codes.
|
||||||
|
"""
|
||||||
|
if self._current_arg_text is None:
|
||||||
|
self._current_arg_text = Message(
|
||||||
|
self.current_arg).extract_plain_text()
|
||||||
|
return self._current_arg_text
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current_arg_images(self) -> List[str]:
|
||||||
|
"""
|
||||||
|
Images (as list of urls) in the current argument.
|
||||||
|
"""
|
||||||
|
if self._current_arg_images is None:
|
||||||
|
self._current_arg_images = [
|
||||||
|
s.data['url'] for s in Message(self.current_arg)
|
||||||
|
if s.type == 'image' and 'url' in s.data
|
||||||
|
]
|
||||||
|
return self._current_arg_images
|
||||||
|
|
||||||
def refresh(self, ctx: Context_T, *, current_arg: str = '') -> None:
|
def refresh(self, ctx: Context_T, *, current_arg: str = '') -> None:
|
||||||
"""
|
"""
|
||||||
Refill the session with a new message context.
|
Refill the session with a new message context.
|
||||||
@ -344,10 +367,8 @@ class CommandSession(BaseSession):
|
|||||||
"""
|
"""
|
||||||
self.ctx = ctx
|
self.ctx = ctx
|
||||||
self.current_arg = current_arg
|
self.current_arg = current_arg
|
||||||
current_arg_as_msg = Message(current_arg)
|
self._current_arg_text = None
|
||||||
self.current_arg_text = current_arg_as_msg.extract_plain_text()
|
self._current_arg_images = None
|
||||||
self.current_arg_images = [s.data['url'] for s in current_arg_as_msg
|
|
||||||
if s.type == 'image' and 'url' in s.data]
|
|
||||||
|
|
||||||
def get(self, key: str, *,
|
def get(self, key: str, *,
|
||||||
prompt: Optional[Message_T] = None,
|
prompt: Optional[Message_T] = None,
|
||||||
@ -363,7 +384,7 @@ class CommandSession(BaseSession):
|
|||||||
|
|
||||||
:param key: argument key
|
:param key: argument key
|
||||||
:param prompt: prompt to ask the user
|
:param prompt: prompt to ask the user
|
||||||
:param arg_filters: argument filters for next user input
|
:param arg_filters: argument filters for the next user input
|
||||||
:return: the argument value
|
:return: the argument value
|
||||||
"""
|
"""
|
||||||
if key in self.state:
|
if key in self.state:
|
||||||
|
Loading…
Reference in New Issue
Block a user