en
Feedback
Kozalo's Blog 🇷🇺

Kozalo's Blog 🇷🇺

Open in Telegram

Блог заднего разработчика и ботовода | kozalo.ru | автор: @kozalo, English fork — @kozalo_blog. Поддержать: kozar.in/donate

Show more
336
Subscribers
No data24 hours
+17 days
-530 days
Posts Archive
Не прошло и 10 лет, как часть статистики, которую каждый владелец бота собирал по-своему, начал предоставлять сам Telegram це
Не прошло и 10 лет, как часть статистики, которую каждый владелец бота собирал по-своему, начал предоставлять сам Telegram централизованно, причём публично для всех. Правда на самом деле аккаунтов в базе около 8,3 тысяч, но да ладно. Надеюсь, в дальнейшем они предоставят наконец-то сервис по просмотру количества сообщений, команд, запросов к боту, чатов и тому подобного, чтобы не приходилось постоянно переизобретать велосипеды. Тем временем, за две недели совершается уже больше 17 тысяч сражений и чуть меньше 23 тысяч приростов. Растём потихоньку! Новостей каких-то пока нет: работа и лето выжимают все соки — успел за выходные только закончить переезд со старого чикагского сервера, перенести всю работу по пересылке писем с доменных почт на Cloudflare; понять, что во время начала переезда я поломал половину адресов и, если бы даже мне кто-то туда писал, письма всё равно бы не доходили 😅

Repost from sanspie's notes
https://habr.com/ru/articles/832678/ TLDR: YouTube в России замедляют, используя метод анализа незашифрованного SNI в TLS-соединениях, что позволяет определить и ограничить трафик. Ограничение можно обойти с помощью манипуляции SNI или использования специальных программ, таких как GoodbyeDPI и zapret, которые изменяют структуру пакетов, чтобы избежать блокировки.

Упс! Чёт я не дотестировал и выпустил эту штуку вообще нерабочей. Поправил — теперь должно работать. А ещё я почему-то совсем забыл рассказать про позапрошлый релиз 1.2.3, который хоть и не принёс кучу новых фич, но поправил целый ворох старых проблем: 1️⃣ Появилась защита от одновременного принятия сражений несколькими игроками (да, раньше никаких локов не ставилось и кнопка становилась неактивной только после обновления сообщения и её физического удаления, что, разумеется, происходит далеко не сразу из-за множества сетевых задержек, и возможность потерять две ставки вместо одной ожидаемой была очень даже практической, а не теоретической). 2️⃣ В нескольких местах, в основном в сражениях и в импорте, не был сделан эскейпинг имён пользователей, что приводило к ошибкам у изобретательных и творческих людей, ставящих туда различные спецсимволы, особенно угловые скобки. Сейчас (вернее ещё с 29 июня) всё должно быть в порядке. 3️⃣ Была исправлена очередная ошибка, возникающая из-за переполнения при указании слишком большой ставки в inline-режиме. На этот раз без читерства, а с честной ошибкой в логах и отсутствием ответа на нажатие кнопки для пользователя. 4️⃣ Вроде сделал текстовки для займов чуть более понятными и менее вводящими в заблуждение.

Статистика сражений! В @DickGrowerBot v1.3.2 По многочисленным просьбам реализовал сбор аккумулированной статистики по результатам битв. Релиз v1.3.0 был раскатан ещё 2 июля, с этой даты и начался подсчёт (все старые битвы, к сожалению, пролетели мимо). Сегодня, 12 июля, думаю, статистики уже набралось достаточно, так что можно включать отображение. И в честь данного обновления дарю промокод RVER130 на 13 см, который как раз теперь можно активировать быстрым способом: ввести через режим встроенных (inline) запросов и нажать на появившуюся кнопку. Либо можно сделать это по старинке через чат с ботом, но теперь необязательно писать команду и промокод в одной строке: можно вызвать команду с помощью автодополнения, а потом уже ввести промокод отдельным сообщением. Из минорных обновлений, которые уже многие могли заметить ранее: 1️⃣ имя игрока, вызвавшего команду /top, теперь подчёркнуто линией, чтобы проще и быстрее было визуально найти себя в списке; 2️⃣ по просьбе Telegram добавлена команда /privacy, где подробно расписано, какие данные хранятся в базе данных бота. Выражаю благодарность @titov_one за идеи для половины функций этого релиза!

@SadFavBot v1.2.5 Ещё более мелкое улучшение, но, надеюсь, что для многих так станет гораздо удобнее добавлять новые закладки
@SadFavBot v1.2.5 Ещё более мелкое улучшение, но, надеюсь, что для многих так станет гораздо удобнее добавлять новые закладки. Теперь, если не удалось найти ни одной закладки по указанному в поиске алиасу, бот предложит кнопку, чтобы перейти к нему в личку, и автоматически запустит команду сохранения, сразу же заполнив алиас! Останется только накидать объектов для сохранения. При пустом запросе реализация теперь тоже не такая топорная: вместо тупого редиректа тоже будет сразу вызвана команда сохранения и предложено ввести алиас. Ну а ещё, дабы соблюсти просьбу администрации Telegram, я добавил команду /privacy, где расписал про все данные, которые хранятся в базе данных бота.

Небольшое обновление @SadFavBot v1.2.4: ➖ починил отправку видеокружков (просто забыл маппинг для них 😅 Спасибо подписчику, что сообщил об ошибке!); ➖ добавил кнопку для перехода в чат с ботом из инлайн-режима, когда запрос пуст (может поможет привлечь новых пользователей, которые тапают по названию бота в заголовке сообщения, но не понимают, что с ним делать дальше).

Кстати, когда разбирал файлы с сервера, нашёл старый скрипт для пинга и хелсчека других серверов. Не знаю, куда его девать, так что поделюсь здесь:
#!/bin/sh

# Configuration
ADMIN_EMAIL=your@email.td
ERR_MAX=5
SLEEP_TIME=300

# Check if we don't know the hostname
if [ -z "$1" ]; then
    echo "Pass a hostname as an argument!"
    exit
fi

# Main loop
ERR_COUNTER=0
while true; do
    echo
    echo "Ping attempt: $(date)"
    if ! ping -qc1 "$1"; then
        report_message="The remote host $1 is down!"
        echo $report_message
        ERR_COUNTER=$((ERR_COUNTER + 1))
        if [ $ERR_COUNTER -gt $ERR_MAX ]; then
            echo "$report_message" | sendmail "$ADMIN_EMAIL"
            ERR_COUNTER=0
        fi
    fi
    sleep $SLEEP_TIME
done

Наконец-то смигрировал блог на другой сервер, без проблем с оплатой. В принципе, это оказалось не так сложно: 1️⃣ берём дамп сайта, базы данных и конфиг apache2; 2️⃣ разносим статичные ресурсы с кодом и загружаемые через админку файлы и изображения по разным папкам; 3️⃣ пишем Dockerfile: берём за основу php:7-apache и копируем в наш образ код, стили и конфиг (/etc/nginx/sites-available); 4️⃣ копируем в отдельную папку на сервере загруженные файлы, не забыв предоставить права на чтение и запись для www-data; 5️⃣ пишем docker-compose.yaml файл, где запускаем наше приложение, примонтировав туда директории с заранее скопированными файлами; 6️⃣ добавляем mysql:5, примонтировав в /docker-entrypoint-initdb.d/ файл с нашим дампом БД; 7️⃣ docker compose up -d; 8️⃣ при необходимости настроить фронтальный прокси-сервер; 9️⃣ PROFIT!

@SadFavBot v1.2.3 — майский набор исправлений Большей частью в этом релизе лишь исправляется пара тонких, но важных косяков: 1️⃣ Раньше попытка добавить текстовую закладку с кастомным эмодзи ломала все закладки под этим алиасом; теперь же добавление подобных закладок запрещено валидатором, поскольку на данный момент боты всё равно не могут использовать кастомные эмодзи, так что сохранять такое бессмысленно. 2️⃣ Было сломано удаление старых закладок с ссылками, номерами или емейлами. Добавил костыль, чтобы починить. Хотя есть и небольшие улучшения: 1️⃣ алиасы в клавиатуре с предложенными вариантами теперь отсортированы по алфавиту (очевидная фича, про которую я почему-то забыл); 2️⃣ также добавлена забытая клавиатура для команды /rmlink. Кстати, обратите внимание, что в группах команды приходится вызывать полным именем: /save@SadFavBot, например. Это особенность реализации режима приватности в групповых чатах Telegram, о чём теперь сказано в справочном сообщении. Впрочем, данное ограничение можно обойти, если назначить бота администратором.

Патч установлен. Система включена обратно. Всем, кто ждал, спасибо за ожидание, и приношу извинения за доставленные неудобства!

🤖 Калькулятор теперь доступен в любом чате Telegram благодаря @calc — бот поддерживает конвертацию валют, просмотр курсов и не только. 🐬 Конвертация @calc 720 баксов в рубли 💰 Узнать курс @calc BTC RUB 📶 Калькулятор @calc 15000*0.25+2% Всё это часть обновления Crypto Bot, которому вчера исполнилось 3 года. За это время бот стал самым быстрым и удобным способом для покупки, хранения и отправки криптовалюты внутри Telegram. @DeCenter

Блин, можно выпиливать калькулятор из @textUtilsBot. Команда Тг сама его реализовала лучше и практически нативно: с коротким именем бота и без плашки, что сообщение отправлено через inline-режим. Очередной обесценившийся труд коту под хвост…

Так-с, система кредитования пока временно отключена. Мне сообщили об очень неприятном и глупом баге, который я пропустил: обновление длины не увеличивает счётчик дополнительных ежедневных приращений, что, во-первых, не позволяет взять кредит, если сегодня чик-чирык был уже увеличен, а, во-вторых, препятствует росту, если кредит был взят сначала. Да и перк списаний, выходит, работает тоже неправильно. Фича тоглы выручают в который раз 🙏🏼 Надеюсь, до конца недели смогу выкатить фикс, а то закончившиеся праздничные выходные как-то сейчас очень не кстати. А вообще сделать ограничение на триггере в СУБД было и правда очень плохой идеей. Зря я не слушал, когда мне говорили… Впрочем, про факапы можно ещё много чего рассказать. Пожалуй, стоит как-нибудь посвятить этому отдельный вечерок

Да, я ещё в конце прошлого года обещал подумать и реализовать помощь для тех, кто попал в минусовую зону, активно принимая участие в жестоких сражениях на "мечах", но реализация задачи несколько затянулась в виду объёма (пришлось переделать всю систему инкрементов, чтобы создать задел на будущие доработки), нехватки времени и желания. И вот наконец-то все три обещания воплощены в жизнь: 1️⃣ чем больший у игрока минус — тем больше помощи он получает при каждом приросте (сейчас параметр равен 0,1% от размера "задолженности", так что фича работает от -1000 см и глубже); 2️⃣ можно погасить минус в кредит с помощью команды /loan, что становится актуальнее при небольшой задолженности (от -999 и меньше): долг будет медленно погашаться по указанной процентной ставке как от ежедневных приростов, так и от побед в сражениях; 3️⃣ и да, участвовать в боях теперь окончательно можно только на имеющиеся сантиметры, без ухода в минус. Надеюсь, это как-то может исправить возникшую ситуацию. Я смотрел 24 апреля: было 550 писюнов с длиной меньше ноля, из которых 45 — глубже тысячи, а рекордсмены уходят за десятки и даже за сто тысяч. Сейчас таких стало уже 517 и 44 соответственно. Будем наблюдать. Также стоит отметить ещё одно важное изменение: я включил для бота режим приватности и теперь он не имеет доступа ко всем сообщениям в чате, что, разумеется, хорошо для большего доверия пользователей и снижения нагрузки для меня и Тг. Оказалось, что для работоспособности команды /import бота можно просто сделать временно администратором чата, что не должно быть проблемой, учитывая, что вызывать команду и так могут только админы. Я особо не проверял, правда, но в теории всё должно работать. Если это не так — смело пишите, будем разбираться :) Что касается статистики: количество вызовов команды /grow за 2,5 месяца с прошлой картинки выросло в 2,76 раза, а количество сражений — в 1,36 раза, что, конечно, очень недурно, но и не вау. Полагаю, нужно пилить новые фичи и устраивать какие-либо ивенты для привлечения более широкой аудитории, но я пока не уверен, что у меня теперь будет хватать на это времени. У меня есть некоторые мысли, что можно было бы ещё сделать, учитывая открытые просьбы в Гитхабе, но я пока их не сформулировал в какую-то последовательную стратегию и чёткие требования. Надо всё-таки ещё баги для @SadFavBot фиксить, и озаботиться спасением блога до наступления очередной даты оплаты хостинга. На всё не хватает сил и рук. Вот если бы подписчики добавили топлива в печку мотивации…

Всем привет! Давно меня не было, но ещё успеваю зарелизить апрельское обновление для @DickGrowerBot под номером 1.2! На самом
Всем привет! Давно меня не было, но ещё успеваю зарелизить апрельское обновление для @DickGrowerBot под номером 1.2! На самом деле первая минорная версия была выпущена ещё на прошлой неделе, как многие могли заметить, но только сегодня я задеплоил патч, затыкающий все допущенные дырки в логике и обновляющий справочное сообщение, которое видят все новые игроки. (подробнее в следующем посте)

На что только ни пойдёшь ради денег: даже на работу. © народная мудрость Автор не умер, автор активно искал работу: 6 недель
На что только ни пойдёшь ради денег: даже на работу. © народная мудрость
Автор не умер, автор активно искал работу: 6 недель почти ежедневных собеседований по 1-2 штуки, не считая созвонов с рекрутёрами и кучи переписок. Наконец-то эта активность подходит к концу: определились фавориты, проясняются вопросы по поводу оформления и статусы подвисших переговоров — так что скоро я смогу выплатить все кредиты, спокойно выдохнуть и снова начать жить полной жизнью. Ну и сюда что-то писать появятся силы, надеюсь, а то ежедневные "экзамены" сильно выматывали морально. Впрочем, о трудностях и перипетиях поиска работы в IT в РФ 2024 года расскажу немного позже в отдельном посте, когда всё окончательно устаканится и будет решено, а сегодня, вслед за товарищем @arisudesu, хочу поздравить всех с Международным днём резервного копирования и напомнить о необходимости периодической проверки работоспособности скриптов, которые их снимают. Благо сейчас есть куча разных решений: как и моя бэкапилка дампов Постгреса в S3-хранилище, так и скрипты на основе restic'а.

Февральское обновление @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 для динамического определения кнопок. Всем добрых и весёлых выходных!)

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

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