[Bug] `Sparkle` 中 `__getitem__` 和 `get` 方法的 `item` 参数类型注解有误
Closed this issue · 2 comments
Redlnn commented
问题
Sparkle
中 __getitem__
和 get
方法的 item
参数类型注解为 str
但实际上通过 from_command
创建的 Match
的 dest
类型可为int
>>> t = Twilight.from_command('text {0} {1} {2}')
>>> print(type(t.matcher.match_ref[ParamMatch][0].dest))
<class 'int'>
检查后发现是 graia.ariadne.message.parser.util
的 tokenize_command
函数 126 行的 int(i) if re.match(r"\d+", i) else unescape(i) for i in "".join(char_stk).split("|")
所导致的,因不清楚此处的 int(i) 有何作用,所以开一个 issue
BlueGlassBlock commented
。。?现在 MatchResult
的分派操作不需要支持 int
了
你可以让这个跑起来吗:
def (1: MatchResult): ...
Redlnn commented
。。?现在
MatchResult
的分派操作不需要支持int
了你可以让这个跑起来吗:
def (1: MatchResult): ...
那如果 from_command
这样写的话,怎么拿 {1}
的匹配结果,我这样写会在 target[1]
会标红,target['1']
会 KeyError,target['t']
则正常
@bcc.receiver(
GroupMessage,
dispatchers=[
Twilight.from_command('test {t} {1} {2}')
],
)
async def b(msg: MessageChain, target: Sparkle, t: MatchResult):
print(msg)
print(target[1])
print(target['t'])
print(t)