Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 bot.get_channel_webhooks() 时,遇到当 Channel Follower Webhook,pydantic 抛出 ValidationError #29

Open
Autuamn opened this issue May 21, 2024 · 0 comments · May be fixed by #30

Comments

@Autuamn
Copy link
Contributor

Autuamn commented May 21, 2024

Webhook类中的 source_guildsource_guild 并不是完整的 ChannelGuild, 导致 pydantic 抛出 ValidationError

Example Channel Follower Webhook

{
  "type": 2,
  "id": "752831914402115456",
  "name": "Guildy name",
  "avatar": "bb71f469c158984e265093a81b3397fb",
  "channel_id": "561885260615255432",
  "guild_id": "56188498421443265",
  "application_id": null,
  "source_guild": {
    "id": "56188498421476534",
    "name": "Guildy name",
    "icon": "bb71f469c158984e265093a81b3397fb"
  },
  "source_channel": {
    "id": "5618852344134324",
    "name": "announcements"
  },
  "user": {
    "username": "test",
    "discriminator": "7479",
    "id": "190320984123768832",
    "avatar": "b004ec1740a63ca06ae2e14c5cee11f3",
    "public_flags": 131328
  }
}

我收到的

{
    "application_id": null,
    "avatar": "e0582bf64ecc58c529f16bf9f672943a",
    "channel_id": "1180868274368548975",
    "guild_id": "1171294052839333910",
    "id": "111",
    "name": "CoFH #thaumcraft-teasers",
    "type": 2,
    "user": {
        "id": "474564749217234954",
        "username": "autuamn_end",
        "avatar": "7a8c1eacb63acfd711543f86244e5572",
        "discriminator": "0",
        "public_flags": 0,
        "flags": 0,
        "banner": null,
        "accent_color": null,
        "global_name": "Autuamn End",
        "avatar_decoration_data": null,
        "banner_color": null,
        "clan": null
    },
    "source_guild": {
        "id": "399037120930512897",
        "icon": "e0582bf64ecc58c529f16bf9f672943a",
        "name": "CoFH"
    },
    "source_channel": {
        "id": "1098341229491654827",
        "name": "thaumcraft-teasers"
    }
}
log

05-21 11:46:37 [TRACE] nonebot | Discord | API code: 200 response: b'[{"application_id":null,"avatar":"e0582bf64ecc58c529f16bf9f672943a","channel_id":"1180868274368548975","guild_id":"1171294052839333910","id":"111","name":"CoFH #thaumcraft-teasers","type":2,"user":{"id":"474564749217234954","username":"autuamn_end","avatar":"7a8c1eacb63acfd711543f86244e5572","discriminator":"0","public_flags":0,"flags":0,"banner":null,"accent_color":null,"global_name":"Autuamn End","avatar_decoration_data":null,"banner_color":null,"clan":null},"source_guild":{"id":"399037120930512897","icon":"e0582bf64ecc58c529f16bf9f672943a","name":"CoFH"},"source_channel":{"id":"1098341229491654827","name":"thaumcraft-teasers"}}]\n'
05-21 11:46:37 [ERROR] nonebot | Error when running WebSocketConnection hook. Running cancelled!
Traceback (most recent call last):
  File "<string>", line 17, in <module>
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\__init__.py", line 334, in run
    get_driver().run(*args, **kwargs)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\drivers\none.py", line 56, in run
    loop.run_until_complete(self._serve())
  File "C:\Program Files\Python312\Lib\asyncio\base_events.py", line 651, in run_until_complete
    self.run_forever()
  File "C:\Program Files\Python312\Lib\asyncio\windows_events.py", line 321, in run_forever
    super().run_forever()
  File "C:\Program Files\Python312\Lib\asyncio\base_events.py", line 618, in run_forever
    self._run_once()
  File "C:\Program Files\Python312\Lib\asyncio\base_events.py", line 1951, in _run_once
    handle._run()
  File "C:\Program Files\Python312\Lib\asyncio\events.py", line 84, in _run
    self._context.run(self._callback, *self._args)
> File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\internal\driver\abstract.py", line 156, in _run_hook
    await asyncio.gather(*coros)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\utils.py", line 249, in run_coro_with_catch
    return await coro
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\dependencies\__init__.py", line 106, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\src\plugins\sync_message_to_discord\__init__.py", line 79, in get_webhook
    list_list_webhook = await asyncio.gather(*task_get_webhook)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\internal\adapter\bot.py", line 122, in call_api
    raise exception
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\internal\adapter\bot.py", line 97, in call_api
    result = await self.adapter._call_api(self, api, **data)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\adapters\discord\adapter.py", line 455, in _call_api
    return await api_handler(self, bot, **data)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\adapters\discord\api\handle.py", line 2861, in _get_channel_webhooks
    return type_validate_python(List[Webhook], await _request(adapter, bot, request))
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\nonebot\compat.py", line 215, in type_validate_python
    return TypeAdapter(type_).validate_python(data)
  File "C:\Users\autua\Desktop\NoneBot\DiscordBot\.venv\Lib\site-packages\pydantic\type_adapter.py", line 260, in validate_python
    return self.validator.validate_python(object, strict=strict, from_attributes=from_attributes, context=context)
pydantic_core._pydantic_core.ValidationError: 30 validation errors for list[Webhook]
1.source_guild.literal[<UNSET>]
  Input should be <UNSET> [type=literal_error, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/literal_error
1.source_guild.Guild.splash
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.discovery_splash
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.owner_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.afk_channel_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.afk_timeout
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.verification_level
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.default_message_notifications
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.explicit_content_filter
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.roles
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.emojis
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.features
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.mfa_level
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.application_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.system_channel_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.system_channel_flags
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.rules_channel_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.max_presences
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.max_members
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.vanity_url_code
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.description
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.banner
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.premium_tier
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.premium_subscription_count
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.preferred_locale
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.public_updates_channel_id
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.nsfw_level
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_guild.Guild.premium_progress_bar_enabled
  Field required [type=missing, input_value={'id': '39903712093051289...72943a', 'name': 'CoFH'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing
1.source_channel.literal[<UNSET>]
  Input should be <UNSET> [type=literal_error, input_value={'id': '10983412294916548...': 'thaumcraft-teasers'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/literal_error
1.source_channel.Channel.type
  Field required [type=missing, input_value={'id': '10983412294916548...': 'thaumcraft-teasers'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.7/v/missing

@Autuamn Autuamn changed the title 应为 class Webhook 中的 source_guildsource_guild 新建类型 使用 bot.get_channel_webhooks() 时,遇到当 Channel Follower Webhook,pydantic 抛出 ValidationError May 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant