170 похожих чатов

Привет всем. Я пишу бота для тг, но возникла проблема.

Мне нужно сделать, чтобы бот мог спросить что-то и после этого какое-то время ждал ответа. Если ответ пришел, то бот продолжает обработку; если нет, то можно начать все по-новой. Пример диалога:

Бот: Введите дату рождения.
Пользователь: 18.09.2000.
Бот: Ваша запись сохранена.

Думал, закидывать сообщения в dictionary и при получении нового проверять тот же это чат. Но, если да, я не знаю, как продолжить метод, который ждет ответа. Есть еще вариант с callback'ами, реализовать не пробывал, но мне кажется, что это не очень хорошая идея. Что можете посоветовать?

1 ответов

12 просмотров

Обычно делается не так, с твоим подходом у тебя будет лапша в которой невозможно разобраться Диалог с конкретным юзером может быть в наборе состояний, например: ДИАЛОГ_НЕ_НАЧАТ, СПРОСИЛИ_ДАТУ_РОЖДЕНИЯ, ПОЛУЧИЛИ_ДАТУ_РОЖДЕНИЯ, НЕВЕРНЫЙ_ФОРМАТ_ДАТЫ_РОЖДЕНИЯ Ты описываешь все возможные состояния, что в них делает бот (пишет сообщение,заносит запись в базу), и в какие состояния можно перейти из текущего Потом для каждого диалога тебе нужно просто помнить текущее состояние Гугли по запросу "конечный автомат" или "finite state automaton"

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
9
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта