aiogram_dialog
aiogram_dialog copied to clipboard
Dialog for user in multiuser chat
в диалогах встроить возможность диалог открыть для юзера или для чата. То есть записать user_id в Intent и при обработке сообщений/кликов проверять его
будет актуально для stateless диалогов
диалог запоминает intent_id который валиден только для одного юзера.
Возможна реализация обратной функциональности: диалоги, доступные всем.
Use case: подскажите, как можно реализовать бота для опросов: текст опроса, ниже кнопки с выбором ответов, а после нажатия бот возвращает соотношение проголосовавших( условно, да 70%, нет30%)
Сделать диалоги доступными для всех: Сценарий использования: Развлекательный бот для создания лобби пользователей в группе (текст с пользователями в лобби, кнопки для присоединения/выхода из него) и последующей работы с ними (True Mafia к примеру).
Кейс по диалогам, доступным всем. Пример: сбор денег на подарок босу. В групповом чате висит окно с сводной информацией из базы (сколько денег собрано). Кнопки запускаю диалоги в привате, которые позволяют менять данные на основе которых формируется сводка. В примере - пользователь может указать сумму, которую он может выделить на подарок. После создания взноса сводка обновляется. Сейчас в aiogram-dialog зачем-то данные хранятся на уровне пользователя. Чтобы кнопки работали в групповых чатах, пришлось добавили патч, который позволяет хранить данные только для чатов.
Techincal details:
- need to undarstand if a dialog is started for all/single user (what about multicast?)
- event isolation
Кейс модерация. Пользователь добавляется в групповой чат. В отдельном чате администраторов(2-3 человека) всплывает диалог с карточкой пользователя. Любой администратор может отклонить пользователя или одобрить его по кнопке. Можно так же открыть по кнопке подробный профиль пользователя (переключение на следующее окно).
Юзкейс настройки многопользовательской игры: в чат отправляется сообщение, к которому прикреплены инлайн-кнопки. Они работают по принципу Radio виджета. То есть для игры есть несколько параметров настройки и для каждого из них есть список вариантов, из которых выбирается один конкретный.
С диалогом взаимодействует 1 пользователь
Юзкейс. Нужно показывать в общем чате диалог с разным текстом на разные кнопки, так, чтобы все могли наживать на кнопки и получать текст соответствующий кнопке. Например, это описание какого то продукта в чате.
Тут бы такие моменты продумать:
- Обработчик нажатия не тем пользователем
- Возможность нажатия любым пользователем
- Возможность передачи диалога от одного пользователя другому и/или по порядку нескольким пользователям
Думаю покрыло бы любой кейс
Юзкейс: Личный диалог для "игрока" в глобальном чате. (Например профиль/инвентарь)
-
Диалог без свойства "Always on top", чтобы при обычных сообщениях от юзера - диалог оставался там где был вызван. По сути чтобы не был "Always on top"
-
Свойство "игнорировать" текстовые сообщения/команды и пропускать их дальше, чтобы бот мог отвечать на них даже во время диалога. Диалог при этом остаётся активным, но не мешает пользоваться другими командами бота постоянно вылезая в "top of messages".
-
В случае вызова нового диалога - (завершать старый) или (начинать диалог с того же места где остановился юзер в старом диалоге), в зависимости от настроек.
-
Также обязательное свойство пропускать CallbackQuery, которые не принадлежат диалогу, дальше на обработку. Чтобы если у юзера открыт диалог и ещё какое-то сообщение с кнопками, которое не принадлежит диалогу - то чтобы бот мог обрабатывать колбеки от кнопок в этом сообщении.
-
Дополнительно обработка нажатий от "не владельцев" диалога. Диалог может быть: "личным", "групповым (для всех в чате)", "для конкретных юзеров (по сути фильтрация по каким-то атрибутам, например наличие админки, или соответствие по List[User.id])"
Upd: Пример использования в группе:
- Личный диалог для конкретного пользователя в группе. Диалог показывает окно с "инвентарём" игрока. Есть возможность переключатся между типами показываемых предметов (ресурсы, оружие, тд), (разные стейты/окна по сути). Сообщение диалога не должно быть "Always on top", чтобы не мешать другим игрокам в группе.