RSS
Поиск
03.06.2023


@LocPlaceBot — инлайн-бот для поиска и прикрепления локаций Попробовал на досуге Rust и написал небольшого бота. Суть проста. Есть проблема: когда договариваетесь о встрече в каком-либо заведении, одному приходится идти в приложение карт и копировать адрес, а собеседнику приходится копировать адрес и идти в приложение карт, чтобы понять, где это место вообще находится. Почему-то в клиенте Тг можно прикрепить только свою локацию, но не какого-то другого объекта. Данную проблему и решает этот бот — просто передаёте ему адрес и отправляете соответствующую точку на карте. В простейшем (не для пользователя) случае можно отправить координаты: тогда бот их сразу же использует для формирования локации. Но чаще всего адрес будет всё-таки текстовым, и тут приходится прибегать к использованию стороннего API геокодирования и поиска. На данный момент реализована поддержка только Google Maps API, как самого известного провайдера мировых картографических данных с простым получением ключа в пару кликов. Исходный код, как всегда, доступен на GitHub: https://github.com/kozalosev/LocPlaceBot
18.05.2023


Где-то 45 минут @textUtilsBot и @kozRandBot были в ауте, пока я добирался до дома. Пришлось перезагрузить сервер, потому что где-то начали течь файловые дескрипторы и они успешно закончились, не давая даже войти в терминал. Будем разбираться…
12.05.2023


Как предложили в комментариях, оформил данный скрипт в виде расширения докер-образа PostgreSQL: postgres-backupable (kozalo/postgres-backupable в Docker Hub). К образу дополнительно необходимо примонтировать файл конфигурации RClone и передать название бакета через переменную окружения BACKUP_S3_BUCKET — всё! Теперь каждый день в два часа ночи crond, реализованный в бинарнике BusyBox и входящий в состав Alpine, будет запускать скрипт для создания бэкапа и его загрузки в S3. Уже перевёл свои сервисы на этот образ и отказался от использования system wide конфигурации. Всё отлично работает! В репозитории лежит пример конфигурации для использования Scaleway S3, но ничего не мешает использовать любого другого провайдера.
09.05.2023


ЛеньОнид сегодня у нас мужские имена. Пишите свои вариант в комменты
06.05.2023


Вместе с ним обновилась и библиотечка локализации klocmod, но там изменения ещё более минорные: словари стали hashable, а контейнер — iterable
06.05.2023


Спустя почти 3 года немного обновил @kozRandBot (v1.2.0). Теперь он умеет генерировать пароли без использования дополнительных символов: только используя латиницу и цифры — с помощью отдельной команды /seqc. Пожалуй, так будет удобнее и практичнее, чем пытаться усидеть на двух стульях и менять список символов в попытках подстроиться под различные сервисы или места, где использование некоторых из них запрещено или нежелательно. Также теперь список команд доступен на всех трёх поддерживаемых языках: на русском, английском и португальском. И я прикрутил метрики, чтобы понять вашу активность) Логи nginx'а выглядели многообещающе. Судя по ним, запросов приходит не так и мало. Возможно, это единственный бот, которым реально пользуюсь не только я. Вот и узнаем
01.05.2023


C первым мая — Днём труда, товарищи! :)
01.05.2023


29.04.2023


В комментариях посоветовали присмотреться к Zinc Observe, написанному на Rust. Приложил там в ответах отзыв и пример конфигурации тоже
28.04.2023


28.04.2023


К следующему посту прикреплены примеры готовых конфигов, собранные с просторов интернета. Оказывается, Телеграм не позволяет миксовать файлы и текст :/ Всем хороших выходных! 🍻
28.04.2023


Поигрался сейчас с экосистемой Grafana. Это как ELK, но софт, написанный не на прожорливой Джаве, а на Golang'е. В результате весь стек из Getting Started гайда в виде образов весит уже не 2 Гб, а 800 Мб. По памяти цифры, разумеется, куда более приятные и впечатляющие: — Loki (аналог ElasticSearch): 33 Мб, но нужно два инстанса (для чтения и записи); — promtail (аналог Logstash): 45 Мб; — Grafana (аналог Kibana): 62 Мб; — MinIO (S3-хранилище): 126 Мб; + 11 Мб на nginx. То есть аналоги Эластика и Кибаны будут весить всего 100 Мб ОЗУ в сумме! Что тоже не мало, но уже куда более терпимо даже для бюджетных VPS. Правда, это цифры в простое. Напоминаю, что EK у меня падали по OOM сразу при старте. Впрочем, полный стек запускать всё ещё тяжело. Благо есть выход! Они предлагают вечные 50 бесплатных гигабайт в своём облаке как сервис! Причём даже для русских! В принципе, штука не особо критичная, так что остановлюсь пока именно на этом варианте. Для сбора и отправки логов нужен promtail. Да, есть ещё отдельное приложение от Графаны, но это kind of vendor lock, а promtail всегда можно перенастроить на собственный кластер. Для его установки и использования есть два простых варианта: 1) поставить плагин логирования для Докера. Плюсы: устанавливается в две строчки. Минусы: нужно либо менять глобальный конфиг Докера на хост-машине, либо ко всем сервисам в docker-compose.yaml вписывать ключ к API. 2) если используете в качестве драйвера journald, то можно создать один простой файл конфигурации, поднять promtail как сервис в контейнере, примонтировав директории с логами и получить все логи с сервера разом! Я выбрал эту опцию. Драйвер: https://grafana.com/docs/loki/latest/clients/docker-driver/#docker-driver https://grafana.com/docs/loki/latest/clients/docker-driver/configuration/ journald: https://www.reddit.com/r/grafana/comments/xiujsr/promtail_journal_and_loki/ https://grafana.com/docs/loki/latest/clients/promtail/scraping/#journal-scraping-linux-only
28.04.2023


@textUtilsBot v2.2.3 И тут же переходим с Golang обратно на Python: добил наконец-то релиз 2.2.3 для бота текстовых утилит. Изменения коснулись двух вещей: — полностью переработана система помощи: теперь она не спамит десятком сообщений, а выводит одно, с возможностью переключать информацию по конкретной команде кнопками; — модуль калькулятора стал точнее в части конвертации криптовалют: список курсов стал обширнее более чем в два раза ░░░ и обновляется теперь в 24 раза чаще! ░░░Но, к сожалению, полностью избавиться от изначальной проблемы не удалось. В чём суть? Крипто-активов существует огромное количество, поэтому CoinMarketCap выдаёт лимитированное количество курсов за один запрос, причём за каждые 200 штук снимает 1 кредит пользования API. По умолчанию сортировка выполняется по их собственной методологии в соответствии с ранжированием криптовалют по капитализации. Что в целом норм, но также это означает, что список валют в данных не стабилен и некоторые могут вываливаться из обновлений. В результате, долгое время, например, лежали старые данные для XTN, который бывший USDN — недостейблкоин от Waves — и который за последние месяцы скатился с $0.14 до $0.05 и до 1168 места в рейтинге. А системы удаления ложных данных сейчас нет, потому что БД представляет собой простой dbm-файл, в котором легко хранить простые ключи-значения (валюта → курс), но становится страшно неудобно оперировать более сложными структурами данных, чтобы можно было прихранить дату экспирации. Так что думаю теперь переделать хранилище на Redis и вообще оформить заполнялку курсов в виде отдельного приложения в отдельном репозитории — начать строить свою империю микросервисов, так сказать) Но пока советую не верить данным для не топовых криптовалют, а использовать их только как грубую прикидку
27.04.2023


Ахах, для линуксоидов и последователей Ричарда Столлмана даже есть своя кола! https://en.wikipedia.org/wiki/OpenCola_(drink) https://en.wikipedia.org/wiki/Open-source_cola Напиток с фото, правда, по вкусу вообще на колу ничем не похож. Совершенно оригинальный напиток, примазавшийся к славе "кокаинового напитка". Ох уж эти маркетологи…
27.04.2023


Вчера провёл ребрендинг одного из своих сайд-каналов — @WellOfDesires, пристанища мечтателей ░░░ — и вернул для него наконец-то бота-предложку @WellOfDesiresBot, которого один из админов уже хостил в 2019 году под другим именем, но потом сообщество развалилось и бот умер. Было странно столько лет жить сапожником без сапог, но лень и выгорание РАБочего человека — страшные силы. Использовав наработки от предыдущего бота, удалось запилить нового всего за 4 дня! Код, как обычно, доступен в публичном доступе: https://github.com/kozalosev/PostSuggesterBot Общая же часть, так сказать фреймворк, в итоге вылилась в ещё один репозиторий: https://github.com/kozalosev/goSadTgBot/ Главной особенностью моего фреймворка является возможность создавать формочки для пошагового заполнения параметров команды. При этом состояние сохраняется в Redis, а значит не теряется при перезапуске бота и шарится между несколькими инстансами бота, если потребуется его масштабировать. Однако сегодня товарищ @ivas1ly подсказал, что существует библиотека с похожими расширениями, но генерируемая автоматически из документации Telegram Bot API и содержащая все новейшие структуры данных для запросов, а не основанная на заброшенной библиотеке. Так что, вероятно, я опять выполнил много никому не нужной работы, и всем стоит пользоваться именно ей)
22.04.2023


И правда работает! Правда, использовать надо генератор не для Сваггера, а уже для OpenAPI, который достаточно просто запускается в Докер-контейнере: https://github.com/OpenAPITools/openapi-generator#16---docker Однако, сгенерированный клиент — это всё-таки сгенерированный клиент, который не отличается особым удобством по сравнению с полноценными библиотеками. Вот, например, как выглядит отправка запроса для установки названия бота на русском языке: client := openapi.NewAPIClient(openapi.NewConfiguration()) req := client.DefaultApi.SetMyNamePost(context.Background()) resp, _, err := req.Name("Бот").LanguageCode("ru").Execute() if err != nil{ log.Fatal(err) } else if !resp.Ok || !resp.Result { log.Fatal("Something went wrong...") } else { log.Println("Name was set successfully!") } По-хорошему, надо писать свои функции-обёртки, чтобы всё это красиво выглядело) Однако, неплохой вариант, если хочешь быть на острие технологий. Может быть и попробую как-нибудь в следующий раз, для другого бота.
22.04.2023


Генерируешь open-api схемку этим https://github.com/ark0f/tg-bot-api Потом генерируешь клиентские вызовы например этим https://github.com/swagger-api/swagger-codegen
22.04.2023


А вот с новыми методами по установке описаний и имени бота на разных языках случился облом — библиотека, которую я использую, не обновлялась с конца 2021 года и не поддерживает структуры данных для них. Есть всё-таки минусы в использовании сторонних байндингов к API. Может быть, есть другие варианты?
22.04.2023


Обновление успешно установлено без каких-либо проблем! А где-то часа в 4 ночи, уже в автоматическом режиме, раскатится следующее. Оно принесёт новые описания для команд, в том числе на русском языке, а также возможность пересоздавать пакеты закладок за один шаг, а не удалять и создавать их заново (полезная вещь для атомарного обновления паков с мемами, хех). Ну и также исправит пару багов, связанных с UX команд смены языка и удаления закладок.