Helper for extracting BaseBotContext from Message or CallbackQuery.
Normalizes user_id: if from_user is missing (e.g., a post in a channel),
it uses chat_id as a fallback for session uniqueness.
Example
ctx = ContextHelper.extract_base_context(callback)
director = Director(container=container, state=state,
user_id=ctx.user_id, chat_id=ctx.chat_id)
Source code in src/codex_bot/helper/context_helper.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 | class ContextHelper:
"""
Helper for extracting BaseBotContext from Message or CallbackQuery.
Normalizes user_id: if from_user is missing (e.g., a post in a channel),
it uses chat_id as a fallback for session uniqueness.
Example:
```python
ctx = ContextHelper.extract_base_context(callback)
director = Director(container=container, state=state,
user_id=ctx.user_id, chat_id=ctx.chat_id)
```
"""
@staticmethod
def extract_base_context(event: Message | CallbackQuery) -> BaseBotContext:
"""
Extracts base IDs from an event.
Args:
event: Message or CallbackQuery from the user.
Returns:
Immutable BaseBotContext with user_id, chat_id, message_id, thread_id.
"""
user_id = event.from_user.id if event.from_user else 0
chat_id = user_id
message_id: int | None = None
thread_id: int | None = None
if isinstance(event, CallbackQuery):
if isinstance(event.message, Message):
chat_id = event.message.chat.id
message_id = event.message.message_id
thread_id = event.message.message_thread_id
if user_id == 0:
user_id = chat_id
elif isinstance(event, Message):
chat_id = event.chat.id
message_id = event.message_id
thread_id = event.message_thread_id
if user_id == 0:
user_id = chat_id
return BaseBotContext(
user_id=user_id,
chat_id=chat_id,
message_id=message_id,
message_thread_id=thread_id,
)
|
Functions
Extracts base IDs from an event.
Parameters:
| Name |
Type |
Description |
Default |
event
|
Message | CallbackQuery
|
Message or CallbackQuery from the user.
|
required
|
Returns:
| Type |
Description |
BaseBotContext
|
Immutable BaseBotContext with user_id, chat_id, message_id, thread_id.
|
Source code in src/codex_bot/helper/context_helper.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 | @staticmethod
def extract_base_context(event: Message | CallbackQuery) -> BaseBotContext:
"""
Extracts base IDs from an event.
Args:
event: Message or CallbackQuery from the user.
Returns:
Immutable BaseBotContext with user_id, chat_id, message_id, thread_id.
"""
user_id = event.from_user.id if event.from_user else 0
chat_id = user_id
message_id: int | None = None
thread_id: int | None = None
if isinstance(event, CallbackQuery):
if isinstance(event.message, Message):
chat_id = event.message.chat.id
message_id = event.message.message_id
thread_id = event.message.message_thread_id
if user_id == 0:
user_id = chat_id
elif isinstance(event, Message):
chat_id = event.chat.id
message_id = event.message_id
thread_id = event.message_thread_id
if user_id == 0:
user_id = chat_id
return BaseBotContext(
user_id=user_id,
chat_id=chat_id,
message_id=message_id,
message_thread_id=thread_id,
)
|