Подсчет всего времени сколько пользователь провел в голосовом канале дискорд

Думаю, по коду будет не понятно что я написал т.к сама по себе функция большая, постараюсь вкратце рассказать. В общем метод привязан, к ивенту который срабатывает когда пользователь вошел/вышел из голосового канала, так вот когда пользователь зашел первый раз в войс бот записывает в столбец startTime в БД datetime, аналогично когда пользователь первый раз вышел из войса. Когда пользователь зайдет 2 раз войс возьмется его прошлая запись времени и запишется в столбец OldStartTime и начнется новая запись времени аналогично с выходом. Так вот в чем же моя проблема время считывается 1 раз то есть когда я следующий раз зайду в войс время будет другим. Но я думаю мой вопрос все равно не понятен, поэтому скажу по другому как мне сделать счет времени пользователя находящегося в войсе без потери прошлого прогресса.

  private async Task CountUserVoiceTime(SocketUser arg, SocketVoiceState stat1, SocketVoiceState stat2)
        {
            var user = arg as SocketGuildUser;

            var UserVoiceTime = VoiceDb.GetUserVoiceTime(user.Id, user.Guild.Id);

            if (UserVoiceTime == null)
            {
                UserVoiceTime = new Voice
                {
                    UserId = user.Id,
                    GuildId = user.Guild.Id
                }; 
            }

            DateTime dateTime = new DateTime();

            ISocketMessageChannel socketMessageChannel = user.Guild.GetTextChannel(myidchannel);

            if(stat1.VoiceChannel?.Name != null && stat2.VoiceChannel?.Name == null)
            {
                if (UserVoiceTime.endTime == null)
                {
                    UserVoiceTime.endTime = DateTime.Now;
                    await VoiceDb.StopTimeUser(UserVoiceTime);
                    await socketMessageChannel.SendMessageAsync("Юзер первый раз покинул войс");
                }
                else
                {
                    var result = VoiceDb.OldGetUserEndTime(user.Id, user.Guild.Id);
                    result.OldendTime = result.endTime;

                    await VoiceDb.OldStopTimeUser(result);
                    UserVoiceTime.endTime = DateTime.Now;
                    await VoiceDb.StopTimeUser(UserVoiceTime);

                    await socketMessageChannel.SendMessageAsync("Юзер покинул войс");
                } 
            }
            else
            {
                if (UserVoiceTime.startTime == dateTime)
                {
                    UserVoiceTime.startTime = DateTime.Now;
                    await VoiceDb.StartTimeUser(UserVoiceTime);
                    await socketMessageChannel.SendMessageAsync("Юзер первый раз зашёл в войс");
                }
                else
                {
                    var result = VoiceDb.OldGetUserStartTime(user.Id, user.Guild.Id);
                    result.OldstartTime = result.startTime;
                    UserVoiceTime.startTime = DateTime.Now;

                    await VoiceDb.OldStartTimeUser(result);
                    await VoiceDb.StartTimeUser(UserVoiceTime);
                    await socketMessageChannel.SendMessageAsync("Юзер зашёл в войс");
                } 
            }

            await Task.CompletedTask;
        }

   //запись времени в БД
   public static async Task StartTimeUser(Voice user)
        {
            using var DbContext = new SqlDbContext();
            DbContext.Update(user);
            await DbContext.SaveChangesAsync();
        }
  //команда выводящая время пользователя
[Command("usertime")]
        public async Task UserTimeCheck()
        {
            var profile = VoiceDb.GetUserVoiceTime(Context.User.Id, Context.Guild.Id);
            var eb = new EmbedBuilder();

            if (profile == null)
            {
                await ReplyAsync($"{Context.User.Username} your time 0 hours 0 minutes 0 second");

                TimeSpan total1 = profile.endTime - profile.startTime;

                TimeSpan total2 = profile.OldendTime - profile.OldstartTime;


                TimeSpan total = total1 - total2;

                eb.WithAuthor($"{Context.User.Username} - Your voice time");
                eb.WithDescription($"{total.Hours} hrs | {total.Minutes} min | {total.Seconds} sec.");
                await ReplyAsync(embed: eb.Build());
            }
        }

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