mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-28 04:26:24 +08:00
Some new things
This commit is contained in:
parent
4bc2b3c979
commit
8faee1151f
@ -74,17 +74,26 @@ def _find_command(name: Tuple[str]) -> Optional[Command]:
|
|||||||
|
|
||||||
|
|
||||||
class Session:
|
class Session:
|
||||||
__slots__ = ('cmd', 'arg', 'arg_text',
|
__slots__ = ('cmd', 'ctx',
|
||||||
'images', 'data', 'last_interaction')
|
'current_key', 'current_arg', 'current_arg_text',
|
||||||
|
'images', 'args', 'last_interaction')
|
||||||
|
|
||||||
def __init__(self, cmd: Command, arg: str = ''):
|
def __init__(self, cmd: Command, ctx: Dict[str, Any],
|
||||||
|
current_arg: str = ''):
|
||||||
self.cmd = cmd
|
self.cmd = cmd
|
||||||
self.arg = arg
|
self.ctx = ctx
|
||||||
self.arg_text = Message(arg).extract_plain_text()
|
self.current_key = None
|
||||||
|
self.current_arg = current_arg
|
||||||
|
self.current_arg_text = Message(current_arg).extract_plain_text()
|
||||||
self.images = []
|
self.images = []
|
||||||
self.data = {}
|
self.args = {}
|
||||||
self.last_interaction = None
|
self.last_interaction = None
|
||||||
|
|
||||||
|
def require_arg(self, key: str, *,
|
||||||
|
interactive: bool = True, prompt: str = ''):
|
||||||
|
# TODO: 检查 key 是否在 args 中,如果不在,抛出异常,保存 session,等待用户填充
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
async def handle_command(bot: CQHttp, ctx: Dict[str, Any]) -> bool:
|
async def handle_command(bot: CQHttp, ctx: Dict[str, Any]) -> bool:
|
||||||
# TODO: check if there is a session
|
# TODO: check if there is a session
|
||||||
@ -126,7 +135,7 @@ async def handle_command(bot: CQHttp, ctx: Dict[str, Any]) -> bool:
|
|||||||
if not cmd:
|
if not cmd:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
session = Session(cmd=cmd, arg=''.join(cmd_remained))
|
session = Session(cmd=cmd, ctx=ctx, current_arg=''.join(cmd_remained))
|
||||||
session.images = [s.data['url'] for s in ctx['message']
|
session.images = [s.data['url'] for s in ctx['message']
|
||||||
if s.type == 'image' and 'url' in s.data]
|
if s.type == 'image' and 'url' in s.data]
|
||||||
await cmd.run(bot, ctx, session)
|
await cmd.run(bot, ctx, session)
|
||||||
@ -150,6 +159,9 @@ def on_command(name: Union[str, Tuple[str]], aliases: Iterable = (),
|
|||||||
name=cmd_name, func=func, permission=permission)
|
name=cmd_name, func=func, permission=permission)
|
||||||
for alias in aliases:
|
for alias in aliases:
|
||||||
_aliases[alias] = cmd_name
|
_aliases[alias] = cmd_name
|
||||||
|
|
||||||
|
# TODO: 给 func 添加一个 argparser 装饰器,用于注册它的参数解析器
|
||||||
|
|
||||||
return func
|
return func
|
||||||
|
|
||||||
return deco
|
return deco
|
||||||
|
@ -2,14 +2,21 @@ from aiocqhttp.message import unescape
|
|||||||
|
|
||||||
import none
|
import none
|
||||||
from none import permissions as perm
|
from none import permissions as perm
|
||||||
|
from none.command import Session
|
||||||
from none.helpers import send
|
from none.helpers import send
|
||||||
|
|
||||||
|
|
||||||
@none.on_command('echo')
|
@none.on_command('echo')
|
||||||
async def _(bot, ctx, session):
|
async def echo(bot, ctx, session: Session):
|
||||||
await send(bot, ctx, session.arg)
|
text = session.require_arg('text')
|
||||||
|
await send(bot, session.ctx, text)
|
||||||
|
|
||||||
|
|
||||||
|
@echo.argparser
|
||||||
|
def _(session: Session):
|
||||||
|
session.args['text'] = session.current_arg
|
||||||
|
|
||||||
|
|
||||||
@none.on_command('say', permission=perm.SUPERUSER)
|
@none.on_command('say', permission=perm.SUPERUSER)
|
||||||
async def _(bot, ctx, session):
|
async def _(bot, ctx, session: Session):
|
||||||
await send(bot, ctx, unescape(session.arg))
|
await send(bot, session.ctx, unescape(session.current_arg))
|
||||||
|
Loading…
Reference in New Issue
Block a user