Python Telegram Bot
رفتن به کانال در Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
نمایش بیشتر5 003
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-67 روز
+1730 روز
آرشیو پست ها
5 003
⚡️ BACKDOOR – лучший источник из мира Хакинга и IT.
На канале вы можете найти: секретные фишки соцсетей, малоизвестные сервисы, гайды по безопасности и анонимности а так же лайфхаки на любые случаи жизни!
Подписывайся, тебя ждёт много интересного: @IT_backdoor
5 003
☑️ Разработка бота на Python
• Бюджет: 40 000 руб. за проект
• Срок: по договоренности
• Задача:
Нужен бот для приема и публикации в телеграм канал лотов.
Нужна интеграция с экварингом, сдек
БД MySQL
Бот на Python
Библиотека на PyTelegramBotAPI
Необходимо закомментировать код
Генерация ссылок на оплату для перехода из канала в бот по типу
(t.me/bot_url?start=123556) где после = айди лота
Откликнуться
5 003
Продолжение к посту выше
Прописываем дальше хендлер отмены поста:
await state.finish() await call.message.edit_reply_markup() await call.message.answer("Вы отклонили пост"). На этом хендлер закончен. Приступаем к следующему: @dp.message_handler(state=NewPost.Confirm) async def _post_unknown(message: types.Message): await message.answer("Выберите опубликовать пост или отклонить пост"). Данный хендлер будет на случай, если пользователь затупит и начнет писать что попало или нажимать команду старт. Таким образом мы оградим бота от лишнего спама.
Теперь, если у нас админ уже нажал на кнопку, то будет срабатывать следующий хендлер, который мы закончим, опять же, в следующем посте: @dp.callback_query_handler(post_callback.filter(action="post"), user_id=admins) async def approve_post(call: CallbackQuery)5 003
Вызов исключений
Оператор raise позволяет программисту принудительно породить исключение. Например Код 1
Единственный аргумент оператора
raise определяет исключение, которое нужно вызвать. Им может быть либо экземпляр исключения, либо класс исключения (класс, дочерний к классу Exception). Если класс исключения будет передан, он неявно создаётся путём вызова конструктора без аргументов Код 2
Если вам нужно определить, было ли возбуждено исключение, не перехватывая его — упрощённая форма оператора raise позволит возбудить исключение заново Код 3
#python_обучение5 003
Продолжение к посту выше
Приступим к обработке постов администратором. После получения поста, бот должен переслать его администратору на проверку. Для этого пишем:
await bot.send_message(chat_id=admins[0], text=f"Пользователь {mention} хочет сделать пост:").
Теперь, мы берем наш отформатированный текст, который был получен из данных и отправляем его админу на подтверждение: await bot.send_message(chat_id=admins[0], text=text, parse_mode="HTML", replay_markup=confirmation_keyboard).
А теперь, перед тем как обработать нажатие на кнопку админом, мы пропишем еще варианты реакции на нажатие кнопки пользователем. Пишем хендлер, который мы закончим в следующем посте: @dp.callback_query_handler(post_callback.filter(action="cancel"), state=NewPost.Confirm) async def cancel_post(call: CallbackQuery, state: FSMContext)5 003
SQL теперь в телеграм!
SQL — главный язык программирования баз данных. Базы данных есть везде: от маленького интернет-магазина до социальной сети. Знание SQL очень важно для любого программиста! Его будет легко выучить, если подписаться на официальный русскоязычный канал. Это первоисточник всего, что появляется в платных курсах и остальных ресурсах. Стоит подписаться!
5 003
Продолжение к посту выше
Продолжаем создавать клавиатуру:
post_callback = CallbackData("create_post", "action") confirmation_keyboard = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text="Опубликовать пост", callback_data=post_callback.new(action="post")), InlineKeyboardButton(text="Отклонить пост", callback_data=post_callback.new(action="cancel")),]]).
Клавиатура у нас готова. Импортируем ее в poster.py и пишем следующий хендлер: @dp.callback_query_handler(post_callback.filter(action="post"), state=NewPost.Confirm) async def confirm_post(call: CallbackQuery, state: FSMContext): async with state.proxy() as data: text = data.get("text") mention = data.get("text") await state.finish() await call.message.edit_reply_markup() await call.message.answer("Вы отправили пост на проверку"). В следующем посте разберем действия бота для админа, принимающего пост5 003
Обработка исключений. Часть 6
Если у исключения есть аргументы, они выводятся в качестве последней («детальной») части сообщения о необработанном исключении.
Обработчики исключений перехватывают не только исключения, появившиеся прямо в блоке
try, но также и возбужденные внутри функций, которые были вызваны в блоке try (даже неявно)
#python_обучение5 003
Ты разработчик или только учишься кодить на Python?
Отличные новости — тебе теперь есть где тренироваться!
На этом канале собраны задания по Python и Machine Learning — от простейших, до задач из реальных проектов.
Переходи и тренируйся бесплатно и без нудных говорящих голов с вебинаров ▶️ https://t.me/python_tasks
5 003
Продолжение к посту выше
Так как мы не будем хранить текст в
callback, оставим его в машине состояний. Для этого, до сообщения пользователю пишем: await state.update_data(text=message.html_text, mention=message.from_user.get_mention()). Сохраняем текст, задаем вопрос пользователю об отправке поста и отправляем его в следующее состояние: await NewPost.next().
Теперь, давайте создадим нашу клавиатуру. Переходим в папку keyboards/inline и создаем файл manage-post.py. В этой клавиатуре мы уже будет использовать callback_data factory и напишем: post_callback = CallbackData("create_post", "action") confirmation_keyboard = InlineKeyboardMarkup(inline_keyboard=[[]]). Тут у нас будет 2 кнопки, которые мы заполним в следующем посте5 003
Уже 18 января, стартует подготовительный курс по Python🐍
Даём только мясную и прикладную информацию. Никакой воды и траты времени.
Вас ждет 69 уроков теории и практики прямо в браузере, вебинары, лайвкодинг и первая собственная программа на Python, написанная под руководством опытного наставника.
По окончании 14-дневного курса вы уже владеете базовым знанием языка!
Запишитесь прямо сейчас!
5 003
Продолжение к посту выше
Для кода из прошлого поста нам понадобится машина состояний. И для этого в папке
states мы создадим файл poster.py. В самом файле пишем: class NewPost(StatesGroup): EnterMessage = State() Confirm = State().
В файле с хендлерами создаем новый хендлер, но перед этим в хендлере команд нам надо установить состояние: await NewPost.EnterMessage.set(), a уже после создавать хендлер: @dp.message_handler(state=NewPost.EnterMessage) sync def enter_message(message: types.Message, state: FSMContext): await message.answer("Вы собираетесь отправить пост на проверку?", replay_markup=confirmation_keyboard). Эту инлайн клавиатуру мы сейчас создадим, но до нее, нам нужно где то сохранить текст пользователя5 003
Обработка исключений. Часть 5
В блоке
except можно указать переменную, следующую за именем исключения. Переменная связывается с экземпляром исключения, аргументы которого хранятся в instance.args. Для удобства, экземпляр исключения определяет метод __str__(), так что вывод аргументов может быть произведён явно, без необходимости отсылки к .args.
Таким образом, вы также можете создать/взять экземпляр исключения перед его порождением и добавить к нему атрибуты по желанию
#python_обучение5 003
Продолжение к посту выше
После окончания цикла, весь сформированный ответ отправляем пользователю:
await call.message.answer(result, disable_web_page_preview=True). Теперь добавим наши хендлеры в инициализатор, запустим нашего бота и протестим.
Далее, еще один интересный функционал - предложение постов от подписчиков и, если вы админ канала, подобие доски объявлений. Для этого создадим новый хендлер в папке users под названием poster.py, который будет активироваться по команде /creat_post. Пишем: @dp.message_handler(Command("creat_post)) async def creat_post(message: types.Message): await message.answer("Отправьте мне текст поста на публикацию"). После этого сообщения бот должен находится в состоянии ожидания поста на публикацию. Когда пользователь что то напишет, бот должен переслать это в канал в том виде, в котором оно есть.