Как стать автором
Обновить

Telegram Боты на Aiogram 3.x: Доступ после подписки на каналы, получение Telegram ID и админка с рассылкой сообщений

Уровень сложностиСредний
Время на прочтение39 мин
Количество просмотров6.2K
Всего голосов 7: ↑5 и ↓2+7
Комментарии15

Комментарии 15

Рассылка в боте через фор? А ты харош мужик, харош

А ты как бы делал, через while?)

Вот тебе план так чисто накидал, это конечно не в фор все сувать, но вроде тоже ничего

1. Админ создал рассылку с датой начала

2. Рассылка отправляется в базу с этой датой и статусом created напрямую (без консьюмера БД)

3. Сразу в этом же хэндлере шедулеру шлем сигнал запланировать рассылку id такой-то, время такое-то

4. Шедулер принимает сообщение, планирует старт, шлет сигнал консьюмеру БД на изменение статуса на scheduled

5. Из этого же хэндлера шлем загрузчику сигнал "грузи"

6. Загрузчик берет всех активных юзеров из базы и id-шником рассылки и помещает их в стрим, шлет консьюмеру БД сигнал изменить статус рассылки на "uploaded"

7. Шедулер в нужное время шлет сигнал рассыльщику "пора"

8. Рассыльщик получает сигнал (пуш-модель), шлет сигнал консьюмеру БД на изменение статуса на active, получает из стрима (пулл-модель) id юзера и id рассылки, рассылает.

9. Рассыльщик смотрит метаданные, чтобы понять на каком этапе рассылка (тут мне пока непонятно, я почитаю)

10. Рассылка заканчивается, рассыльщик шлет сигнал консьюмеру БД на изменение статуса completed

Да. В этом плане согласен. Но так вышло, что целевая аудитория моего контента - новички. В своих статьях тему отложенных и фоновых задач я не поднимал, а сам текст вышел на 39 минут и так. Слишком много кода. Для тех кто в теме разбирается - можно брать на вооружение. Благодарю

Не лучше ли тогда вообще не показывать рассылки, чем показывать так? Почему бы не начать добавлять в статьи вместо них новые инструменты: очереди, шедулер, и постепенно прийти к статье про нормальную систему рассылок?

Я показал максимально простой вариант. Считаю, что для учебных проектов и для небольших подойдет и FOR) В остальном да. Очереди, шуделер и прочее - пока не раскрыл. Тут вроде как цикл был и тема эта выпала. На выходе это 12 или 13-я, если не ошибаюсь)

В статье про фоновые задачи в ТГ-ботах возьму твой пример как раз и реализую)

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за обратную связь) Все зависит от предпологаемой нагрузки на бота. Если она будет небльшой или средней, то, вполне, подойдет Amvera Cloud (описывал деплой в этой статье). Для более нагруженных ботов достаточно выбрать любой VPS-сервер. Настраивается чуть сложнее, но, на выходе, будет выдерживать большие нагрузки.

Хотел начать с первой статьи, но не смог(

Вы видели, автор опять налил воды на аж 39 минут скроллинга? Миллион скринов и примеров кода, на который стыдно смотреть. Хотите, чтобы он ещё и это вам попытался раскрыть и облажался, как всегда?

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

Если не нравится — не читайте, а если можете лучше, покажите, как. Написали одну кривую статью, от прочтения которой уже с первых абзацев кровь из глаз течет, и теперь бегаете тут и "облачаете" авторов. В статье нет воды, нет нейронок, и я раскрыл тему так, как посчитал нужным. Не больше и не меньше. Синтаксические, стилистические и орфографические ошибки исправьте лучше в своей заветной статье.

Для тех, кто не в курсе: Кирилл (Dominux) — 25-летний парень, фанат Гарри Поттера, который еще с моих первых статей приходил под каждую мою статью и рассказывал, какая она отвратительная. То про нейронки говорил, что это они мне "воду" делают, то хвалился, что его единственная 12-минутная статья больше всех моих статей в несколько раз, потом говорил, что я пару недель в программировании, затем просил подробнее писать про ботов. В общем, шизофрения.

Молодой человек, пожалуйста, займитесь своими делами. Если уж не кодингом, то еще пару фоток в женском платье сделайте.

Всем мира)

"Буквально в последние пару лет модели машинного и, в частности, глубокого обучения, приобрели огромную популярность. Процессы, которые ранее являлись сугубо прерогативой человека и были подвластны только ему, относительно резко получили свою программную имплементацию, и теперь множество таких процессов может быть автоматизировано, ускорено и даже в каком-то роде улучшено (всё же возможности человека в, например, генерации текстов, изображений, видео, аудио и прочего контента также ограничены его способностями и абстрактностью мышления каждого)." - один из абзацев замечательной статьи этого автора. Это кто мне тут про "воду" решил расказать) Да если воду с вашей 12-ти минутной статьи выкинуть, то она сократится да 5 минут))

  • все команды админки стоит ловить через специальный @admin_router,для того, чтобы проверка на то, админ ли юзер, была в одном месте - в фильтре роутера

  • выводить список юзеров в сообщении? А если юзеров 20000? В админку выводить количество, и возможность выгрузить csv

  • Если юзеров много, то при рассылке надо ОБЯЗАТЕЛЬНО делать тротлинг. Для этого стоит обрабатывать ошибку TelegramRetryAfter . Можно навесить через middleware сразу на весь проект

  • Деплоить лучше на vps - большему научитесь. Один сервер на 200р/месяц может послужить базой для десятка мини проектов.

Вы видели, что текущая статья в прочтении занимает 39 минут. Вам кажется, что тут необходимо было дополнительно описать настройке VPS сервера (за спиной у меня больше 100 ботов размещенных на VPS, интересно чему я должен научиться)? По поводу списка юзеров в сообщении тут согласен. Под admin_router. А у меня как? Вы в код смотрели?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий