Легкий путь в Python
5.11K subscribers
97 photos
18 videos
3 files
155 links
Я — Алексей Яковенко, опытный разработчик Python. Здесь вы найдете статьи, заметки, посты и видео для прокачки навыков программирования 🐍 Интересное найдет и новичок, и профи 💡

📬По вопросам: https://t.me/yakvenalexx
🗣Сообщество: https://vk.cc/cxKNTb
Download Telegram
Друзья, я с анонсом нового проекта Telegram-бота в связке с MiniApp. На этот раз бот будет уметь: генерировать QR-коды, сканировать их, используя камеру смартфона и считывать данные с QR-кода после отправки фото.

Базовый функционал уже готов. Осталось это дело прикрутить к боту.

Будете ждать статью о создании такого проекта на Хабре?
👍35🔥11❤‍🔥42🤩2
Друзья, решил поделиться с вами универсальным методом получения UserID пользователя в приложениях Telegram-ботов с MiniApp. Этот подход позволит получить UserID из командного меню, текстовых и инлайн кнопок.

1. Выполняем импорт JS TelegramWEBApp

<script src="https://telegram.org/js/telegram-web-app.js"></script>


2. Пишем функцию

async function getUserID() {
const tg = window.Telegram.WebApp;
if (tg.initDataUnsafe?.user?.id) {
console.log("User data from Telegram:", JSON.stringify(tg.initDataUnsafe.user));
return tg.initDataUnsafe.user.id;
}

const urlParams = new URLSearchParams(window.location.search);
const userID = urlParams.get('user_id');
if (userID) {
console.log("User ID from URL:", userID);
return userID;
}

throw new Error("User ID not available");
}


- Сначала она пытается получить ID из объекта Telegram Web App, что работает для командного меню и инлайн-кнопок.
- Если первый метод не сработал, функция ищет параметр 'user_id' в URL, что позволяет передавать ID через текстовые кнопки (не забудьте только подставить параметр запроса, чтоб получилась ссылка такого вида: https://your_site.ru?user_id=12345).
- Если оба метода не дали результата, функция выбрасывает ошибку.
10🔥9👍6❤‍🔥4
Media is too big
VIEW IN TELEGRAM
Проект QRCodeMaster наконец-то готов! В ходе разработки пришлось пересмотреть несколько подходов, но теперь я полностью доволен результатом.

Бот представляет собой MiniApp + Telegram-бота с функциями:

📷 Сканирование QR-кодов в реальном времени через камеру.
📤 Распознавание QR-кодов на загруженных изображениях.
Создание новых QR-кодов с возможностью кастомизации.

Как и в предыдущем проекте, всё работает в одном приложении на FastAPI, которое использует вебхуки для высокой скорости обработки запросов. В боте я использовал две JavaScript библиотеки:

jsQR — для сканирования QR-кодов через камеру и загрузку изображений.
EasyQRCodeJS — для генерации QR-кодов.

Проект уже доступен на GitHub, а бота можно протестировать здесь: @qr_code_masterBOT.

К среде постараюсь выложить на Хабре подробную статью о разработке с детальным описанием всех этапов.
👍20🔥94👏2
Друзья, спасибо за поддержку и доверие💪 Дальше - больше🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
24🔥8❤‍🔥6👍5🍾3🏆2👏1💯1
Планирую подготовить для вас новую заготовку для разработки FastApi или телеграмм ботов, как прошлую. Какую "балванку" вы бы хотели получить?
Final Results
57%
FastApi + SQLAlchemy + авторизация
10%
Aiogram + SQLAlchemy + webhook (как старая, но на вебхуках)
33%
Aiogram + SQLAlchemy + webhook + MiniApp
👍12
Новая статья готова. Сегодня ее вечером вычитаю и завтра к утру, если без форс-мажоров, выполню публикацию. Будете ждать?
👍38🔥195❤‍🔥4👏2
​​Друзья, доброе утро! ☀️

Я рад представить вам новую статью на Хабре, где я подробно разобрал проект Telegram-бота с вебхуками и MiniApp, обслуживаемого на FastAPI. В этот раз я постарался максимально упростить подачу материала, сосредоточив внимание на самой теме статьи. 📚

Проект представляет собой бота, который умеет генерировать QR-коды, сканировать их с камеры устройства в реальном времени, а также работать с QR-кодами, загруженными с фото. 🎥📱 Информация, сгенерированная ботом (QR-код или данные с отсканированного кода), возвращается пользователю прямо в бота.

Особое внимание в статье я уделил передаче данных между ботом и MiniApp. После прочтения у вас точно не останется вопросов о том, как получить информацию о пользователе на странице MiniApp и отправить её обратно в бот, независимо от способа входа. 🔄

Из новинок вы также узнаете, как отправлять медиа с помощью Aiogram 3, используя Base64 строки, и работать с BuferInputFile. 🛠

Проект получился действительно интересным, так что не пропустите! 😉

Ссылку на статью, проект на GitHub и на работающего бота закрепил под этим постом. 🤖

С нетерпением жду ваши отзывы и комментарии! ✉️
🔥28❤‍🔥6👍63🎉2💯2👏1👻1
У меня уже давно лежит исходник игры 2048. HTML + CSS + пару JavaScript библиотек. Подумал о том, что можно было бы прикрутить эту легендарную игру к телеграмм боту.

Концепт такой. В боте можно будет смотреть свой рекорд + список рекордов других игроков (топ-10). Прикрутим к этому делу базу данных.

А в самой игре как на скрине будет.

То есть. Полноценный телеграмм бот-игра. Хотели бы чтоб я сделал такой проект, а потом рассказал как такое пишется?
👍54🔥85
Процесс идет. Если получится то сегодня полный исходник презентую, а к понедельнику будет готова статья.
🔥125👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Наконец-то проект завершён! 🎉

Представляю вам 2048Bot — MiniApp и Telegram-бот для классической игры 2048 прямо в вашем мессенджере! Бот не только позволяет сыграть в увлекательную головоломку, но и сохраняет ваш лучший результат, чтобы вы могли соревноваться с другими игроками. Среди основных функций:

- Сохранение рекордов
- Просмотр списка лучших достижений
- Удобное локальное хранилище прогресса

На днях я также опубликую статью на Хабре, где поделюсь процессом разработки и основными решениями, применёнными в этом проекте. Ждите её во вторник, а может и раньше 😉

Исходный код проекта: GitHub
Поклацать бота: @fast_api_2048BOT
🔥27👍13❤‍🔥6👏1🤩1
Все по-плану. Завтра в течении дня вычитаю и во вторник публикация
🔥24👍103
This media is not supported in your browser
VIEW IN TELEGRAM
📢 Доброе утро, друзья!

На Хабре уже доступна моя новая статья: "Игра 2048 в вашем Telegram-боте: как создать MiniApp с помощью FastAPI и Aiogram". В ней я постарался максимально подробно разобрать, как внедрить легендарную головоломку 2048 в Telegram-бот.

Что я использовал для разработки:

- FastAPI — для реализации API методов и обработки вебхуков,
- Aiogram — для создания Telegram-бота и управления его сообщениями,
- SQLAlchemy + Alembic — для работы с базой данных и миграций,
- SQLite — для хранения рекордов игроков.

Функции бота:

🎮 Играйте в 2048: получите доступ к классической игре прямо в Telegram.
🏆 Рекорды: сохраняйте личные достижения и сравнивайте с другими игроками.
📋 Локальное хранилище: текущие данные сохраняются локально, чтобы можно было быстро продолжить игру.
🔄 Просмотр и очистка рекордов: можете увидеть свои лучшие результаты или обновить их, если решите начать с чистого листа.

Бот уже полностью рабочий — можно попробовать свои силы и побить рекорды! Все ссылки здесь:

👾 Попробовать 2048Bot

📝 Статья на Хабре

💻 Исходный код на GitHub

Надеюсь на вашу поддержку — буду рад комментариям и лайкам!
🔥28👍11❤‍🔥42👏1
👨‍💻 Недавно наткнулся на интересный начинающий канал — @eqwayet_exe.

Здесь можно найти:

• Общение с единомышленниками 🤝
• Мемы и обсуждения на тему IT 👩‍💻
• Новости и интересные фичи из мира программирования
• Уютное комьюнити 🌞

Если интересуетесь программированием, стоит заглянуть и поддержать!
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3🔥3
Привет! Рад сообщить, что проект над шаблоном для FastAPI завершен и теперь доступен для всех! 🔗

Это готовая основа для разработки веб-приложений с поддержкой аутентификации, авторизации и удобным логированием. Проект включает асинхронное взаимодействие с базой данных через SQLAlchemy, систему миграций с Alembic, а также bcrypt и python-jose для безопасной работы с паролями и токенами. Этот шаблон помогает быстро и эффективно настроить все ключевые элементы архитектуры, оставляя вам больше времени для реализации основной бизнес-логики.

Что внутри:

- Аутентификация и авторизация на основе JWT
- Асинхронная работа с базой данных (SQLAlchemy + aiosqlite)
- Система миграций для управления схемой БД
- Структурированный код с модульной архитектурой, что упрощает поддержку и масштабирование
- Гибкое логирование через loguru

Кроме того, внутри подробный README с инструкциями по установке, настройке и запуску проекта. Весь код доступен по ссылке ниже, так что приглашаю к тестированию!

👉 Ссылка на проект

Буду признателен за поддержку в виде звезд на GitHub ⭐️ — это помогает улучшать и развивать проект и в виде обратной связи в комментариях ниже👇
🔥3423❤‍🔥6👍5🎉2
С опытом ты понимаешь что это не шутка) Написание кода и первые тесты - это только начало. Потом на сцену выходит блок "причесывания", который может забрать большую часть времени разработки)
😁17💯9🤣2🐳1😭1
from contextlib import asynccontextmanager
from typing import Callable, Optional
from fastapi import Depends
from loguru import logger
from sqlalchemy.ext.asyncio import async_sessionmaker, AsyncSession
from typing_extensions import AsyncGenerator
from sqlalchemy import text
from functools import wraps

from app.dao.database import async_session_maker


class DatabaseSessionManager:
"""
Менеджер для работы с сессиями базы данных. Позволяет управлять сессиями,
транзакциями и предоставляет зависимости FastAPI для удобного внедрения сессий.
"""

def __init__(self, session_maker: async_sessionmaker[AsyncSession]):
self.async_session_maker = session_maker

@asynccontextmanager
async def get_session(self) -> AsyncGenerator[AsyncSession, None]:
"""
Создает новую сессию базы данных.

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

Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
try:
async with self.async_session_maker() as session:
yield session
except Exception as e:
logger.error(f"Не удалось создать сессию базы данных: {str(e)}")
raise
finally:
await session.close()

@asynccontextmanager
async def managed_transaction(self, session: AsyncSession) -> AsyncGenerator[None, None]:
"""
Управляет транзакцией, осуществляя коммит или откат при ошибке.

Этот метод принимает существующую сессию и выполняет коммит по завершении транзакции.
Если возникает исключение, происходит откат транзакции и логирование ошибки.

Параметр:
- `session`: Текущая асинхронная сессия базы данных `AsyncSession`.

Выходной тип: Асинхронный генератор.
"""
try:
yield
await session.commit()
except Exception as e:
await session.rollback()
logger.exception(f"Транзакция не удалась: {str(e)}")
raise

async def get_db(self) -> AsyncGenerator[AsyncSession, None]:
"""
Зависимость для FastAPI, предоставляющая сессию без управления транзакцией.

Асинхронный генератор для использования с FastAPI в качестве зависимости,
который предоставляет сессию для выполнения запросов к базе данных.

Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
async with self.get_session() as session:
yield session

async def get_db_with_transaction(self) -> AsyncGenerator[AsyncSession, None]:
"""
Зависимость для FastAPI, предоставляющая сессию с управлением транзакцией.

Асинхронный генератор для использования с FastAPI в качестве зависимости,
который предоставляет сессию, автоматически выполняя коммит по завершении транзакции
или откат в случае ошибки.

Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
async with self.get_session() as session:
async with self.managed_transaction(session):
yield session

def connection(self, isolation_level: Optional[str] = None, commit: bool = True):
"""
Декоратор для управления сессией и дополнительными настройками транзакции.

Позволяет добавлять сессию в метод с возможностью указания уровня изоляции транзакции.
Если `commit=True`, выполняется коммит в конце метода, иначе коммит не выполняется.

Параметры:
- `isolation_level` (опционально): Уровень изоляции для транзакции (например, "SERIALIZABLE").
- `commit` (по умолчанию True): Определяет, будет ли выполняться коммит после метода.

Возвращает:
- Декорированный асинхронный метод с дополнительными параметрами управления транзакцией.
"""
5🔥4👍2