nonebot / adapter-discord

NoneBot2 Discord 适配器 / Discord adapter for nonebot2
20 stars 6 forks source link

解析配置项 `"application_commands": {"*": ["*"]}` 时抛出 `TypeError` #16

Closed Autuamn closed 6 months ago

Autuamn commented 6 months ago

版本

log

Traceback (most recent call last):
  File "<string>", line 17, in <module>
  File ".venv\Lib\site-packages\nonebot\internal\driver\abstract.py", line 79, in register_adapter
    self._adapters[name] = adapter(self, **kwargs)
                           ^^^^^^^^^^^^^^^^^^^^^^^
  File ".venv\Lib\site-packages\nonebot\adapters\discord\adapter.py", line 43, in __init__
    self.discord_config: Config = get_plugin_config(Config)
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".venv\Lib\site-packages\nonebot\plugin\__init__.py", line 120, in get_plugin_config
    return type_validate_python(config, model_dump(get_driver().config))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".venv\Lib\site-packages\nonebot\compat.py", line 215, in type_validate_python
    return TypeAdapter(type_).validate_python(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".venv\Lib\site-packages\pydantic\type_adapter.py", line 256, in validate_python
    return self.validator.validate_python(__object, strict=strict, from_attributes=from_attributes, context=context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".venv\Lib\site-packages\nonebot\adapters\discord\api\model.py", line 113, in validate
    raise TypeError(f"{value!r} is not int or str of int")
TypeError: '*' is not int or str of int

尝试

以上两种情况不会报错,只要 [] 里包含 "*" 就会报错


https://github.com/nonebot/adapter-discord/blob/6c9a24b52d4b8b6efc840597b926293fd75c7762/nonebot/adapters/discord/config.py#L57-L59 尝试把此处的 Union 写成 Union[Literal["*"], Snowflake] 就不会报错

🤔十分神奇,请求支援

CMHopeSunshine commented 6 months ago

应该是pydantic v1和v2的union机制不同,方便开个pr调整一下union顺序吗