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

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

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

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

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

1 ответов

5 просмотров

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

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

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

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
79
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Карта сайта