Помощь начинающему разработчику
Приветствую всех пикабушников. Не так давно я решил изучать программирования, первое что я решил сделать после изучение языка Python попробовать создать реальный проект (идею проекта бессовестно украл), задачу поставил себе сделать полноценного телеграмм бота с подключением базы данных и прочего. Тестировал как мог, но вот в чем вопрос как протестировать нагрузкой реальных людей телеграмм бота? Есть какие-то форумы, сервисы или сайты? Ну и сразу наперед попрошу вас дать нагрузку на моего бота, просто запустить потыкать меню, кнопки. Чтобы не сочли за рекламу не буду описывать что за бот, скажу только то что он для криптоторговли отслеживает изменения цены, обещаю никакого спама и прочего не последует.
Telegram BotAPI 7.9 - нововведения для разработчиков
Сегодня исполнилось 11 лет с запуска Telegram, платформы, которая не только изменила мир мессенджеров для пользователей, но и предоставила обширные возможности для разработчиков.
В честь одиннадцатилетия Telegram представил крупное обновление BotAPI 7.9, направленное на поддержку авторов контента.
В этом посте разберём те части обновления, которые касаются разработчиков. Полностью прочитать о представленных нововведениях можно по ссылке.
Звёздные реакции
Появилась возможность отправлять "Звёздные реакции" к постам в каналах - это способ отблагодарить автора контента используя Telegram Stars. Также, в меню звёздной реакции отображается "Список лидеров", подписчиков отправивших больше всего звёзд к конкретному посту.
Включить звёздные реакции на сообщения в канале можно в меню Настройки канала > Реакции > Включить платные реакции.
В API бота добавлена поддержка платных реакций и новый класс ReactionTypePaid, определяющий "звёздную реакцию".
Подписка на канал за Telegram Stars
С сегодняшнего дня, можно создавать пригласительные ссылки на канал с указанием ежемесячной платы в звёздах. Это позволяет авторам контента создать закрытый канал и предоставлять к нему доступ по подписке.
Чтобы сгенерировать ссылку для платной подписки на канал, перейдите в Настройки канала > Тип канала > Управление приглашениями > Создать ссылку и включите опцию Ежемесячная плата.
Также, такие ссылки может создавать и бот. Для этого были добавлены следующие API-методы и поля:
Метод createChatSubscriptionInviteLink - Позволяющий ботам создавать пригласительные ссылки с подпиской.
Метод editChatSubscriptionInviteLink - Позволяет ботам редактировать название уже имеющейся пригласительной ссылки.
Поле until_date в класс ChatMemberMember - Необязательное поле для объекта класса, указывающее на то, имеется ли у подписчика канала платная подписка.
Публикация платного медиаконтента ботами
Изначально, платный контент за "Звёзды", можно было публиковать только в каналах, однако, теперь их могут отправлять и боты. Это позволит многим авторам контента продавать эксклюзивные фото и видео, а также предлагает новый способ монетизации сервиса.
Также, помимо классических ботов, отправлять платные медиа может и бот, подключенный к бизнес аккаунту.
В API бота добавили:
Возможность отправки платного медиа в любой чат
В метод sendPaidMedia добавлено поле business_connection_id для отправки платного контента в чат, используя бизнес аккаунт.
В класс TransactionPartnerUser добавлено поле paid_media для платежей связанных с платным контентом.
Суперканалы
Сообщения в канале публикуются от имени канала, максимум, что можно было сделать раньше - это добавить подпись с именем автора сообщения. Теперь можно включить отправку сообщений непосредственно от своего имени или имени другого своего канала.
Чтобы превратить канал в суперканал, перейдите в Настройки канала > Администраторы и включите «Подписывать сообщения» и «Показывать профили авторов».
В API бота добавили поддержку Суперканалов, позволяющую получать сообщения из канала отправленные от лица пользователя или другого канала.
Telegram-канал "Код на салфетке" - https://t.me/press_any_button
Сайт "Код на салфетке" - https://pressanybutton.ru/
Ускоряем Youtube на Android | или как починить apk ютуб
Инструкция по использованию приложения ReVanced
• YouTube v19.16.39 (non-root)
• revanced-patches v4.11.0
Включение опций во вкладке:
Settings -> ReVanced
1. Скачать (https://github.com/ReVanced/GmsCore/releases) последний релиз GmsCore
2. Скачать новую версию ReVanced apk вы можете в нашем телеграмм канале (https://t.me/OZ_ITPQ/77).
3. Вы можете использовать в приложении оптимальные настройки, импортируйте их в меню.
Settings -> ReVanced -> Misc -> Import/Export
Оптимальные настройки приложения:
"announcement_last_id": 13,
"copy_video_url_timestamp": false,
"disable_zoom_haptics": false,
"hdr_auto_brightness": false,
"hide_autoplay_button": false,
"hide_download_button": true,
"swipe_brightness": false,
"swipe_volume": false,
"switch_create_with_notifications_button": false,
"video_quality_default_wifi": 1080,
"sb_local_time_saved_milliseconds": 15753,
"sb_local_time_saved_number_segments": 1
Также в нашем канале есть инструкция по исправлению Win версии и искусственный интеллект на уровне всеми известного ChatGPT - Переходи и получай полезную информацию: https://t.me/OZ_ITPQ
Как выйти из кризиса?
Не для слабонервных! В тексте присуствют орфографические ошибки и нытье!
Привествую всех, пишу первый раз на подобных сайтах не считая форумы где сидел 15 лет назад. По-этому особо не знаю о чем пишут тут вообще.
Пишу чтобы понять как быть, 10 лет работаю на одной работе который никакого достатка не принес тупо на жизнь хватает, за это время много чего пробовал чтобы улучшить ситуацию и связанное с этой работой и просто всякую дичь (ставки, казино, лоторею, трейдинг, крипто) ну и как понимаете впустую. Моментами хорошо но все очень быстро ломается и там и там.
Я не программист но человек все умеющий и недавно сделал 2 телеграм бота, типо актуальная тема, закупил рекламу на разных местах, но опять не повезло как и в других делах.
Чем заниматься чтобы было хорошо, чтобы зарабатывать достаточно и жить в кайф? Или как повернуть звезды в свою сторону?))
Как я реализовал авторизацию в приложение Mini Apps Telegram или почему многие Mini App имеют дыры в безопасности?
Всем привет! Как насчет того чтоб перенять мой опыт?
Сегодня я хочу затронуть две темы, о одной из них мало информации в открытых источниках. Первое - это как я реализовал защиту в Telegram на REST API. Второе - это какие дыры есть в Mini App Telegram.
Вводные данные
Я разрабатываю Mini App в Telegram, это такая штука открывающаяся внутри бота и есть внутрение приложение Telegram.
Стояла задача разработать приложение с админкой, тратить время на развертывание сервера, налаживание и его защиту не было времени. Нужна оперативная работа.
Изучив возможные варианты, выбрал Strapi - это OpenSource проект написанный на Node.js. Развернуть можно как в облаке так и локально. Имеет поддержку русского языка.
Если в общем, то мой стек используемых инструментов выглядит следующим образом:
Telegram App ( Библиотека )
Strapi ( Админ панель + REST API )
PostgreSQL ( База данных )
Next.js ( Само приложение )
Решение с защитой что я предлагаю подойдет каждому. Главное понять его принцип.
Как я защищал REST API? Валидация данных
Когда пользователь открывает веб-приложение через Telegram, ваше приложение получает начальные данные от самого Telegram, такие как идентификатор пользователя и его имя. Чтобы убедиться, что эти данные подлинные и не были изменены, используется специальный процесс проверки.
Преобразование данных: Приложение преобразует начальные данные в удобный формат.
Создание строки для проверки: Из всех параметров (кроме специального hash) создается отсортированная строка.
Создание секретного ключа: С помощью токена вашего бота создается секретный ключ.
Создание цифровой подписи: Используя секретный ключ и строку параметров, создается цифровая подпись.
Сравнение подписей: Приложение сравнивает созданную подпись с полученной от Telegram. Если они совпадают, данные подлинные.
Этот процесс помогает убедиться, что данные, полученные от Telegram, не были изменены, обеспечивая безопасность вашего приложения и его пользователей.
После успешной валидации я генерировал JWT токен для пользователя и он становился полноценным пользователем в моей системе.
Далее можно с ним делать что угодно 😏 - ну допустим заблокировать его, дать права админа и т.д.
А сам пользователь имеет полный доступ к возможностям приложения. Но вне телеграма он ничего не сделает.
Какие дыры есть в приложениях и почему?
Не буду показывать на конкретном примере, но большинство разработчиков не умеют или не хотят защищать свои приложения, а чисто привязывают все к Telegram ID ( ID вашего аккаунта ) и так и живут.
Telegram ID состоит из цифр и перебрать его методом подбора не составит труда и получить доступ к аккаунту в Mini App.
Зачастую этим грешат новые приложения или не опытные разработчики, например в Telegram Apps Store ваше приложение проверяют на наличие этой защиты.
Кроме того нужно учесть что само приложение не должно никоем образом отображаться в поисковиках, если все взаимодействие выстроено на основе телегерама. Приложения же имеют свой адрес и могут индексироваться, не забывайте выключать!
Кроме всего этого можно запретить вне телеграма заходить в ваше приложение тем же способом что описан выше.
Как же защитить приложение и пользователей?
Не важно на каком языке вы пишите, телеграм уже сделал для вас подсказку, осталось ей воспользоваться.
Оставлю ссылку здесь на данный раздел - Документация Telegram
Итого
Я надеюсь эта статья поможет тем кто хочет или уже занимается разработкой WebApp на Telegram. Если все еще осталось что-то не понятно, то пишите смело - будем вместе разбираться:)
Если у вас так же останутся вопросы или предложения или вы просто захотите поделиться своим приложением, то пишите! Всегда рад пообщаться с читателями 😁
Подборка полезных сайтов, для поиска работы в Европе. Не только IT!
🚀 Удаленная работа в ЕС: https://euremotejobs.com/.
Специализируется на удаленной работе в странах Европейского союза.
🚀 Jobteaser: https://www.jobteaser.com/.
Платформа, идеально подходящая для выпускников, ищущих работу в Европе.
🚀 Eurojobs: https://eurojobs.com/.
Предлагает широкий спектр объявлений о вакансиях в различных отраслях в Европе.
🚀 No Fluff Jobs: https://nofluffjobs.com/.
Сосредоточен на вакансиях в сфере информационных технологий в Европе.
🚀 JobsinNetwork: https://lnkd.in/ek_3wRfY.
Предоставляет доступ к сети сайтов вакансий по всей Европе.
🚀 EURES: https://eures.europa.eu/.
Европейский портал мобильности трудоустройства: Инициатива государственной службы, предоставляющая доступ к вакансиям к вакансиям по всему Европейскому союзу.
🚀 Europelanguagejobs: https://lnkd.in/ePTMqgGy
Предлагает объявления о работе для людей со знанием языка.
🚀 StepStone: https://www.stepstone.de.
Один из самых распространенных сайтов по трудоустройству в Европе и в Германии.
🚀 Jobs IE: https://www.jobs.ie
Популярный портал вакансий в Ирландии для различных отраслей.
🚀 The Local Jobs: https://jobs.thelocal.com/.
Предоставляет местные объявления о вакансиях в различных странах Европы.
А вообще крутые вакансии с релокацией или на улалёнке собираю в телеграм ПОРА РЕЛОЦИРОВАТЬСЯ
Проверяем является ли дерево бинарным деревом поиска
Продолжаем цикл статей про деревья. Основной целью этого цикла является практика и подготовка к собеседованиям а не промышленные решения (о них я расскажу в следующих частях). В этой части мы еще раз воспользуемся рекурсией для решения одной популярной задачи.
Задача - проверить является ли дерево ли бинарным деревом поиска?
Для начала определимся что такое бинарное дерево поиска:
У дерева не более двух наследников (оно бинарное)
В левом подграфе значения всех узлов меньше, чем значение самого узла
В право подграфе значения всех узлов больше, чем значение самого узла
Такое дерево называется Бинарным Деревом Поиска (Binary Search Tree). Но не стоит путать его с балансированым бинарным деревом. Про сбалансированные бинарные деревья мы поговорим в следующих частях.
Посмотрим на примеры бинарных деревьев поиска:
В примерах ниже если вы возьмете любой узел и проверите значения его левого подграфа то все эти значения будут меньше чем сам узел. Аналогично справа все значения будут больше:
Теперь обратим внимание на деревья нарушающие требуемую логику:
В дереве слева есть следующие недостатки:
Значение 13 хоть и больше 10 но должно быть меньше 12
Значение 21 хоть больше 12 но должно быть меньше 19
В дереве справа
14 больше 11 но должно быть меньше 12
Давайте попробуем написать простейшее решение данной задачи:
Из требований складывается впечатление что мы должны:
Обойти все узлы и применить к ним единообразную логику (те написать функцию которая вызывает саму себя)
Проверить что левый наследник меньше текущего значения узла
Проверить что правый наследник больше текущего значения узла
Напишем решение для данного невалидного дерева:
И так код:
Чтобы код был более читаем я изобразил это графически:
node - это текущий узел где мы "находимся"
node.value это текущее значение узла, на картинке ниже значение текущего узла 18
node.left это ссылка на левого наследника.
К сожалению такое решение не является верным.
Данная рекурсия берет в учет лишь 3 переменных - значение текущего, левого и правого узлов. Поэтому ниже будет считаться правильным хотя узел 13 слева хоть и больше своего предка (10) но никак не учитывает что он должен быть меньше 12.
Решение задачи не так очевидно на первый взгляд.
Первая попытка никак не учитывает значения дальних предков (те узлов выше родительского). Поэтому наша рекурсия должна будет передавать какую то информацию "сверху". Но какую информацию?
Рассмотрим следующий граф:
Проанализируем какие есть ограничения на значения узлов:
Узел 12 может быть любым числом на него не ограничений, разве что если мы полагаем что каждый узел является целочисленным (integer) типом то он ограничен между Integer.MIN и Integer.MAX
Узел 10 (слева) должен быть меньше 12 но также он может быть больше чем Intger.MIN
Узел 11 - имеет все ограничения примение к 10 И он имеет новое ограничение - он должен быть больше 10.
Узел 7 имеет ограничения которые есть у узла 10 плюс и также он должен быть меньше 10.
Узел 6 имеет ограничения которые есть у узла 7 плюс он должен быть меньше 7
Визуализируя описанно мы получаем вот такую штуку:
Какие выводы мы можем сделать:
Рекурсия должна учитывать как минимум 2 значения приходящие "сверху" те левую и правую границы
Передаваемая влево минимальное значение является минимальным пришедшим сверху
Передаваемое влево максимальное значение является максимальным пришедшим сверху
Передаваемое влево максимальное - текущее
Передаваемое вправо минимальное - текущее
Давайте перепишем наш код согласно этой логике:
Рассмотрим все пункты которые я отметил:
A - мы проверяем условие что значение каждого узла лежит в рамках передаваемых min/max значений
B - минимальное значение передаваемое левому наследнику копируется "сверх"
C - минимальное значиение передаваемое правому - текущее значение
D - максимальное значение передаваемое левому - текущее
F - максимлаьное передаваемое правому копируется "сверху"
Выводы
Задача успешно решается рекурсией
Задача явно не так очевидна и первое решение скорее всего займет больше 30 минут и поэтому не подходит для собеседований (хотя это моё личное мнение)
Это не единственный подход к решению этой задачи но сейчас мы практикуем именно простые рекурсии. Подобную задачу вы скорее всего встретите при собеседованиях в FAANG или подобные большие компании. Такое решение скорее всего будет зачтено интервьювером.
Всем кому интересно узнать про промышленную разработку приглашаю в мой котоджавовский телеграм канал.















