Как сделать многопользовательский режим для телеграм-бота (библиотека Telegram.Bot)

Недавно начал изучать эту тему с телеграм-ботами. Я написал небольшой код на основе примера c сохранением сообщений в базе данных. Использовал библиотеку Telegram.Bot. Вылезла проблема, что бот работает только с одним пользователем, а если пользователей больше 2-х, то бот сохраняет ответы в одну строку. Как исправить или дополнить код, чтобы бот работал для нескольких пользователей? Код прикрепляю ниже, заранее спасибо за помощь.

using Microsoft.VisualBasic;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
using Microsoft.Data.SqlClient;

class Program
{
    public static int h = 0;
    private static ITelegramBotClient _botClient;
   // public  int h = 0;

    private static ReceiverOptions _receiverOptions;
    private static string connectionString = "Server=(localdb)\\mssqllocaldb;Database=tgServer;Trusted_Connection=True;";
    static async Task Main()
    {
        
        
        _botClient = new TelegramBotClient("token"); // Присваиваем нашей переменной значение, в параметре передаем 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); // Устанавливаем бесконечную задержку, чтобы наш бот работал постоянно
    }
    public 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 - это от кого пришло сообщение
                        var user = message.From;

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

                        // Chat - содержит всю информацию о чате
                        var chat = message.Chat;

                        // Добавляем проверку на тип Message
                        switch (message.Type)
                        {
                            // Тут понятно, текстовый тип
                            case MessageType.Text:
                                {
                                    // тут обрабатываем команду /start, остальные аналогично
                                    if (message.Text == "/start")
                                    {
                                        h = 0;
                                        await botClient.SendTextMessageAsync(
                                            chat.Id,
                                            "напиши /new:\n");
                                        return;
                                    }
                                    if (message.Text != null)
                                    {
                                        h++;
                                        if (h == 1)
                                        {
                                            string sqlExpression = $"INSERT INTO usertest1 (IdUser,Name) VALUES ('{chat.Id}',N'{message.Text}')";
                                            using (SqlConnection connection = new SqlConnection(connectionString))
                                            {
                                                await connection.OpenAsync();

                                                // добавление
                                                SqlCommand command = new SqlCommand(sqlExpression, connection);
                                                int number = await command.ExecuteNonQueryAsync();

                                            }
                                        }
                                        else
                                        {
                                            string s = $"q{h}";
                                            string sqlExpression = $"UPDATE  usertest1 SET {s} = N'{message.Text}' WHERE Name = N'{chat.Id}'";
                                            using (SqlConnection connection = new SqlConnection(connectionString))
                                            {
                                                await connection.OpenAsync();

                                                // добавление
                                                SqlCommand command = new SqlCommand(sqlExpression, connection);
                                                int number = await command.ExecuteNonQueryAsync();

                                            }
                                        }
                                        return;
                                    }
                                    return;
                                }

                            // Добавил default , чтобы показать вам разницу типов Message
                            default:
                                {
                                    await botClient.SendTextMessageAsync(
                                        chat.Id,
                                        "Используй только текст!");
                                    return;
                                }
                        }

                        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;
    }
}


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