Как стать автором
Обновить

Комментарии 8

А почему onScopeChanged это MutableSharedFlow а не MutableStateFlow? Кому-то может быть интересен набор команд который был до настоящего момента?

Shared выдает данные, появляющиеся с момента подписки и до момента отписки
State - это shared flow, но он предназначен для обращения к последнему элементу

Нам последний элемент не важен, нам важно следить за изменениями :)

что значить "следить за изменениями"? Как раз только последний (текущий) элемент и важен, а предыдущие - ну я чесгоря не представляю сценария где они могут быть интересны. Да, по дефолту у MutableSharedFlow replay: Int = 0 - так что "перепроигрывать" прошлые подписки в этом конкретном коде он не будет, и память течь тоже не будет - но ИМХО все же тут типичный сценарий для StateFlow

А где мне использовать последнее состояние?:) На данный момент я подписываюсь на поток данных, а вот последнее состояние я нигде не использую

У SharedFlow и StateFlow разный паттерн использования. SharedFlow - это значит что нам интересны replay=N последних состояний. StateFlow - это значит что нам интересно только последнее состояние. Грубо говоря, StateFlow - это одновременно И переменная И возможность слушать ее изменения. Т.е. по-хорошему - нужно и scopesCommands и onScopeChanged иметь одной переменной, scopeCommands = MutableStateFlow<...>(emptyMap()). Тогда изменение ее (scopeCommands.value += aaa или scopeCommands.value -= bbb) - будет автоматически emit-ить в нужный flow.

Я не знаю, кто вам сказал, что shared flow про replay (если бы он был про replay - последний не имел бы дефолтного значения и уж точно не равнялся 0 по-умолчанию)

Нам не нужна переменная в рамках работы по прослушиванию потока данных, поэтому нам не нужен StateFlow :)

Вы пытаетесь смешать мух с котлетами - у нас есть текущее состояние кипера и у нас есть поток его гранулярных изменений. Если я создам StateFlow для всего keeper и буду уведомлять именно об актуальном состоянии набора данных - я во-первых не буду знать, что конкретно изменилось, а во-вторых - буду знать слишком много о том, где/как/в каком виде у нас хранится набор команд. Сейчас же при необходимости и запросе со стороны пользователей получится выделить интерфейс для keeper и делать сохранение команд как нам хочется

Можно тоже самое сделать только не от бота , а от своего аккаунта , со своим логином и паролем?

Да, но не с этими либами. Для этого используется клиентский API (который команда Telegram вообще настоятельно просит использовать только для кастомных клиентов, а не ботов)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории