После прошлого поста мой список задач вновь разбух от ваших комментариев. Кто-то ругался на растянутые видео с Самсунгов, кто-то просил профессиональную работу со звуком.
Я взял паузу и переписал половину кода. Баги исправлены, вертикалки работают, а функционал вырос в два раза. Давайте покажу, что нового.
Для тех, кто пропустил прошлые посты, напомню, что Vidocean это видеоредактор, который работает на 100% в вашем браузере. Никакие файлы не улетают на сервер, всё обрабатывается мощностями вашего процессора и видеокарты через WebAssembly и WebCodecs. Приватность максимальная.
1. Студийный звук: Компрессор и Авто-выравнивание
Тихий звук бесит зрителей даже больше, чем плохая картинка, поэтому я добавил полноценный аудио-движок. Во-первых, появился компрессор. Он работает как в любом DAW(FL Studio, Ableton Live и т.д.), выравнивая динамику. Во-вторых, добавлена функция Loudnorm или авто-уровень. Это волшебная кнопка, которая приводит громкость к стандарту минус 14 LUFS, что является стандартом для YouTube и Spotify. Просто нажимаете, и звук становится ровным и профессионально громким.
Автовыравнивание громкости звука
Компрессор звука
2. Удаление тишины (Silence Remover)
Вы загружаете лекцию, подкаст или влог, алгоритм сканирует звук, находит паузы, вдохи и молчание, а затем автоматически вырезает их, склеивая видео. На выходе получается тот самый эффект Jump Cut. В настройках можно задать порог тишины в децибелах и минимальную длительность паузы, чтобы речь не звучала рваной. Также можно выбрать конкретную аудиодорожку для анализа. Сразу предупреждаю, инструмент экспериментальный, любая обратная связь приветствуется. (Пока что работает только в chromium-подобных браузерах:Google Chrome, Yandex Browser, Edge и другие)
3. Таймлапс из фотографий
Функция для фотографов, 3D-художников и владельцев экшн-камер. Вы просто перетаскиваете папку с сотней или тысячей фотографий, а сервис собирает их в видеофайл MP4.
4. MP4 в PNG последовательность
Это обратная операция, которая позволяет разобрать видео на кадры в форматах PNG, JPG или WebP. Полезно для аниматоров, создания спрайтов или если нужно вытащить конкретный кадр в максимальном качестве без артефактов обычного скриншота.
5. Нишевые конвертеры
По заявкам в комментариях я добавил поддержку специфичных форматов. Теперь есть конвертация видео в OGV. Также добавил конвертацию WMV в AVI для тех, кто работает со старыми архивами.
6. Продвинутый GIF-конвертер
Теперь гифки можно сжимать в 1,3-2 раза сильнее без видимой потери качества. Я добавил Lossy-сжатие от 0 до 100 процентов, оптимизацию палитры и удаление дубликатов кадров, что идеально подходит для скринкастов.
Работа над ошибками (Samsung, iPhone и память)
В прошлый раз в комментариях справедливо ругались на баги, поэтому я провел большую чистку. Главное, я победил вертикальные видео. Владельцы Samsung и iPhone могут выдыхать, так как я полностью переписал логику чтения метаданных Rotation. Раньше видео могло растягивать или переворачивать, теперь сервис корректно понимает ориентацию файла с любого телефона(искренне надеюсь на это). Также исправлен баг Dimension Resolver, когда при кропе или ресайзе слетали пропорции.
Планы
Разобраться с конструктором и интегрировать в него большую часть инструментов в единый интерфейс. Это довольно сложная задача, пока оставляю на потом. Тёмная тема и пакетная обработка не за горами
Сервис бесплатный. Если хотите поддержать проект, на сайте есть кнопка доната, но весь функционал доступен и так. https://pay.cloudtips.ru/p/cdf123e9
У меня просьба к лиге тестировщиков, особенно интересно ваше мнение про удаление тишины и компрессор. Это технически сложные штуки, буду рад фидбеку. Если что-то отвалится, пишите в комменты версию браузера и ОС, буду чинить.
Научитесь писать безопасный высокопроизводительный код и решать сложные продакшн‑задачи. Джуниоры смогут выйти на мидл-уровень: научатся проектировать сервисы с чистой архитектурой и писать устойчивый к ошибкам код. А мидлам курс поможет углубить знания в асинхронном программировании, многопоточности и микросервисной архитектуре.
Научитесь проектировать архитектуру приложений, писать производительный код на Rust, реализовывать многопоточные и асинхронные приложения, использовать FFI и создавать C‑style‑библиотеки.
Расширите возможности разработки на JavaScript, чтобы перейти на фулстек. Научитесь настраивать авторизацию и регистрацию, создавать API с помощью Express, MongoDB и Mongoose, взаимодействовать с базами данных с помощью SQL и деплоить фронтенд и бэкенд через Docker и Docker Compose.
Познакомитесь с современными подходами и решениями: от модульных приложений в Spring Modulith до helm-чартов приложения для деплоя в Kubernetes. Освоите работу с базами данных при помощи JPA R2DBC.
Освоите хуки, State Management, TypeScript, Jest и Cypress, научитесь использовать TypeScript при разработке React-приложений и Drag-and-Drop, напишете свое веб-приложение на React и TypeScript, покроете его юнит-тестами.
Над каждым курсом Практикума PRO работает команда из 5+ компаний: так программа собирает разный опыт и даёт панорамный взгляд на индустрию. Приглашаем тех, чьи проекты обсуждает рынок. Специалисты с опытом в Яндексе, Циане, МТС, Касперском, Авито, Volvo, Nestlé, IBM, 2ГИС упаковали свой опыт в курсы.
Изучаю вопрос валидации / экранирования / санитации ввода в цифровом продукте.
Все, что пишу ниже, пишу не с целью опрокинуть чье-то приложение или сайт, а с целью защитить ввод в своем приложении, которое разрабатываю как android разработчик.
Нужны мысли и мнения, какие символы и комбинации стоит экранировать на вводе, чтобы не упал json, а UI не плясал дикие пляски.
Пишу без примеров, так-как в Пакабе в опубликованном посте они прекрасно подчищаются.
Из того, что смог получить общаясь с нейросетью:
1. Bidi-управление - делает неожиданное поведение курсору при выделении, движении через символы.
Получением халявы сначала с юлы, потом с авито я начал интересоваться лет 5 назад. Поначалу я застал времена, когда даже номер телефона я реально вытаскивал с авито, потом это уже стало невозможно. Но если это сталоневозможно мне, то стало невозможно и моим конкурентам. Так что не все так старшно. За эти годы я получил много всякого, чтобы вы не думали, что бесплатно отдают всякую хрень (а ее конечно тоже отдают). Например:
"фурнитуру" от убитых ботинок - грязные шнурки и крючки для их продевания
втулки от туалетной бумаги
картон, обрезки тряпок
приведу несколько наиболее интересных отдач:
2 бытовки с самовывозом
2 токарных станка (1И611П и настольный самодельный)
лазерный станок (поле 40 на 40 см, лазер 50 Вт) с чиллером (это холодильник на 5 КВт для охлаждения лазера)
стройматериалы (фанера и осб (десятки листов), железо, строительные леса)
фуговальный станок с циркуляркой диаметром 40 см - страшная штука
газовые баллоны разные
кондиционеры и отдельно внешние блоки от них
печь-камин на дровах "Бавария 3 стекла"
кассеты от банкоматов, где хранится наличка. Из них получаются отличные системы хранения инструментов, деталей и всяких мелочей
промышленные холодильники со стеклянной дверью, морозильные камеры
компьютеры вплоть до iMac 24"
Первая полученная даром бытовка
Малый самодельный токарный станок
Объявление о его отдаче
Большой полученный даром токарный станок
А это скриншот объявления об отдаче большого
Бесплатные платежные терминалы
Сразу получил и газовую плиту и морозильную камеру
Но постепенно задача поиска нужных мне объявлений в интересных категориях усложнялась. Т.к. авито целенаправленно усложняет алгоритмы запросов к их сайту. Заставляет переходить на платные услуги.
Можно платить и просто иметь api для доступа даже не к сайту, а к их базе, откуда гораздо проще делать запросы и обрабатывать результаты.
Препоны авито
Сначала все было просто. Я имитировал post и get запросы которые делал браузер при поиске объявлений. Отлавливал куки, ключи всякие чтобы авито принимало меня и мои запросы как родные ;-) Но постепенно эта лавочка закрылась. Стал получать ответы, типа каптчу решите, или ваш IP заблокирован, в общем может один запрос из 10 проходил.
Я начал искать новые пути, установил питон и там использовал хромиум который маскируясь под реальный браузер получал содержимое страницы со списком интересующих меня объявлений. Но и этот метод вскоре перестал работать надежно. Почитав инеты, я узнал что есть всякие "невидимые" хромиумы, которые наиболее полно прикидываются реальным браузером и авито не ругается на запрос через них, но и это решение не давало нормального результата, хотя если просто запустить браузер, то все было нормально - авито выдавало список объявлений на мой запрос. Т.е. вывод напрашивался один - хочешь иметь доступ к списку объявлений - пользуйся обычным браузером.
Поиск работающего решения
Так я и решил поступить. Задача была следующая: написать программу, которая:
запускала нужный мне браузер
открывала в нем нужную ссылку (типа найти на авито бесплатную бытовую технику)
дождаться пока страница загрузится
сохранить страницу в файл
дождаться пока страница полностью сохранится
закрыть браузер
Первые 2 пункта решаются легко. Я делаю так: создал ini файл, в котором, в числе прочего, прописан путь к браузеру.
Первое что делает программа (я назвал ее sendkey) это создает строку запуска браузера из пути к браузеру и открываемой ссылки. В итоге я вижу браузер с результатом моего запроса. Осталось самое главное - программно сохранить эту страницу в файл. К сожалению ни у хрома, ни у мозиллы нет никаких аргументов запуска чтобы они там что-то сами сохранили, хотя это было бы конечно офигенно удобно. Ну что ж, придется выкручиваться самому. Я знаю, что если нажать сочетание клавиш "ctrl+S" то появляется окно сохранения открытой страницы.
Далее вводим имя файла и жмем кнопку "Сохранить". Но это все надо сделать программно! В этом-то и есть вся загвоздка. Я начал с того, что запустил программу "spy++" это из поставки visual c++ такая утилита, которя ловит сообщения разных окон когда что-то в этих окнах происходит, например, мы тыкаем или водим мышью или нажимаем всякие кнопки. Так я и подглядел что там происходит на уровне сообщений windows когда я просто руками сохраняю страницу. Осталось эту последовательность симитировать из моей программы. Сразу скажу, это было очень непросто. Если просто так захотеть послать все сообщения, возникат куча вопросов:
кому посылать? надо сначала программно найти сначала оконо браузера, потом окно диалога сохранения, потом кнопку "Сохранить"
задержки это просто беда, браузеры штуки не очень быстрые. То быстро страница грузится, то медленно, то вообще не грузится
в браузерах постоянно выскакивают всякие левые окна. То предложат что-то, то скажут что закрыли аварийно и давайте восстановим ранее открытые страницы?
в разных браузерах много чего отличается, например заголовок окна сохранения страницы. Это тоже надо учитывать.
файл который я сохраняю (точнее старую версию) сначала надо удалить, иначе опять лишние вопросы типа "файл существует, что делать будем?"
обязательно надо выбирать тип сохраняемого файла. Мне же картники и всякие сценарии из него не нужны, надо выбрать "только html"
Повторяю - все это делать программно. Т.е. от запуска браузера до его закрытия происходит туча операций. Есть еще одна очень неприятная хрень. Предположим, в окне сохранения я хочу задать (программно конечно) имя файла. Я нашел именно этот EDIT CONTROL и посылаю ему соответствующее сообщение (WM_SETTEXT) и да, все круто! Мое имя файла встает куда надо. Потом программно нажимаю кнопку "сохранить" и тут страшный облом - хотя имя файла на экране мое, но браузер сохраняет файл со старыми именем! Т.е. если я руками имя ввожу, все ОК, а если программно меняю, где-то там внутри в потрохах хрома да и мозиллы тоже остается старое имя. Я с этим убился просто бороться, но в итоге победил. А чего стоило установка типа файла. Полдня промучился. Дело в том, что если задать нужный формат и успешно сохранить, то выбор типа файла запоминается. Но иногда бывает слетает. И хром начинает тормозить, сохраняя десятки мегабайт всякой хрени, естественно дальнейшая работа встает. Но и эту проблему я решил. Теперь программа запускается так:
где getpage.bat это вспомогательный файл он прибивает возможно зависшие экземпляры браузеров, удаляет старые версии сохраненных страниц, еще хотел в него еще добавить переключение вывода на дополнительный монитор, потом передумал. На выходе имеем html файл со списком объявлений, дальше с ним разбирается моя программа на 1С. Она разбивает файл на отдельные объявления, для кажого определяет ID, название, текст, цену, местоположение и прочее. Потом, по результатм делает рассылку в телеграмм. Проверяя на то что в объявлении нет слов из черного списка, попадает в интервал цен и ранее не было отослано.
Как сейчас работает мой парсер
Как показала практика, мой метод парсинга нормально работает неделями подряд и не вызывает появления капчи. Но меня не устраивала общая скорость работы. У меня же не один запрос. Их около десятка:
бытовая техника
комплектующие для компьютера
просто компьютеры
телефоны
для дома и дачи
ремонт и строительство
оборудование для бизнеса
инструменты
аудио/видео техника
и т.д. Если все эти запросы крутить на одном компе, то частота каждого сильно уменьшается. Может это будет раз в 10...15 минут. Очень медленно, часто за секунды что-то ценное уходит, а тут 10 минут! Надо было что-то придумать. Я понимал что неплохо бы создать целую кучу компов и распределить запросы между ними. Но эта куча должна же где-то стоять, шуметь, жрать электроэнергию, да еще следить надо за всем этим. В итоге, я собрал себе сервер и решил создать на нем кучу виртуальных машин. Я купил корпус огромный десктопный супермикро причем с лицензионной наклейкой, т.е. лицензию получил практически даром. В корпус поставил материнку тоже супермикро двухпроцессорную на сокетах 2011. Не люблю всякие хунаны и прочую галимую китайчатину. Всего у меня 24 ядра (48 потоков), 128 гигов оперативки модулями по 32 гига, SAS диски на аппаратном raid контроллере. 2 диска SAS твердотельных и два SAS обычных для хранения виртуальных машин. В общем, работает такой сервер очень неплохо, шумит только и греет воздух, поэтому собираюсь перевезти его на дачу, там делаю себе волокно и фиксированный IP адрес. Бесперебойник есть APC на 2.2 Квт, места полно. Пусть гараж отапливает в процессе работы.
Стопка бесплатных серваков. С дисками SAS, памятью, исправные
В тот же заход полученные дисковые полки с дисками. Охренеть какие тяжелые.
Теперь об организации парсинга. Сначала я решил сделать одну образцовую виртуальную машину (далее ВМ) и потом ее тиражировать. На каждой ВМ ставил sendkey, 1C и конфу. На каждой ВМ настроенную на определенный запрос. Но быстро понял что так никакой скорости не напасешься, 1С работала не очень быстро. Просто запуск длился до 30 секунд, я хотел чтобы все было намного быстрее. Тогда мне пришла в голову такая мысль: а что если база 1С будет одна, а в ней разные пользователи. Каждому будет соответствовать свой запрос. База будет крутиться на SQL сервере на самом главном сервере, а на виртуалках будут тонкие клиенты. И еще браузеры. Т.е. софта всего - ничего. Виртуалки запускаются автоматически при запуске главного сервера, в них через автозагрузку запускается моя конфигурация 1С, и она уже начинает крутить свой запрос. И так все виртуальные машины. Сначала погонял одну ВМ, потом две, сегодня 4 штуки. Стали вылезать кое-какие проблемы. Типа места на диске перестало хватать, но я все лишнее потер, 20 гигов дискового пространства хватает. Для нормальной работы воткнул в сервер usb шный ключ защиты от 1с (купил его на юноне :-))) как дохлую флешку за недорого), поставил драйвера, зато теперь у меня лицензионная 1С! На эту тему еще вспомнилось. Как-то раз в Шушарах отдавали целую гору компьютерного барахла, поехал с прицепом. Барахла было столько что в прицеп не влезло, частично загрузил машину, но все вывез: системные блоки, МФУ, бесперебойники, клавы, мыши, какие-то на первый взгляд непонятные штуки. Потом в гараже, при разборе, я нашел в одном компе тоже ключ защиты. Как оказалось это страшно дорогая хрень - ключ для программы автоматизации автозаправочной станции (управление топливными колонками, расчеты, учет прихода/расхода топлива и т.д.). Такая прога стоит реально сотни тысяч. Я смог продать ключ за 12000.
Паралельно я занимаюсь реализацией полученного даром. Особенно мне нравится продавать газовые плиты. Они круты тем что:
не очень тяжелые, я один на телеге спокойно спускаю газовую плиту с 5 этажа без лифта
занимают не очень много места (на крайняк, складирую их в 2 этажа если у нижней железная крышка)
легко чинятся. В основном все проблемы это: прочистить форсунки, прочистить расворителем или бензином краны и кнопки электроподжига
иногда что-то отваливается типа крышки, все чистится и клеится силиконовым герметиком
не нужна вода (и положительная температура!) для демонстрации работы
потенциальному покупателю могу показать плиту в работе (все конфорки и духовку). Вам даже в магазине никто и никогда плиту не включит и не покажет
если мне везет, то вместе с плитой отдают ее паспорт - это увеличивает стоимость плиты примерно в 2 раза!
на прицепе могу перевезти за раз 6 плит + 2 в машине, если сложить заднее сиденье
если плита совсем в паршивом состоянии, то разбираю ее на запчасти: конфорки, форсунки, ручки, кнопки, провода, свечи электроподжига и т.д. Оставшееся железо идет на сдачу.
плиты нужны почти всем. Если ее нормально отмыть, легко продается за несколько дней.
В таком виде идет на продажу
А вот в таком бывает получаю. Но это все отмывается.
Выхлоп (окупаемость идеи)
За несколько лет такого бизнеса (продажа техники и прочего полученного бесплатно) и выручка от клиентов которым я делаю рассылки по их запросам, есть выгодные приобретения. Вначале я купил гараж в пригороде СПб всего за 65000 руб.
Гараж за 65000 руб после замены ворот
Сами ворота до пересадки в мой гараж
Сам гараж деревянный, но обшит железными листами. Ворота были в убитом состоянии, провисли, низы гнилые, но каким-то чудом я бесплатно получил гаражные железные ворота. Очень тяжелые, еле смог увезти на прицепе. В них была калитка, замки, изнутри пеноплекс и вагонка. Также в комплекте были боковые части коробки с петлями. За 15000 руб я нанял каких-то мастеров и мне эти ворота приделали к гаражу. И они даже по размеру подошли!!! Старые ворота отдал мастерам. В гараже провел косметический ремонт, перекрасил ворота, подлатал крышу. Сам забетонировал подъезд. Гараж сразу же сдал в аренду. Не помню точно, но вроде первому арендатору за 5500 в мес, потом ко мне заехал новый и стал платить больше и сразу за год вперед. С первой же оплаты гараж окупился. В общем каждые полгода я теперь покупаю по гаражу с доходов от моего бизнеса, и сразу же сдаю в аренду. Новые гаражи начинают помогать окупать ранее приобретенные.
Казалось бы хорошая идея поставить сервер в гараж, но там на ночь отрубают электричество, а бывает и днем, если в гараже есть счетчик, то цена квт*ч побольше чем в городе, так что идея не очень.
Сейчас мне и гаражи новые программа помогает искать. До этого упустил пару очень вкусных предложений, локти кусал. Теперь я вижу каждый попадающий в мои параметры гараж не позже чем через 2...3 минуты после появления объявления на авито. Как только вижу что это мне подходит, моментально созваниваюсь. А ведь так и машины и недвижимость можно искать.
Запрос по гаражам, новые объявления сразу идут мне в телеграмм.
Для ЛЛ: простейший способ отправить в чат телеги мессадж. На полноту и новизну не претендует, просто запишу для памяти. Потом же потребуется повторить, а будет уже не вспомнить. Я убил на это почти 6 часов. И еще 3 часа чтобы всё вспомнить и создать сию портянку....
В общем и целом, раз уж мне в руки попался открытый код управляющего приложения, то отчего бы в нём как следует не порыться.
Питон, ссука, это конечно, нечто... Без поллитра и гугля тут хрен чего куда. В результате я за пару дней: 1. добавил новый параметр MOUSE TRAVEL COUNT. Таки считаю пробег мышки в сантиметрах. Очень условно. Считаю проехавшие пиксели. Далее с учетом разрешения монитора 96 dpi (так написано в винде) перевожу их в сантиметры и так далее. Так как мониторов 3 и размеры у всех разные... В общем, очень эмпирический параметр. Но я это сделал и даже добавил в редактор тем дополнительную вкладку.
2. ПИНГИ... В конфигах нашлось такое: # Address used for ping sensor. Can be internal/external IP (e.g. 8.8.8.8 or 192.168.0.1) or hostname (google.com) # PING: 8.8.8.8
Я прописал PING: 81.211.0.63. Какой-то там DPI узел... tracert и смотрим как через что мы там лезем на ту же пикабу. 16 узлов. Аллес. Ладно. Показывает 0.3 - 0.02.
Захотелось линейную диаграмму. Включаю в теме, но там только целые числа. То есть MAX VALUE не может быть меньше 1. 2% от 100 - это всегда пустая диаграмма. 30% уже заметнее, но всё равно херня. Надо увеличить "чувствительность". Кстати, поставил 0.5, но надо еще уменьшить.
Ну хер с ним, нас на кривой кобыле не объедешь. Лезу в редактор, открываю файл конфига и прописываю туда 0.5. Сохраняю, запускаю и хер там ночевал. Шкала пустая и не реагирует. Лезу в код глубже, нахожу отрисовку прогресс-бара и вижу, что значение там сугубо целое (int блять) Меняю на float, модифицирую остальной код и наконец-то он умеет отображать дробные значения.
Кстати, свежая мысль - надо еще цвет изменять с зеленого на красный. //TODO
3. У нас имеется раздел DOWNLOADED.
И он мне зачем-то показывал какие-то неисчислимые террабайты. Оказалось, что цифра тупо берется с сетевого адаптера и показывает кол-во скачанного вареза с момента последнего включения компа. Нужный параметр. Познавательный. Нах он нужен? Хер с ним. Нашел где это. Запоминаю значение при старте приложения и потом уже при отрисовке вычитаю из текущего значения.
Гораздо информативнее. До кучи сделал еще и счётчик залитого вовне. Работает. Красота.
Ну и в целом как бы и всё. Вуаля сильвупле. Классно. Работает, рисует, чего же более? Но тут вмешался человеческий фактор! Вот дисплей трудится, греется, потеет, рисует всю эту шнягу а потом я в час ночи кидаюсь тапком в кнопку СПАТЬБЛЯТЬ и ухожу. А что там за статы сегодня были - неизвестно. Все кануло.
Комп засыпает, приложение выгружается, все данные затираются. Как-то пошло. Возникла мысль писать всё это в лог на диске. Можно. А зачем? Кто и когда его потом будет читать?... И тут меня ОСЕНИЛО! А буду-ка я при выключении постить эти охуенно нужные цифирки в свой ТГ канал! Ха! И тут блять случилось минус шесть часов моей жизни. Сел в 21 час, кое-как заработало часам к 5.
Далее, простите, будет очень много мата. Ибо даже по свежей памяти я всё это воспроизвёл еще раз с трудом.
░░░░ Итак: простейший способ, отправить из приложения мессадж в телегу
Как оказалось, всё реально пиздецки просто. Всё что нам надо:
п.1. Зарегать бота и получить его токен п.2. Узнать ёбаный id бота (!!!!) п.3. Узнать chat_id группы, которую ты хочешь неибацца ощастливить, п.4. Выкурить thread_id - идентификатор топика, если в группе есть эти неприпизженные разделы п.5. Написать в приложении простейший код из пары строчек. п.6. Охуеть, добавить бота в группу непременно с правами блять АДМИНИСТРАТОРА, выключив нахер всё что там можно. Оставив лишь возможность постов. п.7. Выпить валерьянки и пойти спать нах.
Собственно это и всё! Это реально работает! Без СМС и регистраций! Тьфу блэт.
Теперь ссука ДЕТАЛИ в которых не то что дьявол блять кроется а просто весь пиздец. Никто никогда нигде не умеет писать внятную блять документацию! Никто нихуя! Всё надо выискивать и выгугливать. При слове "нам надо подключиться к API" меня уже реально трясет, колотит и хочется грызть мебель. Это пиздец.
Итаак... па пунктам, тк скть.........
п.1. Добавляем в телегу @botfather. Через сраный тг-поиск. Прилагаю картинок, так как ВНЕЗАПНО ссука с одним и тем же именем ботов может быть, вы ахуеете щас, НЕСКОЛЬКО.
В общем вот этот
Из всех дальнейших пиздоплясок нам по сути надо только это:
Детальнее - внятно на русском написано ТУТ. Хотя в целом - можно скипнуть. Прописать описания и аватарку прилепить можно интуитивно. Там еще что-то про команды, но ну его нахер. Туда я не полез и не планирую. Заняться мне нечем больше.
Итак, мы получили TG_BOT_TOKEN
п.2. Узнать ёбаный id бота... С какого хуя нам его не дают сразу - я не знаю. Добавляем к себе в повозку @Getmyid_bot
Практически сразу вы получаете этот сраный айдищшник. Везде вводим линк бота, который начинается с @
Таким вот незамысловатым способом из говна и байтов мы получили botId
п.3. Узнать chat_id группы. Ндааа.... Ну, к этому моменту вы уже практические перестали плеваться и материть Дурова и иже с ними. Так что добавляем в телегу ОЧЕРЕДНОГО ботаблять: @username_to_id_bot
Я тут нихуя не блоггер и не популярный телеведущий, поэтому млять я постоянно путаюсь в этих группах, чатах и блять каналах. Я тащу на себе ебень с кучей топиков, и вроде это канал. Или группа. Но не чат. Блять.
Короче мы получили наконец-то ссука chat_id
И всё? А вот хуй и нет!!! Я блять не знаю КАК я до этого ссука допёр, но видимо мою голову всё-таки иногда посещают умные мысли. Пусть это визиты вежливости, но тем не менее. Просто так пихать этот ид в запрос можно до посинения. Такого чата не найдется. ПАТАМУУУУШТА.... Перед всей этой цифирью надо добавить -100 !!!! Вот ссука "ну надо"... Я не ебу почему и зачем, но явно этого нигде не написано. #Тактутпринято
То есть, если у вас получен chat_id: 666666 то обращаться к нему надо как к "-100666666" !!!!
Не, ну все же ясно как "е" в степени "пи". Только полный утупок не прорюхает.
Ща вы, конечно же скажете "УФФ, заебца, афтар пеши исчо" и собираетесь открыть кодильник, дабы ну понятно. А вот еще раз ХУЙ мимо. Всё это прокатывает, если блэт у вас ПУБЛИЧНАЯ группа. Если она приватная, то, внезапно @myBestChannelFuckenLink у неё не будет! И бот ... идёт лесом.
Длииииааа этаво... Запускаем браузерную телегу! Кстати, это самый простой способ, действительно. Можете погуглить "как получить chatId приватной группы". Я охуел где-то секунд за 20.