Aiogram hentai 🍓
Open in Telegram
🍪 Канал із справжнім хентаєм по aiogram. 🍓 Засновник: @wakaree
Show more343
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
🤔 Що нового в Bot API v6.8?
— Додано поле
story до класу Message для повідомлень із пересланими історіями. Наразі воно не містить інформації. 🤷
— Додано поле voter_chat до класу PollAnswer, щоб містити виборців чату каналу в Polls. Для зворотної сумісності поле юзера в таких об’єктах міститиме 136817688 (@Channel_Bot)
— Додано поле emoji_status_expiration_date до класу Chat
— Доданий метод unpinAllGeneralForumTopicMessages
— Максимальну довжину параметра startapp у прямих посиланнях на веб-додатки збільшено до 512 символів.
# Джерело: https://core.telegram.org/bots/api#august-18-2023Repost from aiogram live
💣 aiogram v3.0 Release Candidate 2 is here!
Changelog: https://docs.aiogram.dev/en/latest/changelog.html#rc2-2023-08-18
Added full support for Bot API 6.8, also has small fixes and partially improved documentation.
You can install RC version from pypi:
pip install -U --pre aiogramRepost from about aiogram
😐 Якщо ти задаєш питання ось так.. #порада
«Доброго дня! Підкажіть, чому може виникати
NazvaPomylky: opys pomylky?»
або взагалі ось так..
«Доброго дня! Допоможіть будь ласка, хто шарить у ...»
...то будь готовий, що шанси отримати допомогу будуть в рази менше.
🤔 А що не так?
Спочатку розглянемо другий кейс, коли ти взагалі не переходиш до проблеми одразу. Це мета-питання, яких потрібно уникати в подібних чатах!
Перший кейс, ти все таки надіслав текст помилки. Але ніхто не збирається витрачати свій час щоб відгадувати, що саме сталося. Назви й опису недостатньо, щоб зрозуміти твою проблему!
Те саме стосується й випадків, коли ти прислав тільки скріншот коду й просто питаєш "Чому це не працює?"
📋 Ось список порад, як корректно задати питання й отримати фідбек якомога швидше.
» Перед тим як написати у чат, спробуй розібратися з помилкою самостійно. Можливо, варто почитати документацію, або й зовсім підучити Python.
» Не задавай мета-питань.
» Якщо тобі погодилися допомогти у чаті, не потрібно одразу писати людині у ПП. (Більше про це »)
» Показуй повну помилку, від Traceback (most recent call last): до NazvaPomylky: opys pomylky.
» Не лінися ділитися контекстом помилки. Наприклад, якщо вона виникла у якомусь обробнику start_command, показуй увесь метод.
» Ділися кодом й трейсбеком на пасті, а не скидай полотно у чаті.
» Іноді, коли проблема неочевидна, просто показати код може бути недостатньо. Буде потрібен Мінімально відтворюваний приклад.👉 Як тегнути чувака по айді?
Посилання
tg://user?id=<user_id> можна використовувати для згадування користувача за його ID, навіть якщо в нього нема юзернейму
Якщо ми маємо екземпляр користувача, для цього є навіть спеціальні методи
⚠️ Але тут не обійшлося без приколів.
Щоб згадування гарантовано спрацювало, потрібно врахувати наступні умови (джерело):
» Цю штуку можна вліпити тільки у інлайн-посилання (ось тіпа такого) АБО в кнопку інлайн-клавіатури. Просто відправити посилання як текст не вийде.
» Користувач має бути учасником чату, в якому його тегають АБО поспілкуватися з ботом перед цим (відправити приватне повідомлення / натиснути на його кнопку)
» Якщо чувак не є учасником чату, окрім попереднього пункту (після АБО), в нього не має бути увімкнена конфіденційність пересилань повідомлень.
Перевірити це доволі просто: метод getChat і дивимося параметр has_private_forwards — якщо False, все ок, інакше все хріново.
❓ А якщо якась з умов не буде виконана?
У випадку з інлайн-посиланням, бот просто відправить текст без посилання. Якщо ж спробувати приліпити айді-кнопку — прилетить помилка TelegramBadRequest.
#тег, #згадування, #айді_посилання😢 UPD: Проблема з хуками повністю не вирішена, рішення яке я запропонував актуальне тільки для випадку, коли події обробляються на фоні.
🛩 За умовою
handle_in_background=True BaseRequestHandler відповідає на вхідні запити моментально, відправляючи задачу обробки самої події на фонове виконання. В іншому випадку, телеграм не надішле апдейт допоки не отримає відповідь на попередній запит.
😵 Проблема криється у поточній реалізації прийняття альбому — затримка, під час якої ще є можливість зловити ще пачку повідомлень.
🍍 В якості аналога можу запропонувати рішення Патріка із використанням Pyrogram. Як подружити піро з аіограмом, я розбирав тут у другому розділі.
#обробка_подій, #медіагрупи🧐 Користувач надсилає одразу 5 фоток і бот реагує 5 раз. Це шо за приколи в тг?
Насправді так звані "альбоми" існують у телеграмі тільки опосередковано.
Кожен елемент медіа-групи — це окреме повідомлення, але вони групуються клієнтами.
👩💻 За готовим рішенням можна завітати до мого репозиторію на GitHub.
» Нам потрібно буде спизд.. позичити звідти тільки два файли: модель альбому та мідлвар.
» Встановити це чудо дуже просто. Як звичайний мідлвар:
dp.message.middleware(AlbumMiddleware())
» Якщо у тебе вебхуки, затримка має бути від одної секунди.
Просто використовуй допоміжний метод: dp.message.middleware(AlbumMiddleware.webhook_mode())
Або вкажи потрібну тобі затримку самостійно.
🎁 Бонус. Напишемо простий обробник виключно фотографій / відео.
@router.message(F.media_group_id, F.photo | F.video)
async def repeat_media(message: Message, album: Album) -> Any:
return album.copy_to(chat_id=message.chat.id)
Зверни до уваги, що фільтр на media_group_id обов'язковий, якщо ми очікуємо саме медіа-групу. У випадку, якщо користувач надішле одне медіа, це поле буде пустим.#обробка_подій, #медіагрупи
😐 Я скачав aiogram, пишу бота і почали падати помилки...
NameError: name 'Bot' is not defined IndentationError: expected an indented block after function definition on line 1...як вирішити? Я хочу бота!!! 😒
Запевняю. Якщо ти не пропустиш ЖОДНОГО пункту/розділу у цьому пості — освоїти aiogram в кінці буде справді легко.😌 Просто заспокойся і зрозумій! Без знань Python ти просто витрачатимеш час і нерви. » Давай спочатку ти почитаєш застереження. Якщо готовий вчити Python — ми продовжимо. » В інтернеті є безкоштовні матеріали по пітону. Обирай що до вподоби! — W3Schools (🇬🇧) » Проходимо усі теми від "Python Intro" до "Python Delete Files" — Офіційна документація (🇬🇧) » Бажано почати з 1 та дійти до 9.10 — Pythontutor (🇷🇺) » Проходимо усі теми — Pythonworld (🇷🇺) » Теж проходимо усі теми — Real Python / Python Basics (🇬🇧) » Проходимо увесь курс. Сам сайт відвідувати теж буде не зайвим. Там багато матеріалу окрім базового курсу.
Зверни увагу, що всі клікабельні назви ведуть на корисний матеріал. Просто прочитаєш цей пост — толку буде мало. Треба читати й те що я скидаю!🥳 Ура! Тепер я вмію створювати класи, успадковувати їх та декорувати функції. Що далі? Супер, залишилося зовсім трохи! Повертаючись до застереження, aiogram — асинхронна бібліотека. Якщо слово "асинхронний" поки звучить для тебе як щось незрозуміле, час читати матеріали по asyncio. » Нас буде цікавити High-level API, а конкретніше ця тема. » Якщо офіційної документації замало, заглянемо ще сюди. Нас цікавлять розділи 1-7, 9-10 і 14-18. Інші теж можна почитати, але цього має бути достатньо. 🤔 Диви як можу! Я розумію цей код! Коли вже боти? 😭 Браво! От тепер пора! Зараз порекомендую тобі декілька корисних матеріалів. — 🍐 Книга груші (Groosha) — 📖 Офіційна документація — 💬 Задавати питання сюди (або сюди) — 🌟 Проекти із використанням aiogram — 👩💻 Source code фреймворку Пам'ятай. Теорії буде мало — постав собі задачу написати простий пет проект. Сподіваюся, тепер в тебе виникне менше проблем із написанням ботів.
Якщо ви знаєте ще якісь корисні для новачків ресурси, ласкаво прошу у коментарі!#для_новачків, #python, #готуємося_писати_ботів
Repost from aiogram live
💣 aiogram v3.0 Release Candidate 1 is here!
Changelog: https://docs.aiogram.dev/en/dev-3.x/changelog.html#rc1-2023-08-06
If you're still using v2.x, it's time to start migrating to v3.0 because we're getting closer to release!
You can install RC version from pypi:
pip install -U --pre aiogram🔞 Якщо в тебе виникла проблема, ти написав про неї у чаті aiogram і я відповів — не треба одразу писати мені у приватні повідомлення. І це стосується не тільки мене.
😴 Замість того щоб кожен учасник спільноти мав змогу приєднатися до діалогу та допомогти, ти навантажуєш одну людину питаннями, яких іноді може виникнути й 20, допоки проблема не вирішиться повністю.
👌 Тобі то, може, й допоможуть, але коли така ж сама проблема виникне у іншого розробника, він не зможе відшукати готове рішення по історії повідомлень чату, як часто роблять. В нього нема доступу до твоїх приватних чатів.
❗️ Прояви шанобливість! Якщо хтось погодився допомогти — не означає, що йому буде зручно спілкуватися з тобою особисто. Він не наймався твоїм репетитором. Спитай спочатку людину у чаті, чи не проти вона на приватний діалог.
#правила_спілкування, #як_задавати_питання
🏷 Як дістати ID користувача, знаючи тільки юзернейм?
Якщо коротко, у Bot API ніяк.
Це доступно тільки у MTProto API (яке використовує Pyrogram)
❌ Але це не означає, що потрібно переписувати на нього бота. Це жахливіша помилка.
Якщо ти впевнений, що резолвити юзернейми тобі необхідно, будемо розбиратися, як "піро" подружити з нашим улюбленим фреймворком. Насправді, це дуже легко.
» Хріначимо
pip install pyrogram
» Створюємо свій додаток у Telegram API за офіційною інструкцією
» Дивимося цей приклад, щоб ініціалізувати клієнт
» Якщо не зрозуміло, як він опинився у стартапі, йдемо читати про впровадження залежностей
🎉 Супер! Пірограм встановлено. Тепер трохи покопаємося у аіограмі.
Нас буде цікавити саме поле entities у моделі Message, а якщо точніше, тип ентіті "mention"
» Отже, шукаємо сутність згадування у повідомленні звичайною ітерацією, перевіряючи тип
» Із знайденого entity робимо .extract_from(message.text) (Більше про це)
» Користуємося методом getUsers в доці пірограму
📖 Повний приклад
#утиліти, #pyrogram, #entities, #айді_за_згадуванням