sidequest_common.schemas.guild_hub#
Guild hub v2 schemas: the addon export/import v2 sections and the /api/guild/* HTTP API.
local://addon-contract-v2.md is the source of truth; field names and string prefixes here are binding. Lua json
encoders drop nil keys rather than emitting null (see sidequest_common.schemas.epgp), so every nullable
contract field here is a pydantic default, not a required key.
Attributes#
Classes#
Count of new announcement rows inserted by one import. |
|
Body for |
|
Response for |
|
Where an announcement was made. |
|
Count of new bank log rows inserted by one import. |
|
What kind of guild bank activity log row this is. |
|
Response for |
|
One row of |
|
Response for |
|
One recruit, as returned by |
|
Body for |
|
Body for |
|
One announcement posted in game. |
|
One guild bank log row. |
|
One officer note about a character. |
|
One character's profession scan in the export payload. |
|
One known recipe in a profession scan. |
|
One recruiting candidate in the export payload. |
|
One officer's vote on a recruit, within the export payload. |
|
The |
|
One roster row in the export payload's |
|
One in-game sign-up relayed by an officer's addon. |
|
One earned badge's id and display name. |
|
One of a member's characters in the |
|
One character's profession, recipes as ids (named in the shared |
|
One inactive member flagged in the officer-only game-import part. |
|
One ledger row in a member's on-demand sheet. |
|
One loot row in a member's on-demand sheet. |
|
One |
|
One |
|
One note in the officer-only game-import part: same shape as the export. |
|
The officer-only part of the game-import payload, never broadcast to the whole guild. |
|
One recruit in the officer-only game-import part: same shape as the export, plus |
|
One member's on-demand sheet: last 15 ledger entries and last 10 loot wins. |
|
Body for |
|
One row of |
|
Response for |
|
Response for |
|
One row of |
|
Deposit/withdrawal totals over the last 30 days, for |
|
How many characters know each profession, for the |
|
One matched recipe and the characters that know it. |
|
One character that knows a matched recipe, in |
|
Response for |
|
One row of |
|
Response for |
|
Response for |
|
One of a member's characters on |
|
One member's row on |
|
One roster-only character with no linked member, on |
|
Counts for the |
|
What kind of guild news feed item this is. |
|
One queued Discord announcement, for |
|
Response for |
|
Count of profession rows upserted by one import. |
|
An officer's vetting checklist for one recruit. |
|
Counts for the |
|
A recruiting candidate's status in the vetting pipeline. |
|
An officer's vote on a recruit. |
|
Count of roster rows upserted by one import. |
|
Counts for the |
Module Contents#
- class sidequest_common.schemas.guild_hub.AnnouncementImportCounts#
Bases:
pydantic.BaseModelCount of new announcement rows inserted by one import.
- new: int = 0#
- class sidequest_common.schemas.guild_hub.AnnouncementPosted#
Bases:
pydantic.BaseModelBody for
POST /api/guilds/{guild_id}/announcements/{id}/posted(bot).- message_id: int#
- class sidequest_common.schemas.guild_hub.AnnouncementPostedResult#
Bases:
pydantic.BaseModelResponse for
POST /api/guilds/{guild_id}/announcements/{id}/posted(bot).- message_id: int#
- class sidequest_common.schemas.guild_hub.AnnouncementSource#
Bases:
enum.StrEnumWhere an announcement was made.
Initialize self. See help(type(self)) for accurate signature.
- GAME = 'game'#
- SITE = 'site'#
- class sidequest_common.schemas.guild_hub.BankImportCounts#
Bases:
pydantic.BaseModelCount of new bank log rows inserted by one import.
- new: int = 0#
- class sidequest_common.schemas.guild_hub.BankKind#
Bases:
enum.StrEnumWhat kind of guild bank activity log row this is.
Initialize self. See help(type(self)) for accurate signature.
- BUY_TAB = 'buy_tab'#
- DEPOSIT = 'deposit'#
- DEPOSIT_MONEY = 'deposit_money'#
- MOVE = 'move'#
- REPAIR = 'repair'#
- WITHDRAW = 'withdraw'#
- WITHDRAW_MONEY = 'withdraw_money'#
- class sidequest_common.schemas.guild_hub.EpgpMemberNoteList#
Bases:
pydantic.BaseModelResponse for
GET /api/epgp/member-notes(officer).- notes: list[EpgpMemberNoteRow]#
- class sidequest_common.schemas.guild_hub.EpgpMemberNoteRow#
Bases:
pydantic.BaseModelOne row of
GET /api/epgp/member-notes(officer).- at: datetime.datetime#
- character: str#
- id: uuid.UUID#
- member_id: int | None#
- note: str#
- officer: str#
- voided: bool#
- class sidequest_common.schemas.guild_hub.EpgpRecruitList#
Bases:
pydantic.BaseModelResponse for
GET /api/epgp/recruits(officer).- recruits: list[EpgpRecruitRow]#
- class sidequest_common.schemas.guild_hub.EpgpRecruitRow#
Bases:
pydantic.BaseModelOne recruit, as returned by
GET /api/epgp/recruits/ mutated byPUT .../{id}.- at: datetime.datetime#
- character: str#
- checklist: RecruitChecklist#
- id: uuid.UUID#
- member_id: int | None#
- model_config#
- note: str | None#
- status: RecruitStatus#
- votes: list[ExportRecruitVote]#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.guild_hub.EpgpRecruitUpdate#
Bases:
pydantic.BaseModelBody for
PUT /api/epgp/recruits/{id}(officer). Only fields present change.- checklist: RecruitChecklist | None = None#
- note: str | None#
- status: RecruitStatus | None = None#
- class sidequest_common.schemas.guild_hub.EpgpRecruitVoteCreate#
Bases:
pydantic.BaseModelBody for
POST /api/epgp/recruits/{id}/votes(officer).- vote: RecruitVoteChoice#
- class sidequest_common.schemas.guild_hub.ExportAnnouncement#
Bases:
pydantic.BaseModelOne announcement posted in game.
- at: int#
- discord: bool = False#
- id: str#
- officer: str#
- text: str#
- class sidequest_common.schemas.guild_hub.ExportBankEntry#
Bases:
pydantic.BaseModelOne guild bank log row.
- at: int#
- character: str | None#
- count: int = 0#
- id: str#
- item_id: int | None = None#
- item_name: str | None#
- money: int = 0#
- tab: int | None = None#
- class sidequest_common.schemas.guild_hub.ExportMemberNote#
Bases:
pydantic.BaseModelOne officer note about a character.
- at: int#
- character: str#
- id: str#
- note: str#
- officer: str#
- voided: bool = False#
- class sidequest_common.schemas.guild_hub.ExportProfession#
Bases:
pydantic.BaseModelOne character’s profession scan in the export payload.
- character: str#
- max_skill: int = 0#
- profession: str#
- recipes: list[ExportRecipe]#
- scanned_at: int#
- skill: int = 0#
- class sidequest_common.schemas.guild_hub.ExportRecipe#
Bases:
pydantic.BaseModelOne known recipe in a profession scan.
- id: int#
- item_id: int | None = None#
- name: str#
- class sidequest_common.schemas.guild_hub.ExportRecruit#
Bases:
pydantic.BaseModelOne recruiting candidate in the export payload.
- at: int#
- character: str#
- checklist: RecruitChecklist#
- id: str#
- model_config#
- note: str | None#
- status: RecruitStatus#
- votes: list[ExportRecruitVote]#
- wow_class: GameClass | None#
- class sidequest_common.schemas.guild_hub.ExportRecruitVote#
Bases:
pydantic.BaseModelOne officer’s vote on a recruit, within the export payload.
- at: int#
- officer: str#
- vote: RecruitVoteChoice#
- class sidequest_common.schemas.guild_hub.ExportRoster#
Bases:
pydantic.BaseModelThe
rosterobject in the export payload: one sweep, taken attaken_at.- members: list[ExportRosterMember]#
- taken_at: int#
- class sidequest_common.schemas.guild_hub.ExportRosterMember#
Bases:
pydantic.BaseModelOne roster row in the export payload’s
roster.members.- character: str#
- last_online_hours: float = 0#
- level: int = 0#
- model_config#
- online: bool = False#
- rank: str#
- rank_index: int = 0#
- wow_class: GameClass | None#
- zone: str#
- class sidequest_common.schemas.guild_hub.ExportSignupV2#
Bases:
pydantic.BaseModelOne in-game sign-up relayed by an officer’s addon.
- at: int#
- character: str#
- comment: str | None#
- event_id: uuid.UUID#
- id: str#
- model_config#
- role: sidequest_common.schemas.events.SignupRole | None = None#
- wow_class: GameClass | None#
- class sidequest_common.schemas.guild_hub.GameImportBadgeRef#
Bases:
pydantic.BaseModelOne earned badge’s id and display name.
- id: str#
- name: str#
- class sidequest_common.schemas.guild_hub.GameImportCharacter#
Bases:
pydantic.BaseModelOne of a member’s characters in the
membersgame-import section.- is_main: bool#
- level: int#
- model_config#
- name: str#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.guild_hub.GameImportCrafter#
Bases:
pydantic.BaseModelOne character’s profession, recipes as ids (named in the shared
recipe_namestable).- character: str#
- member_id: int | None#
- profession: str#
- recipes: list[int]#
- skill: int#
- class sidequest_common.schemas.guild_hub.GameImportInactiveMember#
Bases:
pydantic.BaseModelOne inactive member flagged in the officer-only game-import part.
- last_raid_at: int | None#
- last_seen_at: int | None#
- member_id: int#
- name: str#
- class sidequest_common.schemas.guild_hub.GameImportLedgerEntry#
Bases:
pydantic.BaseModelOne ledger row in a member’s on-demand sheet.
- amount: int#
- at: int#
- decayed: float#
- kind: str#
- note: str | None#
- reason: str#
- class sidequest_common.schemas.guild_hub.GameImportLootEntry#
Bases:
pydantic.BaseModelOne loot row in a member’s on-demand sheet.
- at: int#
- gp: int#
- item_id: int#
- item_name: str#
- quality: int#
- response: str#
- class sidequest_common.schemas.guild_hub.GameImportMember#
Bases:
pydantic.BaseModelOne
membersrow in the game-import payload’s public part.- attendance_rate: float#
- badges: list[GameImportBadgeRef]#
- characters: list[GameImportCharacter]#
- events_attended: int#
- guild_ep: int#
- main: str | None#
- member_id: int#
- model_config#
- name: str#
- raid_status: str | None#
- rank: str | None#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.guild_hub.GameImportNews#
Bases:
pydantic.BaseModelOne
newsrow in the game-import payload’s public part.- at: int#
- character: str | None#
- id: str#
- item_id: int | None#
- quality: int | None#
- text: str#
- class sidequest_common.schemas.guild_hub.GameImportOfficerNote#
Bases:
pydantic.BaseModelOne note in the officer-only game-import part: same shape as the export.
- at: int#
- character: str#
- id: str#
- note: str#
- officer: str#
- voided: bool#
- class sidequest_common.schemas.guild_hub.GameImportOfficerPart#
Bases:
pydantic.BaseModelThe officer-only part of the game-import payload, never broadcast to the whole guild.
- inactive: list[GameImportInactiveMember]#
- member_notes: list[GameImportOfficerNote]#
- recruits: list[GameImportOfficerRecruit]#
- class sidequest_common.schemas.guild_hub.GameImportOfficerRecruit#
Bases:
pydantic.BaseModelOne recruit in the officer-only game-import part: same shape as the export, plus
member_id.- at: int#
- character: str#
- checklist: RecruitChecklist#
- id: str#
- member_id: int | None#
- model_config#
- note: str | None#
- status: RecruitStatus#
- votes: list[ExportRecruitVote]#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.guild_hub.GameImportSheet#
Bases:
pydantic.BaseModelOne member’s on-demand sheet: last 15 ledger entries and last 10 loot wins.
- ledger: list[GameImportLedgerEntry]#
- loot: list[GameImportLootEntry]#
- class sidequest_common.schemas.guild_hub.GuildAnnouncementCreate#
Bases:
pydantic.BaseModelBody for
POST /api/guild/announcements(officer).- discord: bool = False#
- text: str#
- class sidequest_common.schemas.guild_hub.GuildAnnouncementRow#
Bases:
pydantic.BaseModelOne row of
GET /api/guild/announcements(public).- at: datetime.datetime#
- author: str#
- id: uuid.UUID#
- posted_at: datetime.datetime | None#
- source: AnnouncementSource#
- text: str#
- class sidequest_common.schemas.guild_hub.GuildAnnouncementsPage#
Bases:
pydantic.BaseModelResponse for
GET /api/guild/announcements(public), newest first, last 20.- items: list[GuildAnnouncementRow]#
- class sidequest_common.schemas.guild_hub.GuildBankPage#
Bases:
pydantic.BaseModelResponse for
GET /api/guild/bank(member), newest first.- rows: list[GuildBankRow]#
- totals: GuildBankTotals#
- class sidequest_common.schemas.guild_hub.GuildBankRow#
Bases:
pydantic.BaseModelOne row of
GET /api/guild/bank(member).- at: datetime.datetime#
- character: str | None#
- count: int#
- id: uuid.UUID#
- item_id: int | None#
- item_name: str | None#
- member_name: str | None#
- money: int#
- tab: int | None#
- class sidequest_common.schemas.guild_hub.GuildBankTotals#
Bases:
pydantic.BaseModelDeposit/withdrawal totals over the last 30 days, for
GET /api/guild/bank.- deposits_30d: int#
- withdrawals_30d: int#
- class sidequest_common.schemas.guild_hub.GuildCrafterProfessionCount#
Bases:
pydantic.BaseModelHow many characters know each profession, for the
professionsfilter list.- crafters: int#
- profession: str#
- class sidequest_common.schemas.guild_hub.GuildCrafterResult#
Bases:
pydantic.BaseModelOne matched recipe and the characters that know it.
- crafters: list[GuildCrafterRow]#
- item_id: int | None#
- recipe_id: int#
- recipe_name: str#
- class sidequest_common.schemas.guild_hub.GuildCrafterRow#
Bases:
pydantic.BaseModelOne character that knows a matched recipe, in
GET /api/guild/crafters.- character: str#
- member_id: int | None#
- member_name: str | None#
- profession: str#
- skill: int#
- class sidequest_common.schemas.guild_hub.GuildCrafters#
Bases:
pydantic.BaseModelResponse for
GET /api/guild/crafters(member).- professions: list[GuildCrafterProfessionCount]#
- results: list[GuildCrafterResult]#
- class sidequest_common.schemas.guild_hub.GuildNewsItem#
Bases:
pydantic.BaseModelOne row of
GET /api/guild/news(public).- at: datetime.datetime#
- character: str | None#
- id: uuid.UUID#
- item_id: int | None#
- quality: int | None#
- text: str#
- class sidequest_common.schemas.guild_hub.GuildNewsPage#
Bases:
pydantic.BaseModelResponse for
GET /api/guild/news(public), newest first.- items: list[GuildNewsItem]#
- class sidequest_common.schemas.guild_hub.GuildRoster#
Bases:
pydantic.BaseModelResponse for
GET /api/guild/roster(member).- members: list[GuildRosterMember]#
- taken_at: datetime.datetime | None#
- unlinked: list[GuildRosterUnlinked]#
- class sidequest_common.schemas.guild_hub.GuildRosterCharacter#
Bases:
pydantic.BaseModelOne of a member’s characters on
GET /api/guild/roster.- is_main: bool#
- last_seen_at: datetime.datetime#
- level: int#
- model_config#
- name: str#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- zone: str#
- class sidequest_common.schemas.guild_hub.GuildRosterMember#
Bases:
pydantic.BaseModelOne member’s row on
GET /api/guild/roster, alts grouped under their main.- characters: list[GuildRosterCharacter]#
- main: str | None#
- member_id: int#
- name: str#
- raid_status: str | None#
- rank: str | None#
- class sidequest_common.schemas.guild_hub.GuildRosterUnlinked#
Bases:
pydantic.BaseModelOne roster-only character with no linked member, on
GET /api/guild/roster.- last_seen_at: datetime.datetime#
- level: int#
- model_config#
- name: str#
- rank: str#
- wow_class: sidequest_common.schemas.events.WowClass | None#
- class sidequest_common.schemas.guild_hub.MemberNoteImportCounts#
Bases:
pydantic.BaseModelCounts for the
member_notessection of one import.- new: int = 0#
- updated: int = 0#
- voided: int = 0#
- class sidequest_common.schemas.guild_hub.NewsKind#
Bases:
enum.StrEnumWhat kind of guild news feed item this is.
Initialize self. See help(type(self)) for accurate signature.
- ANNOUNCEMENT = 'announcement'#
- BADGE = 'badge'#
- BOSS_KILL = 'boss_kill'#
- FIRST_KILL = 'first_kill'#
- JOINED = 'joined'#
- LEVEL = 'level'#
- LOOT = 'loot'#
- class sidequest_common.schemas.guild_hub.PendingAnnouncement#
Bases:
pydantic.BaseModelOne queued Discord announcement, for
GET /api/guilds/{guild_id}/announcements/pending(bot).- at: datetime.datetime#
- author: str#
- id: uuid.UUID#
- text: str#
- class sidequest_common.schemas.guild_hub.PendingAnnouncementsPage#
Bases:
pydantic.BaseModelResponse for
GET /api/guilds/{guild_id}/announcements/pending(bot).- items: list[PendingAnnouncement]#
- class sidequest_common.schemas.guild_hub.ProfessionImportCounts#
Bases:
pydantic.BaseModelCount of profession rows upserted by one import.
- updated: int = 0#
- class sidequest_common.schemas.guild_hub.RecruitChecklist#
Bases:
pydantic.BaseModelAn officer’s vetting checklist for one recruit.
- first_raid: bool = False#
- gear_check: bool = False#
- talked: bool = False#
- vouched: bool = False#
- class sidequest_common.schemas.guild_hub.RecruitImportCounts#
Bases:
pydantic.BaseModelCounts for the
recruitssection of one import.- new: int = 0#
- updated: int = 0#
- class sidequest_common.schemas.guild_hub.RecruitStatus#
Bases:
enum.StrEnumA recruiting candidate’s status in the vetting pipeline.
Initialize self. See help(type(self)) for accurate signature.
- ACCEPTED = 'accepted'#
- APPLICANT = 'applicant'#
- DECLINED = 'declined'#
- TRIAL = 'trial'#
- class sidequest_common.schemas.guild_hub.RecruitVoteChoice#
Bases:
enum.StrEnumAn officer’s vote on a recruit.
Initialize self. See help(type(self)) for accurate signature.
- NO = 'no'#
- WAIT = 'wait'#
- YES = 'yes'#
- class sidequest_common.schemas.guild_hub.RosterImportCounts#
Bases:
pydantic.BaseModelCount of roster rows upserted by one import.
- updated: int = 0#
- class sidequest_common.schemas.guild_hub.SignupImportCounts#
Bases:
pydantic.BaseModelCounts for the
signupssection of one import.- applied: int = 0#
- skipped_older: int = 0#
- unlinked: int = 0#
- sidequest_common.schemas.guild_hub.ANNOUNCEMENT_TEXT_MAX = 500#
- sidequest_common.schemas.guild_hub.INACTIVE_AFTER_DAYS = 14#
- sidequest_common.schemas.guild_hub.LEFT_GUILD_AFTER_DAYS = 30#
- sidequest_common.schemas.guild_hub.LEVEL_MILESTONE_STEP = 10#
- sidequest_common.schemas.guild_hub.MAX_ANNOUNCEMENTS_V2 = 200#
- sidequest_common.schemas.guild_hub.MAX_BANK_ENTRIES = 2000#
- sidequest_common.schemas.guild_hub.MAX_MEMBER_NOTES_V2 = 500#
- sidequest_common.schemas.guild_hub.MAX_PROFESSION_PAIRS = 400#
- sidequest_common.schemas.guild_hub.MAX_RECIPES_PER_PROFESSION = 2000#
- sidequest_common.schemas.guild_hub.MAX_RECRUITS_V2 = 200#
- sidequest_common.schemas.guild_hub.MAX_ROSTER_MEMBERS = 1000#
- sidequest_common.schemas.guild_hub.MAX_SIGNUPS_V2 = 500#
- sidequest_common.schemas.guild_hub.NOTE_TEXT_MAX = 500#
- sidequest_common.schemas.guild_hub.RECRUIT_NOTE_MAX = 500#