Python Telegram Bot
Открыть в Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
Больше5 003
Подписчики
Нет данных24 часа
-67 дней
+1730 день
Архив постов
5 003
Ищем Python разработчика. Релокейт, удалёнка, высокая зарплата!
Вакансии с опытом и без. У нас только проверенные вакансии, вручную отбираем каждую👇
https://t.me/python_job_board
https://t.me/python_job_board
https://t.me/python_job_board
Хватит работать за копейки, подписывайся!
5 003
☑️ Телеграм бот для сбора подписчиков и рассылки
• Бюджет: ожидает предложений
• Срок: по договоренности
• Задача:
Нужен телеграм бот для сбора подписчиков и рассылки им сообщений в том числе и автосерии сообщений. Также каждому подписчику даётся своя реф ссылка. Он её рекламирует и приводит в бот друзей. Как только 5 друзей придёт, ему высылают подарок.
У меня должна быть вся статистика. Сколько всего подписчиков. Сколько за каждый день пришло новых. Сколько тот или иной подписчик привёл друзей. Я могу отправлять на всех подписчиков сообщения с активными ссылками, а так же автосерию сообщений сделать.
Откликнуться
5 003
Финал поста выше
Далее, допустим, что в конце наших ответов мы хотим не делать финиш, а оставить данные в машине состояний. Для этого пишем
await state.reset_state(with_data=False).
Протестируем бота, ответим на вопросы и экстренно завершим его работу. Видим, что мы все еще находимся в состоянии ответов на вопросы, а это значит, что состояние не сбрасывается, потому что оно сохранено в Redis.
Если же Redis закрыт и мы запускаем бота, то на выходе получим следующее сообщение: ConnectionRefusedError: Удаленный компьютер отклонил это сетевое подключение, то есть нет запущенного сервера. Таким образом, вместо MemoryStorage вы можете использовать Redis, тем самым избавляя себя от казусов при падении бота.5 003
Методы перебора элементов. Часть 2
Для организации параллельного цикла для двух или более последовательностей, элементы можно предварительно сгруппировать функцией
zip(). Код 1
ля обхода последовательности в обратном порядке сначала укажите последовательность в прямом направлении и затем вызовите функцию reversed(). Код 2
#python_обучение5 003
Продолжение к посту выше
Для использования
Redis, вам, конечно же, придется его установить и запустить. Но если сервере это будет выполняться в несколько команд и выглядеть очень просто, то на Windows вам нужно будет его скачать и запустить файл redis server. Тогда, если бот упадет, а redis нет, то состояние сохранится.
Поэтому, сейчас мы переходим в ветку FSM, открываем папку с redis на вашем ПК и запускаем файл redis-server.exe. Все, redis работает и в файле loader.py, в storage вместо MemoryStorage, мы можем указать RedisStorage.
Теперь, давайте попробуем из хендлера команды test выгрузить наши ответы на тест, который мы делали несколько постов назад. Для этого прописываем следующее: data = await state.get_data() await message.answer(str(data)).5 003
‼️ SkillBox, GeekBrains, LoftSchool и другие крупные школы подали в суд на канал IT INFORM
Теперь Админу придётся бороться за свое нахождение в телеграме, но не смотря на это, он не перестанет сливать лучшие курсы с этих топовых школ.
Успей сохранить все посты на канале: https://t.me/+NTZ2ElNVP1tkODFi
5 003
Делайте вопросы однозначными
Вопросы от бота не должны вызывать разночтений и сбивать с толку. Стоит сразу давать шаблон ответа: «Из какого аэропорта вы обычно летаете? Например: «из Шереметьево».
5 003
Теперь мы немного поговорим про
redis как storage.
В хранении стейтов в памяти нет ничего плохо. Это достаточно удобно, но до тех пор, пока ваш бот не упадет по какой либо причине.
Представим такую ситуацию: если человек делает покупку и в процессе оплаты бот упал. Покупка оплачена, но стейт уже потерян и бот предлагает ему создать покупку заново. Мы думаем, что такое никому не понравится, поэтому рекомендуем дублировать создание товаров в базе данных.
Данная рекомендация позволит отследить и решить такие казусы. Но для того, чтобы стейт не сбросился, помимо этого, нужно хранить состояние в мини базе данных, такой как Redis.5 003
How to WebDev - самый лучший путь в мир FullStack’a.
Почему?
Потому, что все лучшие статьи и шпаргалки для WebDev’a собраны в одном канале. Каждый день автор постит качественный контент для FullStack-разработчиков! Не упусти возможность обучиться:
https://t.me/+a0wUrtLwM7thZTcy
5 003
Как мы делали Telegram-бот для похудения, а похудел мой кошелек
• Увлекательное повествование о том, как я затесался в «мамкины стартаперы» и попытался сделать собственный проект. Ну как я, на самом деле,
Читать
5 003
Хочешь научиться решать задачки с собеседований?
А представь, что все это в формате MMORPG бота, где ты можешь прокачивать своего пресонажа, батлиться с друзьями, проходить собесы в разные IT компании и главное - прокачивать себя как разработчика!
В Dev’s Battle ты найдешь:
👉 1000+ задачек по JS, Java и Python
👉 2000+ активных игроков
👉 7 компаний для собеседований. От Рабов Галерных до Facebook
👉 Прокачку и развитие внутриигрового персонажа
👉 Фан и общение с другими разработчиками
Все это бесплатно, с небольшим кринжом и крутым комьюнити!
😎 Залетай в Dev’s Battle, если, конечно, сможешь…
5 003
Финал поста выше
Теперь дальше, как у нас устанавливается
GetDBUser, потому что не достаточно его просто создать, его надо еще установить. Перейдем по следующему пути: middlewares/init.py. В данной папке есть функция setup и мы в наш инит из модуля database импортируем GetDBUser и из throttling - ThrottlingMiddleware. После чего, в функции setup прописываем dp.middleware.setup(GetDBUser()).
Дальше эта функция устанавливается в нашей функции on_startup. То есть, когда у нас создается бот, когда он запускается, начинает работать эта функция, устанавливается фильтр и мидлвари.
Вот примерно так все это и работает. Это довольно сложно для быстрого понимания, потому что сначала в это все надо вникнуть, попробовать. Но не бойтесь тыкать, изменять разные параметры, понятное дело, что будут возникать ошибки, всякие проблемы, но это все решается, нужно пробовать, смотреть и не останавливаться на достигнутом.5 003
Методы перебора элементов
При организации перебора элементов из словаря ключ и соответствующее ему значение могут быть получены одновременно посредством метода
items(). Код 1
При организации перебора последовательности индекс и соответствующее ему значение могут быть получены одновременно посредством функции enumerate(). Код 2
#python_обучение5 003
Как найти работу программистом, если опыта коммерческой разработки нет?
Замкнутый круг. Не берут на работу без опыта, а опыта нет, потому что не берут на работу.
Онлайн-курс? Но на курсах выпускают джуниуров, а многие HR’ы уже просто отметают джуниор выпускников.
❗️Рынок образования не стоит на месте, поэтому ребята из «Девмана» знают решение твоей проблемы! Выходить на рынок уже мидлом.
«Девман» набирают учеников на пробную неделю курса👇
«От новичка до мидл Python/Django разработчика»
Чем крут этот курс?
1️⃣У вас будет личный ментор.
2️⃣Командная разработка. В портфолио будет до 9 проектов.
3️⃣Полностью оплачиваемая стажировка.
Полностью боевые проекты, реальные заказчики и зарплата.
4️⃣Самое главное — трудоустройство!
➡️ Пробная неделя абсолютно бесплатна! ⬅️
Переходи в чат-бот и регистрируйся на курс👇
5 003
☑️ Собрать бота Salebot
• Бюджет: ожидает предложений
• Срок: по договоренности
• Задача:
Собрать бота Salebot в Телеграм, связать ее с Геткурс и Продамус
Откликнуться
5 003
Продолжение к посту выше
Теперь дальше, у нас есть мидлварь, который называется
database.py. В него импортированы из aiogram - types, из aiogram.dispatcher.middlewares - BaseMiddleware и из utils.db_api - User.
Далее, у нас создается класс GetDBUser, в который передается импортированный BaseMiddleware. И каждый раз, когда будут передаваться message или callback_query, будут выполняться следующие функции: async def on_process_message() и async def on_process_callback_query.
Разберем каждую по-подробнее. В первую функции приходит message и data(словарь данных, который летит в хендлер). В дате можно задать любой параметр. К примеру, если указать ключ User, то в хендлере можно будет ловить юзеров. В саму дату по ключу User мы записываем id и name. Это будет выглядеть так: data["user"] = User(id=message.from_user.id, name=message.from_user.full_name). Проще говоря, мидлварь вмешивается в передачу хендлера и позволяет передать нужые нам данные.