RSS
Поиск
16.02.2024


Февральское обновление @SadFavBot до v1.2.2 На самом деле были промежуточные релизы, за которыми можно следить, подписавшись на репозиторий на GitHub, но я их не афишировал, чтобы нормально протестировать функционал. А изменений на самом деле не мало. Самое главное — бота теперь можно добавлять в групповые чаты! 1️⃣ Я поправил косяки с излишними реакциями на обновления, которые прилетают в бота, даже когда это не требуется (например, когда просто отправляешь сообщение через его inline-режим); 2️⃣ убрал возможность использования последовательного заполнения форм в группах, поскольку это было бы и слишком многословно для остальных участников чата, и работало бы не очень корректно — так что команды поддерживаются только в однострочном формате вызова; 3️⃣ добавил автоматическое удаление сообщений от бота в групповых чатах через минуту, чтобы создавать меньше мусора и не раздражать админов (благо в Go это делается очень легко: что-что, а горутины сделаны прекрасно). Но есть и ряд более косметических изменений: 1️⃣ значительно усовершенствована команда /ref: ➡️ теперь для объекта она выводит не только список алиасов, связанных с ним, но и список пакетов, содержащих их; ➡️ а если хочется просто получить список пакетов, в которых содержится какой-либо алиас, то можно обойтись даже без объекта, используя форму /ref [алиас]. 2️⃣ команда /cancel теперь удаляет reply-клавиатуру, чтобы кнопка не мозолила глаза, а сами клавиатуры должны стать наконец-то более юзабельными; 3️⃣ у команды /package список кнопок для выбора действия теперь формируется динамически и этот шаг может быть вообще пропущен, если такого пакета не существует и очевидно, что его нужно именно создать, что делает интерфейс более логичным, простым и дружелюбным; 4️⃣ убрано ограничение на 50 закладок в результате поиска (я чёт проморгал, что там существует пагинация — добавил в запрос и поправил даже неправильную сортировку после отсекания; спасибо товарищу @gylax, который указал пальцем на других ботов, использующих бесконечную ленту прокрутки). В процессе работы над данным обновлением также была выпущена новая версия фреймворка goSadTgBot v0.3.1 с «ломающими» изменениями: 1️⃣ удалена функция GetCommandArgument() — у сообщений есть метод CommandArguments(), оказывается, который работает правильно, в отличие от моего варианта, не поддерживающего вызов с «собачкой»; 2️⃣ в интерфейс CommandHandler добавлен метод GetScopes(), а установка команд через setMyCommands теперь происходит отдельно для каждой зоны видимости; 3️⃣ улучшены reply-клавиатуры, порождаемые мастерами форм, добавлен параметр среды BUTTONS_PER_ROW, через который можно регулировать количество кнопок на одной строке; 4️⃣ вместо InlineKeyboardAnswers в дескрипторе поля теперь можно использовать InlineKeyboardBuilder для динамического определения кнопок. Всем добрых и весёлых выходных!)
14.02.2024


Пока я неспешно работаю над патчами для полезных ботов, судя по метрикам, выстрелил в итоге всё-таки именно игровой. Щито поделать: люди любят хлеб и зрелища) В честь сегодняшнего Дня скорби одиноких дарю всем подписчикам промокод на увеличение их причиндала на средний размер в реальной жизни — на 16 см ░░░: 14FBeverAlone — активировать можно до завтра, потом перенесу на следующий год Всем любви ░░░! P.S. метрики приведены за две недели; storage.tsdb.retention.time уже увеличил, так что в следующий раз, надеюсь, числа будут интереснее и можно будет сравнить помесячную активность)
21.01.2024


Как-то неделя закончилась грустно для @SadFavBot. Во-первых, оказалось, что я соврал в прошлом сообщении: длина текстов всё-таки увеличилась, но лишь до 2704 символов, причём на любом языке. Во-вторых, осознал, что я дурачок, раз додумался запихивать тексты целиком в уникальный индекс, полностью лишая смысла хранение каких-либо данных в самой таблице. В-третьих, при ночной раскатке исправления этого косяка случился инцидент, который привёл к неработоспособности бота на несколько часов (за которые мне так никто и не написал, впрочем 😢). Из положительных моментов: я заметил косяк в системе уведомлений об алёртах. Оказалось, что Тг ещё третьего июня втихоря перевёл группу для уведомлений в супергруппу, о чём уведомления выводятся только в веб-версии клиента, но не в основных. А это, в свою очередь, приводит к смене её идентификатора: группы имеют просто отрицательные айдишники, а вот к супергруппам уже дописывается знаменитый ░░░ префикс -100 (сам айдишник тоже меняется), из-за чего бот не мог сообщать об инцидентах вовремя. Сам @SadFavBot снова работает в штатном режиме, а уникальность текстов в базе теперь проверяется по их SHA256-хэшу. Прошу прощения за доставленные неудобства!
15.01.2024


Наконец-то я задеплоил user-sevice вместе с обновлением для его первого потребителя — @LocPlaceBot. Работа над ним несколько затянулась, но всё-таки я её успешно закончил. Итак, какую проблему оно решает? Бот создан, чтобы искать дома, заведения, достопримечательности или города по их названию. Однако, для одного и того же названия в разных местах земного шара результаты поиска будут сильно разниться. Например, когда мы договариваемся с друзьями о встрече в сетевом заведении общепита, мы ожидаем получить ближайшие к нам точки, а не что-то за много тысяч километров. Проблема в том, что при этом о пользователях Telegram мы знаем только язык приложения, которое они используют. Этого вообще недостаточно! Для русскоязычных клиентов я ещё могу сделать очень грубое предположение, что они находятся в России, но оно рушится как теми, кто уехал за границу, так и теми, кто по привычке использует английский язык в приложении (как я, например). Дальше провайдеры данных пытаются сделать предположение по IP-адресу, но опять же видят они лишь адрес сервера, который находится в Петербурге, из-за чего для русскоязычных пользователей в основном выдавались результаты из Северной столицы. Решение очевидное: позволить пользователю самому указать своё местоположение. Тем более, у Telegram даже есть специальный тип кнопки клавиатуры под это (который, впрочем, работает только в мобильных клиентах, не на десктопе — однако это легко обходится с помощью самого же @LocPlaceBot, если указать в поиске конкретный адрес). Но у бота нет собственной базы данных и мне не очень хотелось бы её создавать. К этому добавляется ещё одна тема: выбор и смена языка бота. У @SadFavBot, например, как и у многих других ботов, реализована команда, которая позволяет менять язык вне зависимости от параметра, который мы получаем от Telegram (с которым на самом деле могут быть разные приколы в зависимости от комбинаций языка клиента и операционной системы). Но, во-первых, у него как раз есть своя БД, а во-вторых, эта функция настолько общепринята, что хотелось бы иметь её для всех ботов из коробки, желательно ещё чтобы настройка была общая в рамках всей экосистемы, чтобы пользователь мог установить значение в одном из ботов, а потом оно автоматически подтягивалось в остальных. И тут мы вспоминаем, что на дворе 2024 год и в моде микросервисная архитектура с единым аккаунтом для целого семейства продуктов. Так и приходим к идее хранения данных о настройках пользователя в отдельном сервисе. user-service поддерживает как стандартное REST API, так gRPC вызовы с (де)сериализацией через protobuf, что автоматически даёт нам сгенерированный клиент под любой поддерживаемый язык программирования (хотя всё-таки приходится докручивать кэширование). Зарегистрироваться сейчас можно только через @LocPlaceBot, вызвав либо команду /setlang, либо /setloc — и согласившись на хранение данных. Использовать их по идее должен был ещё @textUtilsBot, чтобы в калькуляторе рубли подразумевались по ru-локали даже для англоязычного Telegram, но он сейчас расположен в другом датацентре, что не является целевой архитектурой и требует настройки как минимум mTLS между сервисами (пока я полагаюсь на изолированную сеть внутри одной ноды). Поэтому интеграция для него откладывания до решения моих финансовых проблем, увеличения мощности основного сервера и переезда старых ботов туда.
13.01.2024


Кстати, один из возможных сценариев использования @SadFavBot, которым я сам регулярно пользуюсь — это сохранение реферальных ссылок, чтобы в случае необходимости не приходилось тратить время и лезть за ними на другие сайты. #useCase #sadTgBots
12.01.2024


Обнаружили с подписчиком, что многие ссылки, которые генерировал @SadFavBot при создании пакетов, не обрабатывались Телеграмом из-за неправильного кодирования в base64url или превышения лимита в 64 символов. Поэтому пришлось переделать систему создания и установки пакетов: теперь у каждого пакета есть свой UUID, который и используется в ссылке. Все старые ссылки, половина или даже большинство из которых и так были сломаны, теперь недействительны — можете пересоздать пакеты, чтобы получить актуальную. Установка по имени работает штатно. В своём публичном списке я их обновил. Также один из провайдеров курсов валют для @textUtilsBot убрал свободную отдачу информации без API KEY'я, из-за чего курсы фиатных валют перестали обновляться. Исключил его из настроек и актуализировал данные. Всех с наступающим старым новым годом и хороших выходных! ☃️
07.01.2024


song.link
05.01.2024


Channel name was changed to «Kozalo's Blog 🇷🇺»
05.01.2024


My currently active projects Telegram bots: ⭐️ @SadFavBot — favorites bot, written in Go (repo 💻); 🗺 @LocPlaceBot — inline bot, written in Rust, that allows you to search for some place and send its coordinates as a location (repo 💻); 🍆 @DickGrowerBot — game bot, written in Rust, to measure and compare your Big Ben with friends' ones (repo 💻); 🔤 @textUtilsBot — simple bot, written in Python 3, that has some useful handlers of inline queries to make text conversions (repo 💻); 🤖 @kozRandBot — randomizer bot, written in Python 3 (repo 💻); ⏯ Telegram channel @kozaloru in Russian with notes about different aspects of IT, bypassing of prohibitions, investments, biohacking, etc. 🕸 Old blog as a separate website — kozalo.blog — with old articles (in Russian, of course) and programs. Some other old ░░░ projects: 😎 cbt.sadbot.ru — colorblindness test in Russian; 🐍 Ren'Py Image Puller — unpacker of sprites and images from any Ren'Py based game (but tested on and natively supports Everlasting Summer); 🐚 Thimbles — shell game (thimblerig), written in Python using PyGame (repo).
05.01.2024


Какое-то время назад (ещё летом, лол) я завёл себе англоязычный форк данного канала — @kozalo_blog. Не знаю, насколько часто буду туда писать: пока планируются только уведомления об обновлениях ботов — но хотя бы наконец-то составил список активных проектов и расписал немного актуальной информации о себе. Подписывайтесь, если хотите получать только уведомления об обновах и не боитесь чуждого "вражеского" языка)
04.01.2024


Также обновил пример конфигурации для postgres-backupable. Обратите внимание, что если не монтировать папку /backups в какой-либо том, то все файлы будут обнуляться при пересоздании контейнера: сначала локально, а потом и в облаке. Так что крайне желательно обновить docker-compose.yml, пересоздать контейнер, а потом зайти в него и стянуть старые бэкапы из облака: docker exec -it yourproject-postgresql bash rclone --config='/config/rclone.conf' sync "remote-s3:${BACKUP_S3_BUCKET}" "/backups/${POSTGRES_USER}/"
04.01.2024


За последние два дня выпустил пару багфиксов для ботов. @textUtilsBot v2.4.2 исправляет: ➖ критический баг с обработкой адресов в «очистителе URL», когда все остальные параметры, кроме обрезанных меток, превращались в массивы; ➖ съехавший маппинг раскладок. @SadFavBot — исправление багов, связанных с сохранением текстовых заметок: ➖ максимальная длина заметок на русском или любом другом языке, использующем не латинские буквы, была в два раза короче положенных 4096 символов, причём в сообщении об ошибке писалось вообще про 128, что, разумеется, неправда; ➖ сохранённый текст выводился без учёта элементов форматирования; ➖ сломанное удаление одной заметки, если есть парная, но с другим форматированием.
03.01.2024


В прошлом году я обещал рассказать, как экономить на мобильной связи, но чёт совсем забыл про это. Что ж, исправляюсь. На самом деле особого секрета тут нет: существует возможность за единоразовую плату подключить непубличный тариф для белых людей: с безлимитным трафиком, выгодными пакетами и дополнительными плюшками, но при этом за меньшую абонентскую плату, которая окупает покупку тарифа примерно за год. А если пойти дальше, можно начать экономить и на заказах продуктов, товаров или еды, если использовать арендованные номера и промокоды для новых клиентов во всевозможных сервисах. Только не забывайте отвязывать карту перед выходом из аккаунта-однодневки!
31.12.2023


Отдельно хотелось бы обратиться к тем, кто встречает новый год в одиночестве или компании дальних родственников. Не переживайте! Не обязательно проводить год так, как его встретишь 😄 ░░░
31.12.2023


Итоги года для канала "Kozalo's Blog" от @TGStat
31.12.2023


Тем не менее, некоторые мои давние хотелки всё ещё остаются нереализованными и вновь переносятся на следующий год: ➖ переезд старого блога на новый движок с миграцией имеющихся статей (скорее всего, он будет реализован на базе готовой headless CMS); ➖ создание единой системы учёта фиатных и криптографических финансовых активов (возможно, на базе Portfolio Performance; главные требования от меня: автоматическая загрузка котировок, балансов из блокчейна, возможность импорта и расчёта изменений в портфеле по отчётам российских банков и брокеров); ➖ спроектировать, спаять и запрограммировать анализатор воздуха, чтобы наконец-то начать понимать, кроме влажности, ещё и количество диоксида углерода CO₂ в квартире; ➖ написать серию статей про различные психоактивные вещества: от самых распространённых, безобидных и повсеместно употребляемых до более серьёзных ░░░ и ограниченных в доступе государственными органами. Но всё-таки главной задачей следующего года для меня, как человека и представителя пролетариата, будет поиск работы и восстановление крайне истощённых финансовых ресурсов. Так что очень тяжело предсказать объём работ, который будет реализован на общественных началах, и что-то обещать сейчас было бы крайне легкомысленно: всё-таки после целого дня работы разработчиком мне вряд ли захочется снова сесть за комп и что-то писать, сами понимаете) Таким образом, на новогодних каникулах я обновлю и опубликую резюме на HeadHunter и LinkedIn. Буду рад встречным предложениям в личке! Напоследок хотелось бы отметить, что впервые с 2019-го года я смотрю в будущее с оптимизмом и позитивом. Чего и вам желаю! Благодаря достижениям современной науки и медицины, за последний месяц я сделал огромные успехи в борьбе со своими демонами, депрессией и зависимостями. Мир вновь зацвёл различными цветами радуги, а продуктивность значительно повысилась, что внушает ощущение, что год Дракона будет волшебным, невероятным, потрясающим и ведущим к успеху и финансовому благополучию и свободе! В том числе всех вас, мои дорогие читатели и подписчики! Аминь! Всех с наступающим Новым годом и счастливого Рождества!
31.12.2023