sidequest_common.schemas.signup_notices ======================================= .. py:module:: sidequest_common.schemas.signup_notices .. autoapi-nested-parse:: New-signup officer notice outbox, and bot-key roster confirmation by Discord id. The bot polls ``GET /api/guilds/{guild_id}/signup-notices`` for members it hasn't posted a notice embed for yet (``pending``), and for already-posted notices whose embed is stale because the member was confirmed on the site since (``resolved``: needs its message edited to say so). ``POST .../signup-notices/{member_id}/ack`` tells the API the bot's message now accurately reflects the member's state, for both cases. Classes ------- .. autoapisummary:: sidequest_common.schemas.signup_notices.ConfirmByDiscordRequest sidequest_common.schemas.signup_notices.SignupNoticeAck sidequest_common.schemas.signup_notices.SignupNoticeCandidate sidequest_common.schemas.signup_notices.SignupNoticeResolution sidequest_common.schemas.signup_notices.SignupNoticesPage Module Contents --------------- .. py:class:: ConfirmByDiscordRequest Bases: :py:obj:`pydantic.BaseModel` Bot -> API: a Discord user (identified by snowflake) is taking a roster-confirmation action. ``actor_name`` is the clicking user's live Discord display name, used as the ``officer_audit`` actor snapshot only if ``actor_discord_id`` has no ``Member`` row of its own (defensive fallback; the GM gate itself requires a ``Member`` row with a configured GM role, so this normally isn't reached). .. py:attribute:: actor_discord_id :type: str .. py:attribute:: actor_name :type: str .. py:class:: SignupNoticeAck Bases: :py:obj:`pydantic.BaseModel` Bot -> API: the notice message for this member now accurately reflects their current state. .. py:attribute:: channel_id :type: int .. py:attribute:: message_id :type: int .. py:class:: SignupNoticeCandidate Bases: :py:obj:`pydantic.BaseModel` One member who has never had a signup notice posted for them, oldest first. .. py:attribute:: avatar_hash :type: str | None .. py:attribute:: battletag :type: str | None .. py:attribute:: created_at :type: datetime.datetime .. py:attribute:: discord_id :type: str .. py:attribute:: display_name :type: str .. py:attribute:: member_id :type: int .. py:attribute:: roster_confirmed :type: bool .. py:attribute:: username :type: str .. py:class:: SignupNoticeResolution Bases: :py:obj:`pydantic.BaseModel` One posted notice whose message no longer reflects the member's state (confirmed since, e.g. on the site). .. py:attribute:: channel_id :type: str .. py:attribute:: confirmed_by :type: str | None .. py:attribute:: discord_id :type: str .. py:attribute:: display_name :type: str .. py:attribute:: member_id :type: int .. py:attribute:: message_id :type: str .. py:class:: SignupNoticesPage Bases: :py:obj:`pydantic.BaseModel` API -> bot: what the signup-notices poll should act on this tick. .. py:attribute:: pending :type: list[SignupNoticeCandidate] .. py:attribute:: resolved :type: list[SignupNoticeResolution]