Русский
Открыть в Telegram
ББиблиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

✅ Высокое доверие
@csharpproglib · канал · Технологии · в индексе с 19.05.2026
21 511подписчиков−33 за неделю
2 478средний охват поста
11.5%ER — охват к подписчикам
20постов за 30 дней
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Ссылка
нажмите — покажем
👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработанным исключением, стандартное поведение многих фреймворков — вывести стек вызовов прямо в ответ. Пользователь видит внутренние пути файлов, названия классов, фрагменты кода. Для злоумышленника это готовая карта уязвимостей. ⏬ Что происходит на практике Допустим, в ASP.NET приложении возникает необработанное исключение. Без явной настройки middleware фреймворк вернёт подробный ExceptionDetails с именем метода, строкой кода и трассировкой стека. Атакующий получает информацию о структуре проекта, версиях библиотек и логике работы приложения без каких-либо усилий. ⏬ Как это закрыть Правильный подход это перехват всех необработанныъ исключений. Нужно логировать их внутри системы и возвращать пользователю только нейтральное сообщение. В ASP.NET это делается через UseExceptionHandler: app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>(); var logger = context.RequestServices .GetRequiredService<ILogger<Program>>(); logger.LogError(exceptionHandlerPathFeature?.Error, "Unhandled exception"); context.Response.StatusCode = 500; await context.Response.WriteAsJsonAsync(new { message = "Something went wrong. Please try again later." }); }); }); ⏬ Что здесь происходит Middleware перехватывает исключение, передаёт его в ILogger — туда, где его увидит только команда разработки — и возвращает клиенту простой JSON с универсальным сообщением об ошибке. Никаких деталей реализации наружу не уходит. ILogger пишет в вашу систему мониторинга — будь то Application Insights, Seq, Serilog или любой другой инструмент. Вы по-прежнему видите полный стек вызовов и можете разобраться в причине ошибки. Пользователь при этом получает понятное сообщение, а не технический мусор. Это ба… Читать полностью →
26 · 3.1K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых распространённых источников лишних аллокаций в .NET-приложениях. Особенность в том, что код выглядит абсолютно нормально и работает правильно — просто дорого. ⏬ Что происходит с интерполяцией: logger.LogInformation($"User {userId} logged in at {time}"); ⏬ Компилятор разворачивает это примерно в: logger.LogInformation(string.Format("User {0} logged in at {1}", userId, time)); Строка формируется до вызова метода. Если уровень логирования Information отключён, строка всё равно создаётся, занимает память и тут же выбрасывается сборщиком мусора. ⏬ Структурное логирование решает проблему: logger.LogInformation("User {UserId} logged in at {Time}", userId, time); Здесь строка — это шаблон. Аргументы передаются отдельно. Логгер сначала проверяет, активен ли уровень, и только потом форматирует сообщение. Если уровень выключен — аллокации нет вообще. Бонус: структурное логирование позволяет индексировать поля в системах вроде Seq, Elasticsearch, Datadog — вы сможете искать по UserId как по полю, а не парсить текст. ⏬ Начиная с .NET 6 есть ещё лучший вариант через compile-time source generators: // Генерирует оптимальный код на этапе компиляции: [LoggerMessage(Level = LogLevel.Information, Message = "User {UserId} logged in at {Time}")] partial void LogUserLogin(int userId, DateTime time); Никаких аллокаций, никакого боксинга, максимальная производительность — и всё это без изменения читаемости кода. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #il_люминатор
30 · 3.4K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Фотография
🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собеседование: Senior C# разработчик проведёт его в прямом эфире. Можно посмотреть, как всё устроено изнутри, и понять, насколько ты готов к такому интервью. Как это будет: 📂 Собеседует Александр Моргунов — Senior C# разработчик, 7+ лет в европейских высоконагруженных сервисах. Отвечает разработчик-доброволец; 📂 Всё как на настоящем собесе: Александр задаёт те вопросы и задачи, которые даёт кандидатам на своих интервью. Заранее их никто не знает; 📂 После каждого ответа Александр даст обратную связь: что прозвучало сильно, а что стоило раскрыть иначе. Так станет понятнее, на что обращают внимание на собесе; 📂 В конце можно задать любой вопрос. Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир -> @shortcut_csharp_bot Реклама. О рекламодателе.
10 · 2.3K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Альфа-Банк ищет скиллового коллегу QA Fullstack на C# Полная удалёнка или гибрид в Москве, Питере и Екатеринбурге. Что нужно делать: — Разрабатывать автотесты на C#; — Запускать функциональные, регрессионные и интеграционные тесты, включая API; — Снижать количество дефектов в диалоге с разработкой и бизнесом. Навыки: — Опыт автоматизации на C# и ручного тестирования от года; — Знание API (SOAP, REST), SQL, основ клиент-серверной архитектуры и тест-дизайна. Условия и развитие: — Сильное сообщество QA и C#-разработчиков: можно получить совет и поделиться опытом на митапе и в блоге на Хабре: — Реальная перспектива роста: технический трек развития, в том числе до C#-лида. Оставляйте отклик по ссылке.
17 · 2.1K ·
Библиотека шарписта | C#, F#, .NET, ASP.NET
Фотография
Перенос MiniJinja с Rust на Go силами Opus и Codex Около десяти часов работы агента и примерно 45 минут активного участия автора. Так Армин Ронахер оценивает основной перенос MiniJinja с Rust на Go. MiniJinja собирает текст по шаблонам. Он начал с Opus 4.5 внутри Pi, а оставшиеся исправления тестов передал GPT-5.2 Codex. Рабочая среда оставалась той же; Go-реализацию сверяли с сохранёнными результатами тестов Rust-версии. По ходу работы агент отказался от проверок, в которых программа должна завершаться ошибкой: текст сообщений не совпадал дословно. Ронахер вмешался и сохранил эти тесты, изменив способ сравнения сообщений. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
1 · 2.3K ·
Б
📊 Опрос
Поделитесь своим подходом к работе с нейросетями:
  • Пользуюсь только чем-то одним для всего подряд
  • Под каждую задачу подбираю свой инструмент
  • Сравниваю, что на один и тот же вопрос ответят разные модели
  • Пока вообще не пользуюсь ИИ
  • Другое (напишу в комментариях)
3.9K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране? Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить. 🕰️ Опрос займёт около 3 минут. В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео. 🔗 Поделиться опытом 🐸 Библиотека программиста
1.7K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🚀 C# Dev Kit: сначала открытый файл, потом весь solution Открыли большой solution и ждёте, пока IDE разберётся со всеми проектами? В предварительной версии C# Dev Kit 11.0 Microsoft изменила порядок загрузки: активный файл получает подсказки и диагностику первым. В замерах команды для Aspire с 407 проектами готовность активного файла сократилась с «до 84,1 секунды» до 0,47 секунды. Весь solution загрузился за 3 секунды вместо 84,1. Это результаты конкретного проекта, не обещание ускорить любой репозиторий в 180 раз. ⏬ Что изменили под капотом — добавили кеш модели проектов для повторных открытий; — объединили шесть managed-процессов в один сервер; — собрали этот сервер через Native AOT. Версия 11.0 пока доступна в pre-release. Если хотите проверить эффект на своём solution, переключитесь на предварительную версию расширения. Первое построение кеша и повторная загрузка — разные сценарии: измерять их стоит отдельно. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #async_news
7 · 1.7K ·
Библиотека шарписта | C#, F#, .NET, ASP.NET
🧠 Кеш пустой, а в базу одновременно пришли сто запросов Популярная запись исчезла из кеша. Сто запросов одновременно увидели промах и пошли за ней в базу. Кеш есть, а нагрузка всё равно прилетела залпом — это cache stampede. HybridCache умеет объединять конкурентные обращения за одним ключом: один вызов получает данные, остальные ждут его результат. var product = await cache.GetOrCreateAsync( $"product:{id}", async token => await repository.LoadAsync(id, token), cancellationToken: cancellationToken); Для регистрации нужен пакет Microsoft.Extensions.Caching.Hybrid и вызов builder.Services.AddHybridCache();. Без Redis тоже работают локальный кеш и защита от такого залпа. ⏬ Важная граница Объединение запросов действует внутри одного экземпляра HybridCache. Два сервера могут одновременно обратиться к базе, даже если используют общий Redis. Это полезная защита локального кеша, но не распределённая блокировка на весь кластер. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #il_люминатор
👍6🔥1
26 · 2.5K ·
Фотография
Общая папка для работы Claude Code и Codex Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так: Папка хранит исходные материалы и решения ↓ Индекс указывает, где искать данные для задачи ↓ Claude Code планирует работу ↓ Codex выполняет задачи по его вызову В описании этого рабочего процесса Бушар объясняет, зачем даёт агенту сведения для конкретной задачи. Начать предлагает с общей папки, короткого индекса и одного повторно используемого скилла. #ии #инструменты
8 · 1.9K ·
Б
ОтветОбщая папка для работы Claude Code и Codex Луи-Франсуа Бушар собрал заметки, инструкции-скиллы, скрипты и итоги встреч в Obsidian. Его связка устроена так: Папка хранит исходные материалы и решения ↓ Индекс указывает, где искать данные для задачи ↓ Claude Code планирует работу ↓ Codex выполняет за
📊 Опрос · можно выбрать несколько
Приходится ли вам копипастить данные и какие именно, когда переходите из одной нейросети в другую?
  • Код
  • Описание задачи
  • Документацию
  • Результаты работы
  • Настройки и контекст: историю чатов, промпты, скиллы
  • Ничего, использую один инструмент
2.8K ·
Библиотека шарписта | C#, F#, .NET, ASP.NET
🧩 Mapperly: маппинг DTO, который можно открыть и прочитать Вручную перекладывать двадцать свойств в DTO скучно. Но и разбираться, что библиотека сделает с ними во время выполнения, хочется не всегда. Mapperly предлагает другой вариант: сгенерировать обычный C#-код при сборке. using Riok.Mapperly.Abstractions; [Mapper] public partial class UserMapper { public partial UserDto ToDto(User source); } Сигнатуру пишете вы, реализацию добавляет source generator. Её можно посмотреть и проверить: какие свойства перенеслись, как обрабатывается null и где выполняется преобразование. ⏬ Зачем это полезно Маппинг не требует reflection во время выполнения. А диагностика сборки может предупредить о свойстве, которое не удалось сопоставить. При этом генератор не знает бизнес-смысл данных. Если имя поля поменялось или преобразование требует правила, это нужно описать явно. Автоматизировать присваивания можно; проверку контракта DTO всё равно стоит оставить себе. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #sharp_view
👍7👾3
19 · 2.4K ·
Б
🧑‍💻 Какие навыки помогают вам в разработке в 2026 году? Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно? Мы решили собрать портрет современного разработчика — и приглашаем вас поделиться своим опытом. Расскажите, какие навыки вам пригодились и как вы используете ИИ. Если обходите его стороной, нам тоже интересно узнать почему. Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании. 👉 Пройти опрос
❤1
1.8K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
⚙️ Task.WhenAll не ограничивает число запросов Если передать в Task.WhenAll тысячу задач обращения к API, он дождётся их завершения. Но ограничивать число одновременных запросов за вас не будет. Когда нужно обрабатывать коллекцию с заданным параллелизмом, пригодится Parallel.ForEachAsync: await Parallel.ForEachAsync( ids, new ParallelOptions { MaxDegreeOfParallelism = 8, CancellationToken = cancellationToken }, async (id, token) => { await LoadAsync(id, token); }); Здесь одновременно выполняются не более восьми обработчиков. Токен отмены передаётся внутрь каждой итерации. Поддерживается и источник IAsyncEnumerable. ⏬ Восемь обработчиков — не восемь запросов в секунду Это ограничение конкурентности, а не rate limit. Если API разрешает фиксированное число запросов за минуту, нужен отдельный механизм ограничения частоты. И не делите один DbContext между параллельными итерациями: каждый обработчик должен работать с подходящим ему контекстом. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #sharp_view
👍6❤2
18 · 2.1K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
⚙️ PeriodicTimer: следующий тик не обязан ждать конца работы Нужно регулярно обновлять данные в фоне, но не хочется запускать второй обход поверх первого? С PeriodicTimer можно построить один последовательный async-цикл. using var timer = new PeriodicTimer( TimeSpan.FromSeconds(10)); while (await timer.WaitForNextTickAsync(stoppingToken)) { await RefreshAsync(stoppingToken); } Пока RefreshAsync не закончится, следующая итерация этого цикла не начнётся. Но это не то же самое, что «десять секунд отдыха после каждой работы». ⏬ Что случится с пропущенными тиками? Таймер объединяет несколько тиков, пришедших между ожиданиями, в один. Если обновление заняло 25 секунд, не появится очередь из всех пропущенных запусков. Следующее ожидание может завершиться сразу. У таймера должен быть один потребитель. Отмена ожидания через токен приводит к OperationCanceledException — её нужно учитывать при остановке фонового сервиса. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #il_люминатор
👍1
21 · 1.7K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🧠 Таймаут ожидания — ещё не отмена операции Что будет после трёх секунд ожидания? Task request = LoadAsync(); await request.WaitAsync( TimeSpan.FromSeconds(3)); ❤️ — LoadAsync автоматически остановится 👍 — ожидание завершится по таймауту, операция может продолжиться 🔥 — заблокируется текущий поток Ответ: 👍 Если request не успеет завершиться, await выбросит TimeoutException. WaitAsync ограничивает ожидание, а не останавливает исходную операцию. Для её отмены нужен CancellationToken, переданный в LoadAsync, и поддержка отмены внутри этой операции. Не стоит считать таймаут гарантией, что работа больше не выполняется. Для HTTP-запроса, записи в файл или внешнего задания это разные обещания: «я больше не жду» и «операция действительно остановлена». 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #dotnet_challenge
🔥1👍1
2 · 720 ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🧩 Очередь в памяти тоже должна уметь говорить «подождите» Производитель добавляет задания быстрее, чем обработчик успевает их выполнять. Неограниченная очередь продолжает расти — пока запас памяти не заканчивается. Для передачи работы между частями .NET-приложения можно использовать ограниченный Channel: var queue = Channel.CreateBounded<string>( new BoundedChannelOptions(100) { FullMode = BoundedChannelFullMode.Wait }); await queue.Writer.WriteAsync(job, cancellationToken); Когда в очереди сто элементов, WriteAsync ждёт свободного места. TryWrite в той же ситуации сразу вернёт false. Так появляется backpressure: производитель видит, что потребитель не успевает. ⏬ Есть важное условие Задания должен читать параллельно работающий потребитель. Если сначала заполнить очередь, а читать начать только после всех записей, код может застрять на заполнении. Channel помогает координировать работу внутри процесса. Он не сохраняет задания после перезапуска и не заменяет надёжный внешний брокер сообщений. 🔗 Источник 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #sharp_view
👍1
5 · 1.5K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🧩 Passkey можно добавить вторым фактором после пароля в ASP.NET Core Пользователь вводит пароль, затем подтверждает вход через Windows Hello, Touch ID или аппаратный ключ. В разборе на ASP.NET Core Identity показано, как добавить passkey вторым фактором после пароля в .NET 10. Приложение сохраняет подтверждение парольного шага в отдельной короткоживущей cookie. Затем запрашивает passkey, проверяет подпись и сверяет пользователя с тем, кто ввёл пароль. После успешной проверки завершает вход. Так можно добавить passkey в существующее приложение с паролями. Потребуются провайдер второго фактора, страница подтверждения и два обработчика: выдача параметров WebAuthn и проверка ответа. Возьмите пример из статьи. Проверьте привязку обоих шагов к одному пользователю, срок действия cookie и CSRF-защиту обработчиков. ➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии 🐸 Библиотека программиста
12 · 1.2K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Ссылка
нажмите — покажем
⚙️ Тестам WinUI 3 нужен UI-диспетчер приложения Тест создаёт UI-компонент, выполняет await и затем обращается к его свойствам. Чтобы такой сценарий работал, код должен продолжиться в UI-потоке приложения. Одной пометки STA для тестового потока недостаточно. В руководстве по MSTest для UWP и WinUI 3 показана настройка с MSTest 4.5.1 и Microsoft.Testing.Platform 2.5.1. Атрибут [UITestMethod] позволяет выполнять тест с доступом к настоящему UI-диспетчеру. При настройке CI проверьте модель приложения: для обычного WinUI-процесса и приложения в MSIX запуск устроен по-разному. На чистом агенте также должны быть нужные компоненты Windows App SDK и разрешения для регистрации пакета. ➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии 🐸 Библиотека программиста
389 ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Ссылка
нажмите — покажем
👀 Durable Task восстанавливает ход процесса после перезапуска воркера Сервис создаёт окружение клиента: сеть, базу, хранилище. В середине работы воркер перезапускается. Теперь нужно выяснить, что уже создано и с какого шага продолжать. Durable Task записывает историю оркестрации и результаты завершённых шагов. При восстановлении код оркестратора проходит по этой истории, использует сохранённые результаты и доходит до следующего действия. Так можно выразить ожидание согласования, внешний callback и таймер. В разборе пяти практических сценариев показаны границы такого подхода. Внешние операции проектируйте идемпотентными: стабильный ключ платежа и проверка уже созданного ресурса защищают от повторного действия при сбое. ➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии 🐸 Библиотека программиста
🤔1
3 · 554 ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
Ссылка
нажмите — покажем
👀 Анализаторы Blazor в .NET 11 находят лишние вызовы StateHasChanged Вызовы StateHasChanged легко добавить по привычке, даже когда Blazor уже планирует обновление компонента. Новые анализаторы помогают находить такие места прямо при разработке. В ASP.NET Core для .NET 11 также добавлены проверки работы с состоянием аутентификации: ошибки здесь могут оставить интерфейс со старыми сведениями о пользователе. В обзоре изменений есть ссылки на реализации этих проверок. Если уже тестируете .NET 11 RC, посмотрите новые предупреждения в своём проекте. Для них не требуется переходить на стороннюю библиотеку компонентов: анализаторы входят в инструменты самого фреймворка. ➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии 🐸 Библиотека программиста
👍1
370 ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🖥 После перехода на Xcode 27 MAUI-приложению может понадобиться настройка UIScene Приложение собирается, устанавливается на iPhone, показывает заставку и закрывается. Если в журнале есть сообщение UIScene life cycle is required for apps built with this SDK, нужно проверить жизненный цикл интерфейса. В руководстве по миграции разобраны изменения для существующих MAUI-проектов. UIScene управляет окнами приложения и их переходами между активным и фоновым состояниями. При обновлении сборочного окружения пройдите этот сценарий на устройстве: запуск, сворачивание, возврат и открытие приложения по ссылке. ➡️ Навигация: Вакансии • Задачи • Собеседования 🐸 Библиотека шарписта
1.9K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🖥 Copilot SDK на C# позволяет подключить собственную модель Приложению с ИИ-агентом нужны обработка запросов, вызовы инструментов и управление ходом работы. Copilot SDK предоставляет такую среду выполнения, а BYOK позволяет направить запросы в собственное развёртывание модели. В примере на C# показана настройка подключения к Microsoft Foundry или Azure OpenAI. Подойдёт для проектов, где уже выбраны модель и облачное окружение. Начните с одного запроса и одного инструмента, затем проверьте авторизацию, обработку ошибок и завершение сессии. ➡️ Навигация: Вакансии • Задачи • Собеседования 🐸 Библиотека шарписта
👍1
1 · 226 ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🖥 JIT ускоряет виртуальные вызовы, когда узнаёт конкретный тип объекта Вызов через интерфейс или базовый класс требует определить нужную реализацию метода. Если JIT знает тип объекта, он может вызвать метод напрямую и встроить его код. В разборе производительности .NET 11 показано, как этому помогают сведения, собранные во время выполнения. Для частого типа создаётся быстрый путь с проверкой. Материал полезен при разборе горячих участков кода. Возьмите один пример, запустите его с DisassemblyDiagnoser и посмотрите, какие вызовы остались после оптимизации. Примеры используют предварительную версию .NET 11. ➡️ Навигация: Вакансии • Задачи • Собеседования 🐸 Библиотека шарписта
7 · 1.7K ·
Б
Библиотека шарписта | C#, F#, .NET, ASP.NET
🖥 BenchmarkDotNet позволяет сравнить один код на двух версиях .NET Перед обновлением runtime можно измерить важную операцию на текущей и новой версии. BenchmarkDotNet собирает тестовые приложения, выполняет измерения и выводит результаты рядом. В примерах сравнения .NET 10 и .NET 11 проект настроен сразу на две платформы. Измерения запускают в Release. Выберите операцию из своего приложения: сериализацию, обработку коллекции или вычисление. Подготовьте одинаковые входные данные и сравните время выполнения и выделение памяти. Для .NET 11 в материале используется предварительная сборка. ➡️ Навигация: Вакансии • Задачи • Собеседования 🐸 Библиотека шарписта
❤‍🔥2👾1
2 · 780 ·
Архив по месяцам
ноябрь 2026октябрь 2026сентябрь 2026август 2026июль 2026июнь 2026май 2026апрель 2026март 2026февраль 2026январь 2026декабрь 2025ноябрь 2025октябрь 2025сентябрь 2025август 2025июль 2025июнь 2025май 2025апрель 2025март 2025февраль 2025январь 2025декабрь 2024ноябрь 2024октябрь 2024сентябрь 2024август 2024июль 2024июнь 2024май 2024апрель 2024март 2024февраль 2024январь 2024декабрь 2023ноябрь 2023октябрь 2023сентябрь 2023август 2023июль 2023июнь 2023май 2023апрель 2023март 2023февраль 2023январь 2023декабрь 2022ноябрь 2022октябрь 2022сентябрь 2022август 2022июль 2022июнь 2022май 2022апрель 2022март 2022февраль 2022январь 2022декабрь 2021ноябрь 2021октябрь 2021сентябрь 2021август 2021июль 2021июнь 2021май 2021апрель 2021март 2021февраль 2021январь 2021декабрь 2020ноябрь 2020октябрь 2020сентябрь 2020август 2020июль 2020июнь 2020май 2020апрель 2020март 2020февраль 2020январь 2020декабрь 2019ноябрь 2019октябрь 2019сентябрь 2019август 2019июль 2019июнь 2019май 2019апрель 2019март 2019февраль 2019январь 2019декабрь 2018ноябрь 2018

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем