Add support for guild onboarding

Co-authored-by: Josh <8677174+bijij@users.noreply.github.com>
Co-authored-by: Josh <josh.ja.butt@gmail.com>
Co-authored-by: numbermaniac <5206120+numbermaniac@users.noreply.github.com>
Co-authored-by: Andrin <65789180+Puncher1@users.noreply.github.com>
Co-authored-by: Andrin Schaller <65789180+codeofandrin@users.noreply.github.com>
Co-authored-by: DA344 <108473820+DA-344@users.noreply.github.com>
This commit is contained in:
Soheab
2025-08-08 09:10:32 +02:00
committed by GitHub
parent 21fed315c7
commit 7b3f798044
13 changed files with 869 additions and 13 deletions

View File

@ -44,6 +44,7 @@ from .sticker import GuildSticker
from .threads import Thread
from .integrations import PartialIntegration
from .channel import ForumChannel, StageChannel, ForumTag
from .onboarding import OnboardingPrompt, OnboardingPromptOption
__all__ = (
'AuditLogDiff',
@ -73,6 +74,7 @@ if TYPE_CHECKING:
from .types.snowflake import Snowflake
from .types.command import ApplicationCommandPermissions
from .types.automod import AutoModerationAction
from .types.onboarding import Prompt as PromptPayload, PromptOption as PromptOptionPayload
from .user import User
from .app_commands import AppCommand
from .webhook import Webhook
@ -246,6 +248,16 @@ def _transform_default_emoji(entry: AuditLogEntry, data: str) -> PartialEmoji:
return PartialEmoji(name=data)
def _transform_onboarding_prompts(entry: AuditLogEntry, data: List[PromptPayload]) -> List[OnboardingPrompt]:
return [OnboardingPrompt.from_dict(data=prompt, state=entry._state, guild=entry.guild) for prompt in data]
def _transform_onboarding_prompt_options(
entry: AuditLogEntry, data: List[PromptOptionPayload]
) -> List[OnboardingPromptOption]:
return [OnboardingPromptOption.from_dict(data=option, state=entry._state, guild=entry.guild) for option in data]
E = TypeVar('E', bound=enums.Enum)
@ -268,13 +280,15 @@ def _flag_transformer(cls: Type[F]) -> Callable[[AuditLogEntry, Union[int, str]]
def _transform_type(
entry: AuditLogEntry, data: Union[int, str]
) -> Union[enums.ChannelType, enums.StickerType, enums.WebhookType, str]:
) -> Union[enums.ChannelType, enums.StickerType, enums.WebhookType, str, enums.OnboardingPromptType]:
if entry.action.name.startswith('sticker_'):
return enums.try_enum(enums.StickerType, data)
elif entry.action.name.startswith('integration_'):
return data # type: ignore # integration type is str
elif entry.action.name.startswith('webhook_'):
return enums.try_enum(enums.WebhookType, data)
elif entry.action.name.startswith('onboarding_prompt_'):
return enums.try_enum(enums.OnboardingPromptType, data)
else:
return enums.try_enum(enums.ChannelType, data)
@ -353,7 +367,11 @@ class AuditLogChanges:
'flags': (None, _transform_overloaded_flags),
'default_reaction_emoji': (None, _transform_default_reaction),
'emoji_name': ('emoji', _transform_default_emoji),
'user_id': ('user', _transform_member_id)
'user_id': ('user', _transform_member_id),
'options': (None, _transform_onboarding_prompt_options),
'prompts': (None, _transform_onboarding_prompts),
'default_channel_ids': ('default_channels', _transform_channels_or_threads),
'mode': (None, _enum_transformer(enums.OnboardingMode)),
}
# fmt: on
@ -977,3 +995,6 @@ class AuditLogEntry(Hashable):
from .webhook import Webhook
return self._webhooks.get(target_id) or Object(target_id, type=Webhook)
def _convert_target_onboarding_prompt(self, target_id: int) -> Object:
return Object(target_id, type=OnboardingPrompt)