@xXNullXx

Telegram. Как обработать ответы пользователя на сообщение бота?

Доброго времени суток!

Как обработать ответы пользователя на сообщение бота? То есть к примеру:
Бот:
Введите название акции/й в следующем формате: "MOEX, AFLT"

Пользователь:
SBER, CHMF


И потом то что отправил пользователь сохраняется в лист.
Пробовал так(Класс команды):
public class PredictCommand : Command
    {
        public override string Name => "predict";

        public override async Task Execute(Message message, ITelegramBotClient client)
        {
            var chatId = message.Chat.Id;

            string ms = null;
            var users = BufferUsers.GetInstance().Users;
            foreach (var i in users)
            {
                if (chatId == i.ChatId)
                {
                    ms = "Введите название акции/й в следующем формате: MOEX, AFLT";
                    break;
                }
                else
                {
                    ms = "Вы незарегестрированы! Воспользуйтесь командой /reg.  ";
                    return;
                }
            }

            await client.SendTextMessageAsync(chatId, ms, parseMode: ParseMode.Markdown, replyMarkup: null);

            GettingResponse(chatId).Wait();
        }

        public async Task GettingResponse(long chatId)
        {
            var client = Bot.GetInstance().Get();
            var bf = BufferUsers.GetInstance(); // Класс с листом где хранятся пользователи
            int offset = 0;
            int timeout = 0;

            while (true)
            {
                var updates = await client.GetUpdatesAsync(offset, timeout);

                foreach (var update in updates)
                {
                    var message = update.Message;

                    foreach (var i in bf.Users)
                    {
                        if (chatId == i.ChatId)
                        {
                            foreach (var j in message.Text.Split(','))
                            {
                                i.Securities.Add(new Security(j));
                            }

                            break;
                        }
                    }
                }
            }
        }
    }
  • Вопрос задан
  • 682 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
1. Кажется, у вас есть ошибка в методе Execute - очень странно выглядит цикл. Я бы упростил его до
const string ms = "Введите название акции/й в следующем формате: MOEX, AFLT";
if(users.Any(user => user.ChatId != chatId)) return;

2. GettingResponse(chatId).Wait(); - не имеет никакого смысла писать Wait(), тк у вас асинхронный метод.
3.
while (true)
            {
                var updates = await client.GetUpdatesAsync(offset, timeout);

А вот тут у вас происходит троллинг.
Вам стоит переосмыслить архитектуру.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы