Python Telegram Bot
Відкрити в Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
Показати більше5 003
Підписники
Немає даних24 години
-67 днів
+1730 день
Архів дописів
5 003
Что такое безопасность приложений и как проводить пентесты на уязвимости? Как подобрать пароль или устранить угрозу взлома? Узнайте всё о кибербезопасности на бесплатном интенсиве Skillbox с 16 по 18 января в 21:00 по московскому времени: https://clc.to/D9uPAQ
Сразу после регистрации вы получите на почту полезную статью о защите информации в сети ✔️
Что вас ждёт:
▶️ Интересные практические задания.
Напишете простейший подбор паролей на Python и попробуете взломать CSRF-защиту.
✔️ Полезная теория.
Узнаете, как устроено приложение и что такое протокол HTTP.
💬 Общение со спикером.
Экс-руководитель команды, которая разработала платформу антиспама и машинного обучения в Badoo, Михаил Овчинников расскажет про зарплаты, востребованность и перспективы работы в сфере.
🎁 Присоединяйтесь к прямым эфирам и получите сертификат на скидку 10 000 рублей на любой курс Skillbox. А всем, кто дойдёт до конца интенсива, подарим книгу Пола Доэрти и Джеймса Уилсона «Человек + машина» издательства МИФ.
5 003
☑️ Разработка уведомлений в телеграм
• Бюджет: ожидает предложений
• Срок: по договоренности
• Задача:
Используя API (api.santiment.net) сделать бота нотификации в телеграме информирующего по движению активов. Нужны уведомления на коричневую линию снизу (она пошла вверх – присылается сигнал, пошла вниз – сигнал)
Все данные на монеты к паре с BTC не к паре USDT
Например:
SOL_BTC
BNB_BTC
ETH_BTC
Таймрейм не важен
Полный список монет и доступ к закрытому разделу сайта предоставляется.
Откликнуться
5 003
Продолжение к посту выше
Приступим к создаю функции. В папке
misc создаем файл subscription.py. Наша функция будет выглядет так: async def check(user_id, channel: Union[int, str]): bot = Bot.get_current() member = await bot.get_chat_member(chat_id=channel, user_id=user_id) return member.is_chat_member(). Наша функция создана и теперь мы можем ее использовать в коде из прошлого поста, дописав for channel in channels: status = await subscription.check(user_id=call.from_user.id, channel=channel).
Теперь, для того, чтобы рассказать пользователю о статусе подписки, мы будем забирать информацию о канале: channel = await bot.get_chat(channel) if status: result += f"Подписка на канал {channel.title} Оформлена!\n\n" else: invite_link = await channel.export_invite_link() result += f"Подписка на канал {channel.title} не оформлена! "5 003
🐍 Курс «Основы программирования на Python»
Старт: 9 января
Продолжительность: 2 месяца
❗️ Записаться на зимний поток можно до 19 января включительно!
Курс с полного нуля, начальные знания не нужны! Вы получите подробные методички, видео лекции в записи и домашние задания. Очень много практики. ДЗ проверяют кураторы, которые помогут с эффективным изучением предмета.
ℹ️ Краткое содержание курса:
1. Введение
2. Переменные
3. Типы данных
4. Операторы ветвления (условные операторы)
5. Циклы
6. Функции
7. Модули и пакеты в Python
8. Исключения (exceptions)
9. Работа с файлами
10. Форматирование в Python
11. Регулярные выражения
🔥 Имеется промо-доступ на 7 дней!
5 003
Обработка исключений. Часть 4
У оператора
try… except есть необязательный блок else, который, если присутствует, должен размещаться после всех блоков except. Его полезно использовать при наличии кода, который должен быть выполнен, если блок try не породил исключений. Пример на ФОТО.
Использование блока else предпочтительнее, чем добавление дополнительного кода к блоку try, поскольку исключает неожиданный перехват исключения, которое появилось не по причине выполнения кода, защищенного оператором try… except. При появлении исключения, оно может иметь ассоциированное значение, также известное как аргумент исключения. Присутствие и тип аргумента зависят от типа самого исключения
#python_обучение5 003
Продолжение к посту выше
Заполняем нашу кнопку:
check_button = InlineKeyboardMarkup( inline_keyboard = [[InlineKeyboardButton(text="Проверить подписки", callback_data="check_subs")]]).
Теперь импортируем нашу кнопку в хендлер и создаем еще один, уже для проверки наших подписок. Поэтому это будет хендлер на нажатие кнопки check_button. Пишем: @dp.callback_query_handler(text="check_subs) async def checker(call: CallbackQuery): await call.answer(). После этого мы начнем формировать наш ответ, потому что на какие то каналы человек мог подписаться, а на какие то нет и нам нужно уведомить его об этом: result = str() for channel in channels:. Мы снова проходимся по канал и проверяем статус подписки на них. Но для этого нам нужно создать отдельную функцию, которая, собственно, и будет это делать5 003
Продолжение к посту выше
И прописываем
channel_format += f"Канал {chat.title}\n\n". Это будет отформатированная с помощью HTML разметри строка, в которую будет зашита ссылка приглашение.
Наконец, передаем это сообщение пользователю: await message.answer(f"Вам необходимо подписаться на следующие каналы: \n" f"{channel_format}", replay_markup=check_button, disable_web_page_preview=True). Что тут написано? Мы позволяем пользователю посмотреть на статус его подписок, создав инлайн кнопку после сообщения, и отключаем превью каналов подписки.
Далее, приступим к созданию нашей инлайн кнопки check_button. Для этого нам надо перейти в Keyboards/inline и создать файл subscriptions.py. В файле создаем нашу кнопку check_button = InlineKeyboardMarkup(), которую мы заполним в следующем посте5 003
Обработка исключений. Часть 3
В последнем блоке except можно не указывать имени (или имён) исключений. Используйте это с особой осторожностью, так как таким образом легко скрыть настоящую программную ошибку! Также такой обработчик может быть использован для вывода сообщения об ошибке и порождения исключения заново (позволяя при этом обработать исключение коду, вызвавшему обработчик) ФОТО.
#python_обучение
5 003
Для тех кто просил, канал с мемами для программистов и айтишников👇
https://t.me/+8eN45lIfdTVmNzcy
5 003
Продолжение к посту выше
Пишем хендлер, который будет срабатывать по команде
channels: @dp.message_handler(Command("channels")) async def show_channels(message: types.Message):.
Теперь, чтобы организовать наш список каналов в одном сообщении, мы сделаем это строкой: channels_format = str() for channel in channels(импортируем из data.config.channels): chat = await bot.get_chat(channel). То есть, мы проходимся по ID или Username каналов и достаем информацию о нашем канале с помощью метода get_chat().
Далее, мы можем присылать либо Username канала, если есть ID, если его нет, то мы можем присылать ссылку на приглашение, то есть попытаться как то этого пользователя добавить в канал. Мы будем просто генерировать ссылку. Это будет: invite_link = await chat.export_invite_link()5 003
Продолжение к посту выше
В
async def get_channel_info(message: types.Message): await message.answer(f"Сообщение было переслано из канала {message.forward_from_chat.title}. \n") дописываем f"Username: @{message.forward_from_chat.username}\n" и дополнительно прописываем ID - f"ID: {message_forward_chat.id}".
То есть, если канал у нас будет закрытым, у него не будет Username, будет только ссылка по которой можно будет пригласить кого то и ID. Как правило, ID есть абсолютно у всех каналов.
После того, как мы получили ID канала, нам нужно сделать список каналов, на которые нужно подписаться и делаем мы это в config.py. Это будет список channels = [] и с помощью хендлера, котороый пропишем в следующем посте, мы будем показывать пользователю каналы, на которые надо подписаться5 003
Обработка исключений. Часть 2
Класс в блоке
except совместим с исключением, если он является тем же классом или его базовым классом (но не наоборот — блок, перечисляющий производный класс, несовместим с базовым классом). Например, следующий код будет печатать B, C, D в таком порядке (Фото)
Обратите внимание: если блоки except были поменяны местами (сначала с except B), напечатал бы B, B, B — срабатывает первое соответствие, за исключением предложения
#python_обучение