🇺🇦Розробка Телеграм ботів на Python
3.01K subscribers
215 photos
35 videos
6 files
246 links
https://botfather.dev?utm_source=tg_channel
Боти дозволяють автоматизувати майже всі процеси та зробити все це просто в Telegram.
Програмуючи на Python ви зможете реалізувати свої самі шалені ідеї.

Найважливіша інформація тут!
Download Telegram
🇺🇦Розробка Телеграм ботів на Python
🏞 Грузим фотки на хостинг Статья обновлена.
🏞 Грузим фотки на хостинг - v2.0 🏞

А вот и обновленная статья по загрузке фотографий на хостинг Telegra.ph и получения прямой ссылки, с помощью отправки их в бота.

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

P.S. Использоваться в статье будет уже новый шаблон (форк Tishka17).

#полезное
#статья
🗄Как спроектировать базу данных, чтобы в будущем не пришлось её переписывать

Тема, которая волнует очень многих. Если вас она не волнует — значит вы делаете что-то не так. Проектирование базы данных архиважно для ботов чуть чуть сложнее эхобота. Если у вас есть общее понимание SQL синтаксиса, то следующий этап — изучение этой темы.

Сохраняю как для вас, так и для себя)

#полезное
📈Статистика в ботах и ответы на вопросы.

Всем привет! Готовь объявить, что в это воскресенье наконец-то состоится долгожданный прямой эфир.

На нем я сначала отвечу на ваши вопросы, а потом покажу как настраивать статистику в ваших ботах используя основную базу (PostgreSQL) и InfluxDB.
Я частично буду использовать код из гайда Groosha, подогнав его под себя, чтобы получилось что-то такое.

P.S. Запись прямого эфира доступна на сайте

#полезное
#курс
Запуск функций по расписанию/таймеру

Всем привет, одна из насущных тем для многих разработчиков бота - запуск функций по таймеру или в определенное время. Для этого случая я подготовил для вас статью, чтобы вы могли запустить APScheduler в своем асинхронном боте!

Это обновленная статья с использованием нового шаблона с исправлением некоторых проблем прошлой статьи!

#полезное
#статья
🔔Рассылка уведомлений в Grafana

Для тех, кто все же решился посмотреть стрим или просто смог разобраться с графаной: я обнаружил, что там можно настраивать уведомления (например, о превышении статистики по какому-то параметру).

И вариантов как сделать это уведомление достаточно много!
Можно взять даже с вашего же телеграм бота делать уведомление)

очень круто 👍

#полезное
Работа с Меню Команд

Опубликовал еще одно видео на Youtube, чуть позже открою его на сайте в дополнительных уроках.
Давно хотел разобрать тему установки меню команд в ботах, особенно после того как обновили документацию.

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

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

#полезное
#курс
👨🏻‍💻 Рефакторинг, патерни/шаблони проектування, принципи SOLID, та ін.

Хочу порадити посоветовать один дуже цікавий интересньій сайт, який добре розкриває вищезазначені вьішеуказанньіе теми.

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

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

P.S. Статті наявні имеются на 8 різних мовах!
#полезное
ℹ️Підбірка інформаційних каналів та чатів, пов'язаних з IT

Шукаєте
якісь канал, щоб подивиться корисну інфу на якусь цікаву вам тему? Можливо є якісь питання з приводу якогось популярного фреймворку, але не можете знайти відповідне ком'юніті? Спробуйте пошукати тут:

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

P.S. Я не помер, постів буде більше)

#полезное #корисне
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨 MidJorney — AI, який малює з вашого тексту | Робимо аватарку для вашого бота

Хочу поділитись з вами одним дуууже крутим сервісом для малювання будь чого із допомогою штучного інтелекту!

Раніше вже був представлений варіант DALL-E, та один від російського Сбербанку.

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

Як це працює?
Бот працює у Discord, можна створювати картинки в приватних повідомленнях.
Ви описуєте те, що хочете, щоб було намальовано. Пишете або щось логічне (кіт в шляпі сидить за компьютером), або розділяєте додаткові параметри аргументами (кіт в шляпі сидить за компьютером, стиль Пікассо, тонкі лінії)

🅰На жаль, тут треба писати або англійською, або в перекладачі, тому що нейронка не дуже розуміє російську.

😐Не завжди нейронка все гарно може намалювати, але тут треба просто створювати багато варіантів.

💬Як це можна застосувати?
Як приведено в статті вище, і не тільки:
- Фото-иллюстрации для статей, копирайтинга, рекламы
- Иллюстрации, свободные от лицензии фотостоков
- Визуализации дизайна интерьеров
- Соединений различных признаков и абстракций
- Логотипи компаній, продуктів, тощо
- Аватарки для акаунтів, ботів, тощо
- Шпалери для екрану телефона/комп'ютера

💵 Скільки воно коштує?
- Безкоштовна підписка, якої вистачає на малу кількість картинок
- $10 / місяць — вистачає на приблизно 200 картинок в місяць
- $30 / місяць — вистачає на стільки картинок, скільки захочете, але не можна створювати більше 3 генерацій одночасово.

🤖 Для своїх ботів я вже створив там аватарки, тому що зазвичай я просто йду в інтернет та шукаю якусь картинку. Тут я можу просто описати коротко що робить бот, та воно це намалює. А я просто обираю найкращий з них) І да, це набагато дешевше, ніж я б замовляв в дизайнера)

🖌Щоб створювати більш реалістичні варіанти скористайтесь командою /settings, та оберіть ці параметри. Ця версія дуже гарно малює фотореалістичні картинки. Для логотипів краще брати MJ-3

А дописом нижче я надішлю варіанти того, що він мені видав на запит "telegram bot avatar logo, drawing, minimalism".

#корисне #полезное
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Перехід до 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
⚙️ Перехід до 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