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

  Рет қаралды 27,481

NZTCODER

NZTCODER

Күн бұрын

Пікірлер: 70
@RunBull
@RunBull Жыл бұрын
а Apscheduler можно использовать в больших высоконагруженных ботах где у каждого пользователя будет по 20-30 таких задач которые выполнятся будут в течении 1-30 дней. и не пропадут ли они при перезагрузке бота ?
@nztcoder
@nztcoder Жыл бұрын
Смотря что имеешь ввиду под "большим проектом". Скажем так, если несколько сотен пользователей в минуту одновременно в боте, то уже лучше очередь использовать.
@RunBull
@RunBull Жыл бұрын
@@nztcoder типо rabbitmq ? там можно делать отложенные задачи
@RunBull
@RunBull Жыл бұрын
я просто никогда больших проектов не писал, но тут планируется довольно много пользователей, и мне нужночто то надежное. чтобы если что случится все задачи которые устанавливали пользователи не пропали @@nztcoder
@nztcoder
@nztcoder Жыл бұрын
rabbitmq, apache kafka, aws sqs, redis, nats, celery... да много чем можно. Я бы выбрал кролика и пика
@RunBull
@RunBull Жыл бұрын
я пробовал с redis, но вообще не оправдало ожиданий, задачи постоянно либо пропадали либо их наоборот становилось больше, если одна задача выдаст ошибку то все другие не смогу выполнится, там очень много проблем, ну либо я криворукий @@nztcoder
@rible1847
@rible1847 2 жыл бұрын
Спасибо большое за урок! Решил свою задачу благодаря видео, а главное - *всё понял* .
@nztcoder
@nztcoder 2 жыл бұрын
Благодарю. Рад, что помог.
@yeunborn
@yeunborn 2 ай бұрын
привет! а как реализовать отправку сообщения каждые x минут, при выборе этого самого х пользователем из предложенных вариантов
@РоманМеркулов-н2э
@РоманМеркулов-н2э 8 ай бұрын
Здравствуйте, почему у меня не получается импортировать apsched из core.handlers? - Выдает ошибку
@storm9479
@storm9479 Жыл бұрын
Здравствуйте, у меня при вызове /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) И в чем проблема что он несколько принимает аргументов ?
@SoTer771
@SoTer771 8 ай бұрын
напиши, какую версию Apscheduler испоьзовал. Работает только interval
@c0mrad_eth940
@c0mrad_eth940 Жыл бұрын
Отличные примеры, все мои задачи были решены этим видео роликом, желаю процветания этому каналу. Автор красавчик))❤
@OlgaPetropavlovskaia
@OlgaPetropavlovskaia 11 ай бұрын
А где ссылка на код с урока?
@JailFish
@JailFish 4 ай бұрын
спасибо очень помоголо это видио!
@vython_vv
@vython_vv 10 ай бұрын
А как использовать такую отправку сообщений вместе с sqlalchemy datastore? Не могу реализовать, потому что объект Bot - unpickleable и соответсвенно аргументы не могут записаться в бд
@mideks
@mideks 8 ай бұрын
Привет! Получилось решить эту проблему?
@vython_vv
@vython_vv 8 ай бұрын
@@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 8 ай бұрын
@@mideks Да, удалось решить, использовал contexvars Не самое изячное решение, но как придумал. Пока что работает)
@iii8176
@iii8176 Жыл бұрын
Разве это мидлварь наложидся не на все апдейты? Или где эта связь с файлом нашего апшедулера
@niyazg6572
@niyazg6572 8 ай бұрын
Спасибо тебе мил человек!
@812Corn
@812Corn Жыл бұрын
чётко и по делу без воды. вот прям поклон в ноги, лайк и подписка за такие видео
@Chel1k7
@Chel1k7 Жыл бұрын
Вопрос для ленивых, а не проще ли после заполнения FSM формы просто использовать async.sleep(time) чтобы была задержка, а не через мидлвар?))
@xjpfxei
@xjpfxei 9 ай бұрын
Этот шедулер можно стартовать сразу после его создания, а таски добавлять уже потом?
@nztcoder
@nztcoder 9 ай бұрын
Можно
@igorproweb7301
@igorproweb7301 Жыл бұрын
1:11 - ты прописываешь токен бота? я прописываю свой и выдает ошибка, что chat_id является обязательным аргументом и тп, что я только не перепробовал уже, менял и тп, не работает.
@Pyro231
@Pyro231 Жыл бұрын
Это id чата в который бот будет отправлять сообщение. Можно тебе самому в личку или в группу в которую бот добавлен. Как узнать id чата или группы можешь загуглить.
@HEKPACOFF
@HEKPACOFF Жыл бұрын
Так рабочий вариант, вот только столкнулся с одним не понятным поведением. При добавлении таски с триггером на дату, в приложении запущенном в контейнере они отказываются отправляется, при этом если вот запустить как автор показал (локально) то все работает. Не нашёл решение.
@xjpfxei
@xjpfxei 9 ай бұрын
А почему ты всё суёшь в мидлвари, а не в диспетчер например?
@nztcoder
@nztcoder 9 ай бұрын
Когда писал видео не было фичи через диспетчер пробрасывать.
@maxshine-qf7qg
@maxshine-qf7qg Жыл бұрын
Доброй ночи и большое спасибо за великолепный урок. Подскажите, пожалуйста, в этой библиотеке есть какой-нибудь метод, который выполнит после включения бота все таски, который не выполнились из-за того, что он был выключен в момент их выполнения?
@nztcoder
@nztcoder Жыл бұрын
Если таски были сохранены в редис то при запуске планировщика можно их выполнить.
@AlffromUkraine
@AlffromUkraine Жыл бұрын
а есть ли бот для ограничения написания количества сообщений в группе?
@jussimpudence3244
@jussimpudence3244 Жыл бұрын
спасибо за урок!) подвис на моменте с 'from core.handlers import apsched', не удалось найти библиотеку из которой это импортируется, библиотек 'core' много всяких.. что за библиотека?) пс. интернет мне в этом не помог, по этому и пишу
@emerald2281
@emerald2281 Жыл бұрын
автор импортирует apsched из папки handlers которая находиться в папке core в папке проекта
@Макс-ы2т
@Макс-ы2т Жыл бұрын
Можно ли как-то параллельно отправлять считанные в определенный день сообщения, на примере: Админ отправляет фотографию, и настраивает рассылку таким образом, чтобы она выполнялась 31 день каждые 12 часов, рассылка пошла, но через 5 дней он решил, что ещё нужно рассылать видео 31 день каждые 6 часов; Вот можно ли это как-то реализовать?
@nztcoder
@nztcoder Жыл бұрын
Можно конечно
@denys_solom
@denys_solom Жыл бұрын
Скажите пожалуйста, а зачем нужен мидлварь, если можно прокидывать apscheduler сразу в диспетчер: dp = Dispatcher(apscheduler=apcheduler)?
@nztcoder
@nztcoder Жыл бұрын
Можно и так. Когда видео записывалось, то не было ещё такой фичи. И в миддлварь можно добавлять данные до и после фильтров.
@lolyadop
@lolyadop Жыл бұрын
А что делать, если у Dispatcher теперь метода update нет?
@nztcoder
@nztcoder Жыл бұрын
Использовать регистрацию хэндлера на требуемые типы апдейтов - вместо update указываем message как пример.
@zaplav-if5un
@zaplav-if5un 2 жыл бұрын
а как сделать чтоб каждую неделю определенного дня
@assetorymbayev267
@assetorymbayev267 Жыл бұрын
Как отправлять каждый день разное сооьщение через scheduler? Не по дате, а со времени, когда пользователь нажал /start
@c0mrad_eth940
@c0mrad_eth940 Жыл бұрын
kzbin.info/www/bejne/hYOwdndsbpeAl5o
@ИльяЖебрун-д1т
@ИльяЖебрун-д1т Жыл бұрын
Привет! Тоже ищу решение данной проблемы, не подскажешь, каким образом реализовал?
@meljnichenko
@meljnichenko 9 ай бұрын
честно, мы как будто с Вами разные библиотеки используем. В документации и тут одно, а в проекте ничего не работает
@krissh95
@krissh95 Жыл бұрын
Подскажите, пожалуйста, а возможно ли сделать так, чтобы оповещения от бота приходили пользователю в выбранное им время? Допустим, вначале ьы спрашиваешь время (с помощью кнопок), человек выбирает, и определенное сообщение приходит в то время, которое выбрал человек? И в любое время он может поменять настройки оповещения, выбрать другое время и теперь вместо прошлого, будет выдаваться сообщение в другое время. Если это возможно, то как это можно сделать?
@nztcoder
@nztcoder Жыл бұрын
Возможно. С помощью Пайтон, Джанго и библиотеки айограмм.
@krissh95
@krissh95 Жыл бұрын
@@nztcoder спасибо за ответ)
@Chel1k7
@Chel1k7 Жыл бұрын
@@nztcoder а причем django тут ?
@maxshine-qf7qg
@maxshine-qf7qg Жыл бұрын
@@Chel1k7 можешь вместо него юзать любую другую ORM. Например SQLAlchemy)
@AceOffSpad3s
@AceOffSpad3s Жыл бұрын
Подскажите, пожалуйста, я полный 0 в программировании, но мне нужно сделать так, что бы бот от моего лица отправлял конкретное сообщение, конкретному пользователю, через конкретный промежуток времени. Можно так сделать?
@nztcoder
@nztcoder Жыл бұрын
Сообщение от бота можно отправить в том случае, если пользователь первым написал этому боту.
@AceOffSpad3s
@AceOffSpad3s Жыл бұрын
@@nztcoder а можно сделать так, что бы от себя отправлять каждые три часа конкретному пользователю? Просто сейчас я ставлю таймеры на отправку сообщения каждый три часа, а заводить их надоедает постоянно, вот я и ищу решение
@nztcoder
@nztcoder Жыл бұрын
Можно конечно. В пирограм есть метод отправки сообщения. В нем есть параметр отложенной публикации.
@Thestarter100
@Thestarter100 Жыл бұрын
Спасибо вам за видео. Подскажите, пожалуйста, как создавать через python именно отложенные сообщения, та самая функция отправить позже, schedule message? Т.е. не держать бота включенным 24/7, а запустить python скрипт, который создать отложенные сообщения в чате и скрипт завершится.
@nztcoder
@nztcoder Жыл бұрын
В боте есть отложенные сообщения? :)
@montecristo31
@montecristo31 Жыл бұрын
Только есть использовать userbot
@nibirus1096
@nibirus1096 Жыл бұрын
Спасибо большое!
@zaplav-if5un
@zaplav-if5un 2 жыл бұрын
kwargs={'bot': bot} интересует откуда мы испортировали bot
@Andy-cu5qg
@Andy-cu5qg Жыл бұрын
из aiogram
@ustoz_shogird5699
@ustoz_shogird5699 2 жыл бұрын
Udachi bro!
@nztcoder
@nztcoder 2 жыл бұрын
Спасибо. И тебе!
@ilyosbekkarshiboyev7134
@ilyosbekkarshiboyev7134 Жыл бұрын
1
@OctaveWeb
@OctaveWeb Жыл бұрын
а что такое from core.utils from core.handlers - у меня не получается просто выполнить код, оно пытается искать модуль core которого у меня нет
@nztcoder
@nztcoder Жыл бұрын
Это импорт функций написанных раннее. Посмотри весь плейлист по аиограм и сразу станет понятно что это.
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН
小丑女COCO的审判。#天使 #小丑 #超人不会飞
00:53
超人不会飞
Рет қаралды 16 МЛН
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН