Kozalo's Blog 🇷🇺
Open in Telegram
Блог заднего разработчика и ботовода | kozalo.ru | автор: @kozalo, English fork — @kozalo_blog. Поддержать: kozar.in/donate
Show more336
Subscribers
No data24 hours
+17 days
-530 days
Posts Archive
Не прошло и 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
Ещё более мелкое улучшение, но, надеюсь, что для многих так станет гораздо удобнее добавлять новые закладки. Теперь, если не удалось найти ни одной закладки по указанному в поиске алиасу, бот предложит кнопку, чтобы перейти к нему в личку, и автоматически запустит команду сохранения, сразу же заполнив алиас! Останется только накидать объектов для сохранения.
При пустом запросе реализация теперь тоже не такая топорная: вместо тупого редиректа тоже будет сразу вызвана команда сохранения и предложено ввести алиас.
Ну а ещё, дабы соблюсти просьбу администрации 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, о чём теперь сказано в справочном сообщении. Впрочем, данное ограничение можно обойти, если назначить бота администратором.Патч установлен. Система включена обратно. Всем, кто ждал, спасибо за ожидание, и приношу извинения за доставленные неудобства!
Repost from DeCenter — блокчейн, биткоин, инвестиции
🤖 Калькулятор теперь доступен в любом чате 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! На самом деле первая минорная версия была выпущена ещё на прошлой неделе, как многие могли заметить, но только сегодня я задеплоил патч, затыкающий все допущенные дырки в логике и обновляющий справочное сообщение, которое видят все новые игроки.
(подробнее в следующем посте)
На что только ни пойдёшь ради денег: даже на работу. © народная мудростьАвтор не умер, автор активно искал работу: 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-хэшу. Прошу прощения за доставленные неудобства!