Ожидание ответов в телеграмм боте C#

Вопрос с ожиданиями ответа пользователя и последовательными ответами бота - умею реализовывать такую технологию только через машину состояний, работающую на swich-case. Сейчас ищу варианты, как это можно делать красивее и экономнее: условно, чтобы работа бота была разделена на методы, а не была единым 2000-строковым swich-case. Буду рад любым советам, вот код:

internal class Program
{
    private static readonly string BotApiKey = "token";
    private static DatabaseManager manager = new DatabaseManager();
    private static UserBase.User user;
    static async Task Main(string[] args)
    {
        var client = new TelegramBotClient(BotApiKey);

        client.StartReceiving(Update, Error);

        Console.ReadLine();

    }

    async static Task Update(ITelegramBotClient botClient, Update update, CancellationToken token)
    {
        var message = update.Message;
        if (message.Chat != null)
        {
            var chatId = message.Chat.Id;
            var username = message.Chat.Username;
            if (manager.CheckRecordExists(chatId))
            {
                var status = manager.GetStatusById(chatId);
                if (status == "админ")
                    user = new Admin();
                else
                    user = new RegularUser();

                user.ChatId = chatId;
                manager.GetUserData(user);
                await botClient.SendTextMessageAsync(chatId, $"{user.Greeting()}");

            }
            else
            {
                RegForm form = new RegForm();
                var t = form.StageText();
                await botClient.SendTextMessageAsync(chatId, t.Item1); //вот тут начинаются вопросы - 
//как дальше обрабатывать ответы пользователя?
                return;
            }
...

internal class RegForm : RegularUser
{
    public int stage;

    public RegForm() => stage = 1;


    public (string, int) StageText()
    {
        if (stage == 1)
            return ("Введите Ваши имя и фамилию, через пробел, пожалуйста:", stage);
        if (stage == 2)
            return ("Введите дату рождения:", stage);
        if (stage == 3)
            return ("Введите Вашу страну:", stage);
        if (stage == 4)
            return ("Введите Ваш пол:", stage);
        if (stage == 5)
            return ("Введите Ваш номер:", stage);
        else
            return ("Отправьте боту Вашу электропочту:", stage);
    }


    public bool SetParam(string param)
    {
        if (stage == 1)
        {
            string[] s = param.Split();
            Name = s[0];
            SecondName = s[1];
        }
        if (stage == 2)
        {
            string[] dates = param.Split(".");
            short day = Convert.ToInt16(dates[0]);
            short month = Convert.ToInt16(dates[1]);
            int year = Convert.ToInt16(dates[2]);
            DateOfBirth = new DateTime(year, month, day);
        }
        if (stage == 3)
            Country = param;
        if (stage == 4)
            Gender = param;
        if (stage == 5)
            Number = param;
        if (stage == 6)
            Email = param;
        stage++;
        return true;
    }
}

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