Skip to content

Commit 64fa430

Browse files
committed
feat: add system events for conferences
1 parent 11dfda6 commit 64fa430

File tree

12 files changed

+576
-1
lines changed

12 files changed

+576
-1
lines changed

pybotx/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@
135135
from pybotx.models.system_events.added_to_chat import AddedToChatEvent
136136
from pybotx.models.system_events.chat_created import ChatCreatedEvent, ChatCreatedMember
137137
from pybotx.models.system_events.chat_deleted_by_user import ChatDeletedByUserEvent
138+
from pybotx.models.system_events.conference_changed import ConferenceChangedEvent
139+
from pybotx.models.system_events.conference_created import ConferenceCreatedEvent
140+
from pybotx.models.system_events.conference_deleted import ConferenceDeletedEvent
138141
from pybotx.models.system_events.cts_login import CTSLoginEvent
139142
from pybotx.models.system_events.cts_logout import CTSLogoutEvent
140143
from pybotx.models.system_events.deleted_from_chat import DeletedFromChatEvent
@@ -193,6 +196,9 @@
193196
"ChatNotFoundError",
194197
"ChatTypes",
195198
"ClientPlatforms",
199+
"ConferenceChangedEvent",
200+
"ConferenceCreatedEvent",
201+
"ConferenceDeletedEvent",
196202
"DeletedFromChatEvent",
197203
"Document",
198204
"EditMessage",

pybotx/bot/handler.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
from pybotx.models.system_events.added_to_chat import AddedToChatEvent
1010
from pybotx.models.system_events.chat_created import ChatCreatedEvent
1111
from pybotx.models.system_events.chat_deleted_by_user import ChatDeletedByUserEvent
12+
from pybotx.models.system_events.conference_changed import ConferenceChangedEvent
13+
from pybotx.models.system_events.conference_created import ConferenceCreatedEvent
14+
from pybotx.models.system_events.conference_deleted import ConferenceDeletedEvent
1215
from pybotx.models.system_events.cts_login import CTSLoginEvent
1316
from pybotx.models.system_events.cts_logout import CTSLogoutEvent
1417
from pybotx.models.system_events.deleted_from_chat import DeletedFromChatEvent
@@ -42,6 +45,9 @@
4245
HandlerFunc[InternalBotNotificationEvent],
4346
HandlerFunc[SmartAppEvent],
4447
HandlerFunc[EventEdit],
48+
HandlerFunc[ConferenceChangedEvent],
49+
HandlerFunc[ConferenceCreatedEvent],
50+
HandlerFunc[ConferenceDeletedEvent],
4551
]
4652

4753
VisibleFunc = Callable[[StatusRecipient, "Bot"], Awaitable[bool]]

pybotx/bot/handler_collector.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
from pybotx.models.system_events.added_to_chat import AddedToChatEvent
4343
from pybotx.models.system_events.chat_created import ChatCreatedEvent
4444
from pybotx.models.system_events.chat_deleted_by_user import ChatDeletedByUserEvent
45+
from pybotx.models.system_events.conference_changed import ConferenceChangedEvent
46+
from pybotx.models.system_events.conference_created import ConferenceCreatedEvent
47+
from pybotx.models.system_events.conference_deleted import ConferenceDeletedEvent
4548
from pybotx.models.system_events.cts_login import CTSLoginEvent
4649
from pybotx.models.system_events.cts_logout import CTSLogoutEvent
4750
from pybotx.models.system_events.deleted_from_chat import DeletedFromChatEvent
@@ -301,6 +304,30 @@ def event_edit(
301304
self._system_event(EventEdit, handler_func)
302305
return handler_func
303306

307+
def conference_changed(
308+
self,
309+
handler_func: HandlerFunc[ConferenceChangedEvent],
310+
) -> HandlerFunc[ConferenceChangedEvent]:
311+
"""Decorate `conference changed` event handler."""
312+
self._system_event(ConferenceChangedEvent, handler_func)
313+
return handler_func
314+
315+
def conference_created(
316+
self,
317+
handler_func: HandlerFunc[ConferenceCreatedEvent],
318+
) -> HandlerFunc[ConferenceCreatedEvent]:
319+
"""Decorate `conference created` event handler."""
320+
self._system_event(ConferenceCreatedEvent, handler_func)
321+
return handler_func
322+
323+
def conference_deleted(
324+
self,
325+
handler_func: HandlerFunc[ConferenceDeletedEvent],
326+
) -> HandlerFunc[ConferenceDeletedEvent]:
327+
"""Decorate `conference deleted` event handler."""
328+
self._system_event(ConferenceDeletedEvent, handler_func)
329+
return handler_func
330+
304331
def smartapp_event(
305332
self,
306333
handler_func: HandlerFunc[SmartAppEvent],

pybotx/models/commands.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@
1313
BotAPIChatDeletedByUser,
1414
ChatDeletedByUserEvent,
1515
)
16+
from pybotx.models.system_events.conference_changed import (
17+
BotAPIConferenceChanged,
18+
ConferenceChangedEvent,
19+
)
20+
from pybotx.models.system_events.conference_created import (
21+
BotAPIConferenceCreated,
22+
ConferenceCreatedEvent,
23+
)
24+
from pybotx.models.system_events.conference_deleted import (
25+
BotAPIConferenceDeleted,
26+
ConferenceDeletedEvent,
27+
)
1628
from pybotx.models.system_events.cts_login import BotAPICTSLogin, CTSLoginEvent
1729
from pybotx.models.system_events.cts_logout import BotAPICTSLogout, CTSLogoutEvent
1830
from pybotx.models.system_events.deleted_from_chat import (
@@ -45,6 +57,9 @@
4557
BotAPICTSLogin,
4658
BotAPICTSLogout,
4759
BotAPIEventEdit,
60+
BotAPIConferenceChanged,
61+
BotAPIConferenceCreated,
62+
BotAPIConferenceDeleted,
4863
]
4964
BotAPICommand = Union[BotAPIIncomingMessage, BotAPISystemEvent]
5065

@@ -60,5 +75,8 @@
6075
CTSLoginEvent,
6176
CTSLogoutEvent,
6277
EventEdit,
78+
ConferenceChangedEvent,
79+
ConferenceCreatedEvent,
80+
ConferenceDeletedEvent,
6381
]
6482
BotCommand = Union[IncomingMessage, SystemEvent]

pybotx/models/enums.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ class BotAPISystemEventTypes(StrEnum):
103103
LEFT_FROM_CHAT = "system:left_from_chat"
104104
SMARTAPP_EVENT = "system:smartapp_event"
105105
EVENT_EDIT = "system:event_edit"
106+
CONFERENCE_CHANGED = "system:conference_changed"
107+
CONFERENCE_CREATED = "system:conference_created"
108+
CONFERENCE_DELETED = "system:conference_deleted"
106109

107110

108111
class BotAPIClientPlatforms(Enum):
@@ -127,6 +130,13 @@ class BotAPIMentionTypes(StrEnum):
127130
ALL = "all"
128131

129132

133+
class BotAPIConferenceLinkTypes(StrEnum):
134+
PUBLIC = "public"
135+
TRUSTS = "trusts"
136+
CORPORATE = "corporate"
137+
SERVER = "server"
138+
139+
130140
class APIUserKinds(Enum):
131141
USER = "user"
132142
CTS_USER = "cts_user"
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
from dataclasses import dataclass
2+
from datetime import datetime
3+
from typing import Any, Dict, List, Literal, Optional
4+
from uuid import UUID
5+
6+
from pydantic import Field
7+
8+
from pybotx.models.api_base import VerifiedPayloadBaseModel
9+
from pybotx.models.base_command import (
10+
BaseBotAPIContext,
11+
BotAPIBaseCommand,
12+
BotAPIBaseSystemEventPayload,
13+
BotCommandBase,
14+
)
15+
from pybotx.models.bot_account import BotAccount
16+
from pybotx.models.enums import BotAPIConferenceLinkTypes, BotAPISystemEventTypes
17+
18+
19+
@dataclass
20+
class ConferenceChangedEvent(BotCommandBase):
21+
"""Event `system:conference_changed`.
22+
23+
Attributes:
24+
call_id: id conference.
25+
end_at: end conference.
26+
link_type: link type on conference (public|trusts|corporate|server)
27+
name: name conference.
28+
start_at: end conference.
29+
"""
30+
31+
access_code: Optional[str]
32+
actor: Optional[UUID]
33+
added_users: List[UUID]
34+
admins: List[UUID]
35+
call_id: UUID
36+
deleted_users: List[UUID]
37+
end_at: Optional[datetime]
38+
link: str
39+
link_id: UUID
40+
link_type: BotAPIConferenceLinkTypes
41+
members: List[UUID]
42+
name: str
43+
operation: str
44+
sip_number: int
45+
start_at: datetime
46+
47+
48+
class BotAPIConferenceChangedData(VerifiedPayloadBaseModel):
49+
access_code: Optional[str]
50+
actor: Optional[UUID]
51+
added_users: List[UUID]
52+
admins: List[UUID]
53+
call_id: UUID
54+
deleted_users: List[UUID]
55+
end_at: Optional[datetime]
56+
link: str
57+
link_id: UUID
58+
link_type: BotAPIConferenceLinkTypes
59+
members: List[UUID]
60+
name: str
61+
operation: str
62+
sip_number: int
63+
start_at: datetime
64+
65+
66+
class BotAPIConferenceChangedPayload(BotAPIBaseSystemEventPayload):
67+
body: Literal[BotAPISystemEventTypes.CONFERENCE_CHANGED]
68+
data: BotAPIConferenceChangedData
69+
70+
71+
class BotAPIConferenceChanged(BotAPIBaseCommand):
72+
payload: BotAPIConferenceChangedPayload = Field(..., alias="command")
73+
sender: BaseBotAPIContext = Field(..., alias="from")
74+
75+
def to_domain(self, raw_command: Dict[str, Any]) -> ConferenceChangedEvent:
76+
return ConferenceChangedEvent(
77+
bot=BotAccount(
78+
id=self.bot_id,
79+
host=self.sender.host,
80+
),
81+
raw_command=raw_command,
82+
access_code=self.payload.data.access_code,
83+
actor=self.payload.data.actor,
84+
added_users=self.payload.data.added_users,
85+
admins=self.payload.data.admins,
86+
call_id=self.payload.data.call_id,
87+
deleted_users=self.payload.data.deleted_users,
88+
end_at=self.payload.data.end_at,
89+
link=self.payload.data.link,
90+
link_id=self.payload.data.link_id,
91+
link_type=self.payload.data.link_type,
92+
members=self.payload.data.members,
93+
name=self.payload.data.name,
94+
operation=self.payload.data.operation,
95+
sip_number=self.payload.data.sip_number,
96+
start_at=self.payload.data.start_at,
97+
)
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from dataclasses import dataclass
2+
from typing import Any, Dict, Literal
3+
from uuid import UUID
4+
5+
from pydantic import Field
6+
7+
from pybotx.models.api_base import VerifiedPayloadBaseModel
8+
from pybotx.models.base_command import (
9+
BaseBotAPIContext,
10+
BotAPIBaseCommand,
11+
BotAPIBaseSystemEventPayload,
12+
BotCommandBase,
13+
)
14+
from pybotx.models.bot_account import BotAccount
15+
from pybotx.models.enums import BotAPISystemEventTypes
16+
17+
18+
@dataclass
19+
class ConferenceCreatedEvent(BotCommandBase):
20+
"""Event `system:conference_created`.
21+
22+
Attributes:
23+
call_id: id conference.
24+
"""
25+
26+
call_id: UUID
27+
28+
29+
class BotAPIConferenceCreatedData(VerifiedPayloadBaseModel):
30+
call_id: UUID
31+
32+
33+
class BotAPIConferenceCreatedPayload(BotAPIBaseSystemEventPayload):
34+
body: Literal[BotAPISystemEventTypes.CONFERENCE_CREATED]
35+
data: BotAPIConferenceCreatedData
36+
37+
38+
class BotAPIConferenceCreated(BotAPIBaseCommand):
39+
payload: BotAPIConferenceCreatedPayload = Field(..., alias="command")
40+
sender: BaseBotAPIContext = Field(..., alias="from")
41+
42+
def to_domain(self, raw_command: Dict[str, Any]) -> ConferenceCreatedEvent:
43+
return ConferenceCreatedEvent(
44+
bot=BotAccount(
45+
id=self.bot_id,
46+
host=self.sender.host,
47+
),
48+
raw_command=raw_command,
49+
call_id=self.payload.data.call_id,
50+
)
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from dataclasses import dataclass
2+
from typing import Any, Dict, Literal
3+
from uuid import UUID
4+
5+
from pydantic import Field
6+
7+
from pybotx.models.api_base import VerifiedPayloadBaseModel
8+
from pybotx.models.base_command import (
9+
BaseBotAPIContext,
10+
BotAPIBaseCommand,
11+
BotAPIBaseSystemEventPayload,
12+
BotCommandBase,
13+
)
14+
from pybotx.models.bot_account import BotAccount
15+
from pybotx.models.enums import BotAPISystemEventTypes
16+
17+
18+
@dataclass
19+
class ConferenceDeletedEvent(BotCommandBase):
20+
"""Event `system:conference_deleted`.
21+
22+
Attributes:
23+
call_id: id conference.
24+
"""
25+
26+
call_id: UUID
27+
28+
29+
class BotAPIConferenceDeleteData(VerifiedPayloadBaseModel):
30+
call_id: UUID
31+
32+
33+
class BotAPIConferenceDeletedPayload(BotAPIBaseSystemEventPayload):
34+
body: Literal[BotAPISystemEventTypes.CONFERENCE_DELETED]
35+
data: BotAPIConferenceDeleteData
36+
37+
38+
class BotAPIConferenceDeleted(BotAPIBaseCommand):
39+
payload: BotAPIConferenceDeletedPayload = Field(..., alias="command")
40+
sender: BaseBotAPIContext = Field(..., alias="from")
41+
42+
def to_domain(self, raw_command: Dict[str, Any]) -> ConferenceDeletedEvent:
43+
return ConferenceDeletedEvent(
44+
bot=BotAccount(
45+
id=self.bot_id,
46+
host=self.sender.host,
47+
),
48+
raw_command=raw_command,
49+
call_id=self.payload.data.call_id,
50+
)

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ per-file-ignores =
5555
pybotx/constants.py:WPS432,
5656
pybotx/__init__.py:WPS203,WPS410,WPS412,F401,
5757
# https://github.com/wemake-services/wemake-python-styleguide/issues/2172
58-
pybotx/bot/handler_collector.py:WPS226,WPS437,
58+
pybotx/bot/handler_collector.py:WPS203,WPS226,WPS437,
5959
pybotx/bot/handler.py:WPS226,
6060
pybotx/client/notifications_api/internal_bot_notification.py:WPS202,
6161
pybotx/client/smartapps_api/smartapp_custom_notification.py:WPS118,

0 commit comments

Comments
 (0)