aiogram_dialog icon indicating copy to clipboard operation
aiogram_dialog copied to clipboard

Dialog for user in multiuser chat

Open Tishka17 opened this issue 3 years ago • 11 comments

в диалогах встроить возможность диалог открыть для юзера или для чата. То есть записать user_id в Intent и при обработке сообщений/кликов проверять его

Tishka17 avatar Mar 07 '21 18:03 Tishka17

будет актуально для stateless диалогов

Tishka17 avatar Apr 08 '21 20:04 Tishka17

диалог запоминает intent_id который валиден только для одного юзера.

Возможна реализация обратной функциональности: диалоги, доступные всем.

Tishka17 avatar May 18 '21 10:05 Tishka17

Use case: подскажите, как можно реализовать бота для опросов: текст опроса, ниже кнопки с выбором ответов, а после нажатия бот возвращает соотношение проголосовавших( условно, да 70%, нет30%)

Tishka17 avatar May 18 '21 11:05 Tishka17

Сделать диалоги доступными для всех: Сценарий использования: Развлекательный бот для создания лобби пользователей в группе (текст с пользователями в лобби, кнопки для присоединения/выхода из него) и последующей работы с ними (True Mafia к примеру).

arrenanv avatar Jun 18 '22 12:06 arrenanv

Кейс по диалогам, доступным всем. Пример: сбор денег на подарок босу. В групповом чате висит окно с сводной информацией из базы (сколько денег собрано). Кнопки запускаю диалоги в привате, которые позволяют менять данные на основе которых формируется сводка. В примере - пользователь может указать сумму, которую он может выделить на подарок. После создания взноса сводка обновляется. Сейчас в aiogram-dialog зачем-то данные хранятся на уровне пользователя. Чтобы кнопки работали в групповых чатах, пришлось добавили патч, который позволяет хранить данные только для чатов.

cfytrok avatar Jan 22 '23 08:01 cfytrok

Techincal details:

  • need to undarstand if a dialog is started for all/single user (what about multicast?)
  • event isolation

Tishka17 avatar Jan 22 '23 08:01 Tishka17

Кейс модерация. Пользователь добавляется в групповой чат. В отдельном чате администраторов(2-3 человека) всплывает диалог с карточкой пользователя. Любой администратор может отклонить пользователя или одобрить его по кнопке. Можно так же открыть по кнопке подробный профиль пользователя (переключение на следующее окно).

cfytrok avatar Jan 22 '23 08:01 cfytrok

Юзкейс настройки многопользовательской игры: в чат отправляется сообщение, к которому прикреплены инлайн-кнопки. Они работают по принципу Radio виджета. То есть для игры есть несколько параметров настройки и для каждого из них есть список вариантов, из которых выбирается один конкретный.

С диалогом взаимодействует 1 пользователь

ZeN220 avatar Feb 19 '23 10:02 ZeN220

Юзкейс. Нужно показывать в общем чате диалог с разным текстом на разные кнопки, так, чтобы все могли наживать на кнопки и получать текст соответствующий кнопке. Например, это описание какого то продукта в чате.

metya avatar Mar 02 '23 00:03 metya

Тут бы такие моменты продумать:

  1. Обработчик нажатия не тем пользователем
  2. Возможность нажатия любым пользователем
  3. Возможность передачи диалога от одного пользователя другому и/или по порядку нескольким пользователям

Думаю покрыло бы любой кейс

bkvalexey avatar Mar 02 '23 10:03 bkvalexey

Юзкейс: Личный диалог для "игрока" в глобальном чате. (Например профиль/инвентарь)

  • Диалог без свойства "Always on top", чтобы при обычных сообщениях от юзера - диалог оставался там где был вызван. По сути чтобы не был "Always on top"

  • Свойство "игнорировать" текстовые сообщения/команды и пропускать их дальше, чтобы бот мог отвечать на них даже во время диалога. Диалог при этом остаётся активным, но не мешает пользоваться другими командами бота постоянно вылезая в "top of messages".

  • В случае вызова нового диалога - (завершать старый) или (начинать диалог с того же места где остановился юзер в старом диалоге), в зависимости от настроек.

  • Также обязательное свойство пропускать CallbackQuery, которые не принадлежат диалогу, дальше на обработку. Чтобы если у юзера открыт диалог и ещё какое-то сообщение с кнопками, которое не принадлежит диалогу - то чтобы бот мог обрабатывать колбеки от кнопок в этом сообщении.

  • Дополнительно обработка нажатий от "не владельцев" диалога. Диалог может быть: "личным", "групповым (для всех в чате)", "для конкретных юзеров (по сути фильтрация по каким-то атрибутам, например наличие админки, или соответствие по List[User.id])"

Upd: Пример использования в группе:

  • Личный диалог для конкретного пользователя в группе. Диалог показывает окно с "инвентарём" игрока. Есть возможность переключатся между типами показываемых предметов (ресурсы, оружие, тд), (разные стейты/окна по сути). Сообщение диалога не должно быть "Always on top", чтобы не мешать другим игрокам в группе.

andrew000 avatar Mar 22 '23 13:03 andrew000