Завести contextvar для tg_chat_id
При написании бота часто встречается код, в котором бот реагирует на ввод пользователя и отправляет сообщение в ответ. В ответе должен быть указан атрибут tg_chat_id, значение которого приходится каждый раз откуда-то "вытаскивать":
SendBytesDocumentRequest(
chat_id=conversation_var.get().tg_chat_id,
document='\n'.join(proxys).encode(encoding='utf-8'),
filename=f'{name}.txt',
).send()
Справедливости ради, такоq кода в проекте встречается редко, потому что большинство сообщений отправляется с помощью местной реализации editable messages, где настроен общий контекст:
def get_common_context():
return {
'chat_id': conversation_var.get().tg_chat_id,
}
message_router = MessageRouter(
renderers=[
render_from_db,
create_mock_renderer(
is_mock_message_allowed=lambda: settings.ENV.DJANGO_TG_BOT_FRAMEWORK_MOCK_MESSAGES_ENABLED,
),
],
context_processors=[
get_common_context,
],
)
Возможно, фича будет востребована в ботах без editable messages.
Идеи по реализации
Contextvar либо устанавливается вручную, либо одновременно с настройкой клиента. Поддерживаться могут оба варианта
Вариант с прямой работой с contextvar нужен, чтобы переопределять дефолты позже.
Отдельная contextvar нужна, чтобы работало сразу и синхронно и асинхронно.
При реализации надо не забыть обновить доку, добавить примеры, в yaml-задание добавить истории и концепцию "Дефолтный адресат".