Vibecoding Haven (BotfatherDEV)
2.6K subscribers
610 photos
93 videos
11 files
429 links
Ділюсь про те як стати продуктивнішим використовуючи AI в програмуванні.
Download Telegram
До посту вище.
"telegram bot avatar logo, drawing, minimalism"

(На жаль, він занадто багато уваги приділяє саме слову Telegram)
👍16🕊2🔥1
⚙️ Перехід до aiogram v3.
Частина 1.

🇷🇺
Версия в комментариях

Привіт! Реліз нової версії аіограму вже зовсім близько (джерела повідомляють, що вийде десь восени в березні місяці), та багато хто замислюється над переходом з 2 версії. Тим часом наді мною пролітав іранський бойовий дрон, випущений країною-терористом рф.

Особисто я вже остаточно на неї перейшов, та всіх нових ботів пишу тільки на неї, та вирішив зробити низку невеличких дописів на тему переходу. В цілому, ви можете звернутись і до посібника від Groosha🍐, який вже має досить багато інформації.

В цих дописах я покажу що в неї цікавого.

🛑 1. Роутери 🛑
Якщо раніше в нас був загальний об'єкт Dispatcher, яким ми реєстрували хендлери, та який обробляв об'єкти Update, що надходять до бота, а потім доставляв їх до цих хендлерів, то в нової версії той диспетчер розділили.
Тепер можна робити інші міні-диспетчери, які будуть додаватись до головного диспетчеру. Можете собі уявити таку ієрархічну структуру, де як по дереву від стовбуру (головний диспетчер) розростаються гілки (роутери).

По іншому, ще говорять, що тепер диспетчер — це головний роутер, а до нього можна вкласти інші роутери. А до тих роутерів — можна вкласти інші роутери.

Тобто, тепер можна зробити організацію логики в боті завдяки структурі роутерів, і застосовувати фільтри на цілий роутер. Це супер зручно, коли в вас є деякі хендлери, в яких застосовується однаковий фільтр. Тепер ви можете просто вивести їх в окремий роутер, та навісити фільтр на всі хендлери, зареєстровані до нього.

Наприклад, ситуація з фільтром для адмінів, коли перевірка йде по конкретним айдішникам:

Створюємо фільтр:

from aiogram.filters import BaseFilter

class AdminFilter(BaseFilter):
async def __call__(self, message, *args, **kwargs):
admins = await db_get_admins()
return message.from_user.id in admins

Створюємо наш роутер:
admin_router = Router()

І реєструємо на тип Message наш фільтр
admin_router.message.filter(AdminFilter())

Тепер можемо зареєструвати наш хендлер (так, можна використати декоратор):
@admin_router.message()
async def some_handler(message):
pass

Залишається тільки покласти цей роутер в диспетчер (це вже треба робити в іншому файлі):
dp.include_router(admin_router)


Загалом:
🛑Роутери я створюю в самому файлі з хендлерами, навішую фільтри теж там, а потім я імпортую роутер в файл bot.py, де в мене є доступ до dp = Dispatcher(), куди і буде входити роутер.
🛑Роутерів може бути дуже багато, в цьому немає ніякої проблеми.
🛑Можна реєструвати хендлери декораторами на роутери
🛑Можна використовувати фільтр на всі хендлери в роутеру одразу
🛑Можна вкласти один роутер в інший, тоді і фільтри і мідлварі батьківського роутеру будуть використовуватись до переходу до вкладеного.

#корисне #полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥16👍13🤡12🥰2👏1
⚙️ Перехід до aiogram v3.
Частина 2.

⬅️Читати частину 1 про Роутери.
Російська Версия в комментариях

Продовжую розповідати про фічі третьої версії, та одна з них — це оновлена фабрика для роботи з інлайн-кнопками.

Взагалі, створення інлайн-кнопок в нової версії теж трохи перероблено, тепер в нас додатково є крутий InlineKeyboardBuilder, та про все це детальніше можна почитати знову в посібнику від Groosha🍐.

🛑 2. Фабрика Callback-ов 🛑
🔗Документація

Для чого воно потрібно?
Коли ви створюєте інлайн-кнопки, то вони часто можуть мати дуже схожий набір даних. Наприклад, коли ми працюємо з меню керування чимось, то в вас кнопки будуть розрізнятись тільки аргументом необхідної дії (edit/add/delete), а менюшка буде мати спільну назву, наприклад manage. Тоді ці кнопки треба якось зручно упакувати.

ℹ️ Хто вже знайомий з фабрикою 2-версії, той знає наскільки вона зручна — для створення callback_data замість простого тексту ви послуговуєтесь пітоновськими об'єктами, завдяки чому:
🛑потім в IDE можлива зручна навігація: натискаємо на об'єкт з кнопки — переходимо к місцю, де він використовується.
🛑Не треба робити callback_query.data.split()[-1] і подібне, а ви в хендлер отримуєте вже створений словник з даними, які були передані в кнопки. Дуже зручно їх діставати по ключах, зрозуміло виглядає код!
🛑Вбудований зручний фільтр для хендлерів, через метод .filter(), тоді aiogram точно не переплутає з іншими хендлерами.

👎Але були і певні мінуси:
🛑Не дуже зручно працювати, якщо треба в вас є опціональні аргументи, тобто порожні.
🛑В новачків виникає плутанина зі створенням об'єкту, тому що вони не відрізняють префікс від аргументів
🛑Всі дані в сформованому словнику мають тип строки, тому треба потім їх конвертувати в необхідний тип.

🆕 Що нового?
Отже! Тепер створення фабрики виглядає трохи по іншому, та можливо більш зрозуміло буде, плюс ви можете додавати опціональні поля, та пропускати їх і, нарешті, наші дані приходять правильного типу! А ще, тепер нам доступні підказки (тайпіхнти) для аргументів з класу фабрики.

Пам'ятаєте приблизно як створювати об'єкт @dataclass? Тепер ми створюємо об'єкт колбек-дати як окремий клас (а не екземпляр). Давайте зробимо на прикладі меню зміни товарів.

from aiogram.filters.callback_data import CallbackData
class ManageItems(CallbackData, prefix='manage_items'):
action: str
item_id: item_id
disabled: Optional[bool]


action — дія (додати, змінити, вилучити товар).
item_id — ідентифікатор товару.
disabled — додатковий аргумент, якщо ми хочемо заборонити конкретному користувачу якусь дію з товаром.

Тепер залишилось передати в callback_data методом pack():

InlineKeyboardButton(text='Змінити', callback_data=ManageItems(action='edit', item_id=item_id).pack())


Після чого, в нас доступний до використання фільтр для хендлеру:

from aiogram import F
@menu_router.callback_query(ManageItems.filter(F.action='edit'))

Як бачите, можемо тут використовувати нову фічу aiogram3 — MagicFilter (про нього пізніше).

Та в хендлер ми можемо прийняти вже сформований (вже не словник) об'єкт ManageItems:

async def edit_some_item(call: CallbackQuery, callback_data: ManageItems):
item_id = callback_data.item_id
if callback_data.disabled:
# Відхилити дію
return
# Щось робимо

#корисне #полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12💩6
🤖Нова версія сайту Botfather.DEV!

Російська версія в коментарях

Нарешті!) Дочекались! Сайт був повністю переписаний з нуля, відповідно первинному дизайну. Тепер старих багів зі входом на сайт вже не буде (але можуть бути і нові баги 🤫).

Що оновлено:

🤨 Зроблена сторінка з ефірами! Скоро будемо вже проводити перший ефір!
🤨 Перероблений вигляд карток уроків, та слайдер з уроками на сторінці перегляду.
🤨 Уроки розділені тепер на категорії, та блоки — тепер не тільки Базові та Додаткові, а ще додались "Бонусні" та про "Заробіток в ботах" окремо; та блоки (Введение, Основы Python, Telegram Bot API, ...) тепер візуально відокремлюються, тому навігація по уроках тепер більш зручна
🤨 Перероблена сторінка профілю
🤨 Зроблена сторінка реферальної програми. Тепер за поповнення від ваших рефералів ви можете накопичити гроші на покупку уроків чи тарифу.
🤨 Зроблені нотифікації (там де колокольчик).
🤨 Покупка тарифу здійснюється тепер по іншому — спочатку поповнюєте гроші на баланс, а потім вже купляєте необхідний тариф.

🤑 І щоб це відсвяткувати я надаю знижку всім бажаючим на всі тарифи розміром аж 50 % до 1 листопада.

P.S. Темна тема теж в профілю налаштовується
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16💩4👎3❤‍🔥2🔥1
Vibecoding Haven (BotfatherDEV)
botfatherdev
Зафлудили реакціями та не залишили місце під банани :(

P.S. а там відос російською мовою 😬
Please open Telegram to view this post
VIEW IN TELEGRAM
🍌43💩11🌭5🤡3🍾3
📣Конкурс для Дизайнерів в Figma!

текст на русском в 1 комментарии

Хочу провести конкурс на розробку дизайну таблички лідерів для Botfather.DEV. Натомість даю доступ до курсу 😎.

💎Нагороди: Автор найкращої роботи отримає доступ до 5-го тарифу (вартістю 200$).
Автори ще 3-х робіт отримають доступ до 4 тарифу (вартістю 100$)


📁Завдання: Розробити дизайн у Figma таблички, де буде розміщуватись до 50 користувачів з їх результатами (приблизний приклад на фото).

Додатково:
- Перші 3 юзери мають бути відокремлені (наприклад, як на фото, кольором та медальками, або по-іншому).

- Вигляд таблиці має не сильно відрізнятись від дизайну сайта.

- ‼️Дизайн має бути зроблений таким чином, щоб можливо було нормально потім сверстати)

- Дані, які планую виводити (колонки):
1. №
2. Ім'я (може ще частину імейла)
3. Бали
4. Бали за портфоліо
5. Прогрес по курсу
6. Дата оновлення


✍️Якщо хочете взяти участь — пишіть мені.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💩3🍌3👎2👌1
❄️Вітаю всіх з першим днем зими!

🎄Якщо ви любите програмування, та любите поламати мозок над задачками, то запрошую вас на AdventOfCode, вирішувати задачки, умови яких мають новорічну тематику. Кожний день (до 25 грудня) там з'являється нова задачка (точніше 2), працює типу як різдвяний календар.

За вирішення задачок ви отримаєте ⭐️зірочки. Чим більше зірочок, тим ви крутіший (-ша).

Особисто я обожнюю це все, та спробую виділити трохи часу та візьму участь цього року. А хто хоче зі мною (та іншими підписниками) потягатись, то введіть код нашого лідерборду: 422865-6af4c2ea
Ввести тут: https://adventofcode.com/2022/leaderboard/private


Перша задачка дуже проста! Треба підрахувати на яку суму калорій кожний Ельф несе їжі, та визначити в кого ця сума найбільша!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤡6🖕4❤‍🔥2💩2
🌲 Новий Рік, Знижки, Апдейти...
(російська версія в коментарях)

Привіт! Новий Рік вже майже тут, тому настав час новорічних знижок і апдейтів по курсу та сайту!

По перше, хочу вибачитись перед студентами, що досі не запустив ще прямих етерів, та підписниками каналу, що тут так мало корисних постів.

Нагадую, що перший етер планую на тему aiogram v3, та розбор одного з моїх проєктів на 3 версії. На жаль, країна-терорист продовжує руйнувати нашу інфраструктуру, світла дуже часто немає, тому я не встигаю впоратися зі своїми основними задачами, а до прямого етеру я планую нормально так підготуватись.

Дуже сподіваюсь, що наші захисники, та NASAMS, Patriot, та інше ППО продовжать нас і далі захищати, та ми будемо зі світлом, і я зможу продовжити працювати над оновленням курса, та веденням цього каналу.

🆕 Оновлення на сайті:
Нарешті додав автоматичний прийом оплати в криптовалюті, поки що доступні валюти 💵BTC, 💵ETH, 💵LTC, та 💵USDT-TRC20. Якщо хочете додати ще якісь криптовалюти, то пишіть в коментарі.

🧑‍💻 Також, створив гайд по покупці крипти через @Cryptobot.

🤑 Знижки:
Запускаю знижки -50% на всі тарифи, до кінця 1-го січня, тому якщо ви їх чекали — зараз самий час отримати доступ до повної версії курсу, не втратьте цю можливість.
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍5🖕5🤮4🥴2