Ожидание нового сообщение от пользователя в TelegramBot

пытаюсь сделать некий "чат" через бота (просто хочу познать азы в этом всём)

Вот весь код:

using Telegram.Bot.Polling;
using Telegram.Bot.Types.Enums;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Types;
using System.IO;
using System.Diagnostics;

public class DoWork
{
// Это клиент для работы с Telegram Bot API, который позволяет отправлять сообщения, управлять ботом, подписываться на обновления и многое другое.
private static ITelegramBotClient _botClient;

// Это объект с настройками работы бота. Здесь мы будем указывать, какие типы Update мы будем получать, Timeout бота и так далее.
private static ReceiverOptions _receiverOptions;



static async Task Main()
{
    
    _botClient = new TelegramBotClient("токен"); // Присваиваем нашей переменной значение, в параметре передаем Token, полученный от BotFather
    _receiverOptions = new ReceiverOptions // Также присваем значение настройкам бота
    {
        AllowedUpdates = new[] // Тут указываем типы получаемых Update`ов, о них подробнее расказано тут https://core.telegram.org/bots/api#update
        {
            UpdateType.Message, // Сообщения (текст, фото/видео, голосовые/видео сообщения и т.д.)
        },
        // Параметр, отвечающий за обработку сообщений, пришедших за то время, когда ваш бот был оффлайн
        // True - не обрабатывать, False (стоит по умолчанию) - обрабаывать
        ThrowPendingUpdates = true,
    };

    using var cts = new CancellationTokenSource();

    // UpdateHander - обработчик приходящих Update`ов
    // ErrorHandler - обработчик ошибок, связанных с Bot API
    _botClient.StartReceiving(UpdateHandler, ErrorHandler, _receiverOptions, cts.Token); // Запускаем бота

    

    var me = await _botClient.GetMeAsync(); // Создаем переменную, в которую помещаем информацию о нашем боте.
    Console.WriteLine($"{me.FirstName} запущен!");

    await Task.Delay(-1); // Устанавливаем бесконечную задержку, чтобы наш бот работал постоянно
}
private static async Task UpdateHandler(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
    // Обязательно ставим блок try-catch, чтобы наш бот не "падал" в случае каких-либо ошибок
    try
    {
        // Сразу же ставим конструкцию switch, чтобы обрабатывать приходящие Update
        switch (update.Type)
        {
            case UpdateType.Message:
                {
                    // эта переменная будет содержать в себе все связанное с сообщениями
                    var message = update.Message;

                    // From - это от кого пришло сообщение (или любой другой Update)
                    var user = message.From;


                   
                    // Выводим на экран то, что пишут нашему боту, а также небольшую информацию об отправителе
                    Console.WriteLine($"{user.FirstName} ({user.Id}) написал сообщение: {message.Text}");

                    // Chat - содержит всю информацию о чате
                    var chat = message.Chat;
            
                    if (message.Type == MessageType.Photo)
                    {
                        var fileId = update.Message.Photo.Last().FileId;
                        var fileInfo = await botClient.GetFileAsync(fileId);
                        var filePath = fileInfo.FilePath;

                        string path = $"{Directory.GetCurrentDirectory()}/test.file";
                        if (!System.IO.File.Exists(path))
                        {
                            System.IO.File.Create(path);


                        }
                        using (FileStream fs = System.IO.File.OpenWrite(path))
                        {
                            await botClient.DownloadFileAsync(filePath, fs, cancellationToken);

                            fs.Close();

                        }

                        FileStream files = System.IO.File.OpenRead(path);
                        await botClient.SendPhotoAsync(
        chat.Id,
          photo: InputFile.FromStream(files),
            replyToMessageId: message.MessageId
            );
                        files.Close();





                    }

                    else if (message.Type == MessageType.Text)
                    {
                        string pathId = $"{Directory.GetCurrentDirectory()}/DATA";
                        if (message.Text == "Получить личную ссылку")
                        {
                            await botClient.SendTextMessageAsync(chat.Id, $"Твоя новая ссылка для получения сообщений: \n https://t.me/randon_name?start={chat.Id}");


                            if (!Directory.Exists($"{Directory.GetCurrentDirectory()}/DATA"))
                            {
                                Directory.CreateDirectory($"{Directory.GetCurrentDirectory()}/DATA");
                                
                                
                            }
                            else
                            {
                                using (StreamWriter sw = new StreamWriter($"{pathId}/IDs.txt", true))
                                {

                                    sw.WriteLine(chat.Id);
                                    sw.Close();
                                }
                            }
                        }
                        else 
                        {
                           

                         
                            using (StreamReader sr = new StreamReader($"{pathId}/IDs.txt"))
                            {
                                List<string> idss = new List<string>();
                                
                              

                             
                                while (true)
                                {
                                    string line = sr.ReadLine();

                                    if (line == null) break;
                                    idss.Add(line);
                                   
                                }
                                for (int i = 0; i < idss.Count; i++)
                                {
                                    if (message.Text == $"/start {idss[i]}")
                                    {
                                        string acceptMsg = message.Text;

                                        char[] chars = new char[]
                                        {
                                '/',
                                's',
                                't',
                                'r',
                                'a',
                                ' ',
                                        };
                                        string formated = acceptMsg.TrimStart(chars);
                                        string idMes = idss[i];

                                   
                                        await botClient.SendTextMessageAsync(chat.Id, "Введите анонимное сообщение пользователю:");

                                        string mesUser = message.Text;

                                        
                                        await botClient.SendTextMessageAsync(idMes , $"Получено новое анонимное сообщение: \n {mesUser} ");
                                    }
                                    else
                                    {
                                        await botClient.SendTextMessageAsync(chat.Id, "Непонятен запрос");
                                    }
                                }
                                    
                                


                            }
                           
                        }
                    }
               
                    return;
                }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

private static Task ErrorHandler(ITelegramBotClient botClient, Exception error, CancellationToken cancellationToken)
{
    // Тут создадим переменную, в которую поместим код ошибки и её сообщение 
    var ErrorMessage = error switch
    {
        ApiRequestException apiRequestException
            => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
        _ => error.ToString()
    };

    Console.WriteLine(ErrorMessage);
    return Task.CompletedTask;
}

}

Мне нужно понять, как получить уже новое сообщение от пользователя. Ошибка в этом блоке:

await botClient.SendTextMessageAsync(chat.Id, "Введите анонимное сообщение пользователю:");

                                    string mesUser = message.Text;


                                    await botClient.SendTextMessageAsync(idMes , $"Получено новое анонимное сообщение: \n {mesUser} ");
                                }
                                else
                                {
                                    await botClient.SendTextMessageAsync(chat.Id, "Непонятен запрос");
                                }

Человеку даже не нужно отправлять сообщение, потому что тупо отправляется прошлое, древнее сообщение. Если кратко, то человеку, как минимум нужно ввести /start. И когда дело доходит уже до введения сообщение, то что бы человек не написал, всё равно бот отправит то старое сообщение "/start". Вопрос: Как проверять на новый сообщения, а не на старые? Ведь например, в той же консоли есть Console.ReadLine(), но однако, там сообщения постоянно меняются, а тут нет. Что делать?


Ответы (0 шт):