Тёмный

Ботостроение Telegram. Apscheduler - отправляем сообщения по расписанию. Aiogram полное руководство. 

NZTCODER
Подписаться 4,8 тыс.
Просмотров 25 тыс.
50% 1

📘 Очень часто возникает необходимость запускать функции в определенное либо спустя какое-то время. Для этого можно и даже нужно использовать apscheduler. И в сегодняшнем видео речь пойдет именно об этом.
Aiogram - это мощный, но в тоже время простой инструмент для создания телеграм ботов. В этой серии видеоуроков я познакомлю тебя с его функционалом и в конце изучения для закрепления навыков мы напишем телеграм бота. Обязательно подпишись на канал, поставь лайк этому видео и выскажи свое мнение об этом видео в комментариях. Активируй колокол, чтобы не пропустить ни одного видео, которое со 100% вероятностью поможет тебе в изучении ботостроения!
🐍 Научись зарабатывать на Python - money-python.com/telegram
🎯 Обязательно ознакомься с моими курсами, в которых мы с учениками работаем достаточно тесным, можно сказать, "семейным" составом.
Мы прокачаем твой скилл с "я ничего не понимаю в python" до "я умею писать шустрых, легких и стабильных телеграм ботов".
Никакой воды и видео по 40, а то и больше минут - только сжатая, сконцентрированная выжимка практики. Моя задача - дать вам продвинутые навыки простыми словами, которые сделают вас на голову выше всех остальных и уменьшить ваши времязатраты на разработку своих проектов или клиентских.
▶ Смотреть весь плейлист Aiogram - tinyurl.com/45bz73r8
▶ Смотреть весь плейлист Pyrogram - tinyurl.com/4bvy7d8p
📢 Внимание!
Эти пакеты были перемещены, вы должны исправить импорт в вашем коде, если вы используете версию 3.0.0b4 и выше:
aiogram.dispatcher.filters ➡ aiogram.filters
aiogram.dispatcher.fsm ➡ aiogram.fsm
aiogram.dispatcher.handler ➡ aiogram.handler
aiogram.dispatcher.webhook ➡ aiogram.webhook
aiogram.dispatcher.flags/* ➡ aiogram.dispatcher.flags (модуль вместо пакета)

Опубликовано:

 

23 окт 2022

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 68   
@RunBull
@RunBull 9 месяцев назад
а Apscheduler можно использовать в больших высоконагруженных ботах где у каждого пользователя будет по 20-30 таких задач которые выполнятся будут в течении 1-30 дней. и не пропадут ли они при перезагрузке бота ?
@nztcoder
@nztcoder 9 месяцев назад
Смотря что имеешь ввиду под "большим проектом". Скажем так, если несколько сотен пользователей в минуту одновременно в боте, то уже лучше очередь использовать.
@RunBull
@RunBull 9 месяцев назад
@@nztcoder типо rabbitmq ? там можно делать отложенные задачи
@RunBull
@RunBull 9 месяцев назад
я просто никогда больших проектов не писал, но тут планируется довольно много пользователей, и мне нужночто то надежное. чтобы если что случится все задачи которые устанавливали пользователи не пропали @@nztcoder
@nztcoder
@nztcoder 9 месяцев назад
rabbitmq, apache kafka, aws sqs, redis, nats, celery... да много чем можно. Я бы выбрал кролика и пика
@RunBull
@RunBull 9 месяцев назад
я пробовал с redis, но вообще не оправдало ожиданий, задачи постоянно либо пропадали либо их наоборот становилось больше, если одна задача выдаст ошибку то все другие не смогу выполнится, там очень много проблем, ну либо я криворукий @@nztcoder
@rible1847
@rible1847 Год назад
Спасибо большое за урок! Решил свою задачу благодаря видео, а главное - *всё понял* .
@nztcoder
@nztcoder Год назад
Благодарю. Рад, что помог.
@c0mrad_eth940
@c0mrad_eth940 Год назад
Отличные примеры, все мои задачи были решены этим видео роликом, желаю процветания этому каналу. Автор красавчик))❤
@niyazg6572
@niyazg6572 3 месяца назад
Спасибо тебе мил человек!
@nibirus1096
@nibirus1096 Год назад
Спасибо большое!
@812Corn
@812Corn Год назад
чётко и по делу без воды. вот прям поклон в ноги, лайк и подписка за такие видео
@ustoz_shogird5699
@ustoz_shogird5699 Год назад
Udachi bro!
@nztcoder
@nztcoder Год назад
Спасибо. И тебе!
@user-wn1hu5ko8q
@user-wn1hu5ko8q Год назад
а есть ли бот для ограничения написания количества сообщений в группе?
@storm9479
@storm9479 8 месяцев назад
Здравствуйте, у меня при вызове /form уже в боте, в скрипте ошибка вылазит: TypeError: SchedulerMiddleware.__call__() got multiple values for argument 'handler' А вот код: class SchedulerMiddleware(BaseMiddleware): def __init__(self, scheduler: AsyncIOScheduler): self.scheduler = scheduler async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any] ) -> Any: data['apscheduler'] = self.scheduler return await handler(event, data) И в чем проблема что он несколько принимает аргументов ?
@HEKPACOFF
@HEKPACOFF Год назад
Так рабочий вариант, вот только столкнулся с одним не понятным поведением. При добавлении таски с триггером на дату, в приложении запущенном в контейнере они отказываются отправляется, при этом если вот запустить как автор показал (локально) то все работает. Не нашёл решение.
@SoTer771
@SoTer771 3 месяца назад
напиши, какую версию Apscheduler испоьзовал. Работает только interval
@iii8176
@iii8176 11 месяцев назад
Разве это мидлварь наложидся не на все апдейты? Или где эта связь с файлом нашего апшедулера
@jussimpudence3244
@jussimpudence3244 Год назад
спасибо за урок!) подвис на моменте с 'from core.handlers import apsched', не удалось найти библиотеку из которой это импортируется, библиотек 'core' много всяких.. что за библиотека?) пс. интернет мне в этом не помог, по этому и пишу
@emerald2281
@emerald2281 Год назад
автор импортирует apsched из папки handlers которая находиться в папке core в папке проекта
@maxshine-qf7qg
@maxshine-qf7qg 8 месяцев назад
Доброй ночи и большое спасибо за великолепный урок. Подскажите, пожалуйста, в этой библиотеке есть какой-нибудь метод, который выполнит после включения бота все таски, который не выполнились из-за того, что он был выключен в момент их выполнения?
@nztcoder
@nztcoder 8 месяцев назад
Если таски были сохранены в редис то при запуске планировщика можно их выполнить.
@zaplav-if5un
@zaplav-if5un Год назад
а как сделать чтоб каждую неделю определенного дня
@user-im4jb4vb7e
@user-im4jb4vb7e 3 месяца назад
Здравствуйте, почему у меня не получается импортировать apsched из core.handlers? - Выдает ошибку
@Chel1k7
@Chel1k7 Год назад
Вопрос для ленивых, а не проще ли после заполнения FSM формы просто использовать async.sleep(time) чтобы была задержка, а не через мидлвар?))
@user-bc4lm6fn1t
@user-bc4lm6fn1t 9 месяцев назад
Вроде как если бот крашнется то редис не сохранит асинк слип, а мидлварь сохранит
@OlgaPetropavlovskaia
@OlgaPetropavlovskaia 6 месяцев назад
А где ссылка на код с урока?
@Thestarter100
@Thestarter100 Год назад
Спасибо вам за видео. Подскажите, пожалуйста, как создавать через python именно отложенные сообщения, та самая функция отправить позже, schedule message? Т.е. не держать бота включенным 24/7, а запустить python скрипт, который создать отложенные сообщения в чате и скрипт завершится.
@nztcoder
@nztcoder Год назад
В боте есть отложенные сообщения? :)
@montecristo31
@montecristo31 9 месяцев назад
Только есть использовать userbot
@igorproweb7301
@igorproweb7301 Год назад
1:11 - ты прописываешь токен бота? я прописываю свой и выдает ошибка, что chat_id является обязательным аргументом и тп, что я только не перепробовал уже, менял и тп, не работает.
@Pyro231
@Pyro231 Год назад
Это id чата в который бот будет отправлять сообщение. Можно тебе самому в личку или в группу в которую бот добавлен. Как узнать id чата или группы можешь загуглить.
@denys_solom
@denys_solom Год назад
Скажите пожалуйста, а зачем нужен мидлварь, если можно прокидывать apscheduler сразу в диспетчер: dp = Dispatcher(apscheduler=apcheduler)?
@nztcoder
@nztcoder Год назад
Можно и так. Когда видео записывалось, то не было ещё такой фичи. И в миддлварь можно добавлять данные до и после фильтров.
@vython_vv
@vython_vv 5 месяцев назад
А как использовать такую отправку сообщений вместе с sqlalchemy datastore? Не могу реализовать, потому что объект Bot - unpickleable и соответсвенно аргументы не могут записаться в бд
@mideks
@mideks 3 месяца назад
Привет! Получилось решить эту проблему?
@vython_vv
@vython_vv 3 месяца назад
@@mideks Да, получилось, я использую contexvars. current_bot: ContextVar[Bot | None] = ContextVar( "current_bot", default=None ) в файлике _context.py При запуске бота это импортируеться и задаеться значение _context.current_bot.set(bot) Дальше в schedules импортируеться переменная и получаеться её значение bot: Bot = current_bot.get() Решение не самое изячное, но что придумал то и есть. Пока что работает)
@vython_vv
@vython_vv 3 месяца назад
@@mideks Да, удалось решить, использовал contexvars Не самое изячное решение, но как придумал. Пока что работает)
@xjpfxei
@xjpfxei 4 месяца назад
Этот шедулер можно стартовать сразу после его создания, а таски добавлять уже потом?
@nztcoder
@nztcoder 4 месяца назад
Можно
@krissh95
@krissh95 Год назад
Подскажите, пожалуйста, а возможно ли сделать так, чтобы оповещения от бота приходили пользователю в выбранное им время? Допустим, вначале ьы спрашиваешь время (с помощью кнопок), человек выбирает, и определенное сообщение приходит в то время, которое выбрал человек? И в любое время он может поменять настройки оповещения, выбрать другое время и теперь вместо прошлого, будет выдаваться сообщение в другое время. Если это возможно, то как это можно сделать?
@nztcoder
@nztcoder Год назад
Возможно. С помощью Пайтон, Джанго и библиотеки айограмм.
@krissh95
@krissh95 Год назад
@@nztcoder спасибо за ответ)
@Chel1k7
@Chel1k7 Год назад
@@nztcoder а причем django тут ?
@maxshine-qf7qg
@maxshine-qf7qg 8 месяцев назад
@@Chel1k7 можешь вместо него юзать любую другую ORM. Например SQLAlchemy)
@assetorymbayev267
@assetorymbayev267 Год назад
Как отправлять каждый день разное сооьщение через scheduler? Не по дате, а со времени, когда пользователь нажал /start
@c0mrad_eth940
@c0mrad_eth940 Год назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ORMED692Ma8.html
@user-ql4ew4hn6h
@user-ql4ew4hn6h Год назад
Привет! Тоже ищу решение данной проблемы, не подскажешь, каким образом реализовал?
@user-oo2dc1dy7p
@user-oo2dc1dy7p 8 месяцев назад
Можно ли как-то параллельно отправлять считанные в определенный день сообщения, на примере: Админ отправляет фотографию, и настраивает рассылку таким образом, чтобы она выполнялась 31 день каждые 12 часов, рассылка пошла, но через 5 дней он решил, что ещё нужно рассылать видео 31 день каждые 6 часов; Вот можно ли это как-то реализовать?
@nztcoder
@nztcoder 8 месяцев назад
Можно конечно
@lolyadop
@lolyadop Год назад
А что делать, если у Dispatcher теперь метода update нет?
@nztcoder
@nztcoder Год назад
Использовать регистрацию хэндлера на требуемые типы апдейтов - вместо update указываем message как пример.
@AceOffSpad3s
@AceOffSpad3s Год назад
Подскажите, пожалуйста, я полный 0 в программировании, но мне нужно сделать так, что бы бот от моего лица отправлял конкретное сообщение, конкретному пользователю, через конкретный промежуток времени. Можно так сделать?
@nztcoder
@nztcoder Год назад
Сообщение от бота можно отправить в том случае, если пользователь первым написал этому боту.
@AceOffSpad3s
@AceOffSpad3s Год назад
@@nztcoder а можно сделать так, что бы от себя отправлять каждые три часа конкретному пользователю? Просто сейчас я ставлю таймеры на отправку сообщения каждый три часа, а заводить их надоедает постоянно, вот я и ищу решение
@nztcoder
@nztcoder Год назад
Можно конечно. В пирограм есть метод отправки сообщения. В нем есть параметр отложенной публикации.
@xjpfxei
@xjpfxei 4 месяца назад
А почему ты всё суёшь в мидлвари, а не в диспетчер например?
@nztcoder
@nztcoder 4 месяца назад
Когда писал видео не было фичи через диспетчер пробрасывать.
@zaplav-if5un
@zaplav-if5un Год назад
kwargs={'bot': bot} интересует откуда мы испортировали bot
@Andy-cu5qg
@Andy-cu5qg Год назад
из aiogram
@meljnichenko
@meljnichenko 3 месяца назад
честно, мы как будто с Вами разные библиотеки используем. В документации и тут одно, а в проекте ничего не работает
@ilyosbekkarshiboyev7134
@ilyosbekkarshiboyev7134 Год назад
1
@OctaveWeb
@OctaveWeb Год назад
а что такое from core.utils from core.handlers - у меня не получается просто выполнить код, оно пытается искать модуль core которого у меня нет
@nztcoder
@nztcoder Год назад
Это импорт функций написанных раннее. Посмотри весь плейлист по аиограм и сразу станет понятно что это.
Далее
МЕГА ФОКУС С КАЛЬКУЛЯТОРОМ
00:33
Что такое API?
6:05
Просмотров 327 тыс.
МЕГА ФОКУС С КАЛЬКУЛЯТОРОМ
00:33