telebot(pyTelegramBotAPI) 2 часть

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет!Сегодня мы с вами продолжим изучать pyTelegramBotAPI.

Наливайте чай ☕️ и мы поехали.

Кнопки под сообщением

import telebot
from telebot import types
token='наш токен'
bot=telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id,'Привет')
@bot.message_handler(commands=['button'])
def button_message(message):
    markup=types.InlineKeyboardMarkup()
    button=types.InlineKeyboardButton('Страница моего автора:',url='https://habr.com/ru/users/lubaznatel/posts/')
    button2=types.InlineKeyboardButton('Канал моего автора:',url='https://t.me/joinchat/HwfSdcgwrU1mYWNi')
    markup.add(button,button2)
    bot.send_message(message.chat.id,'Подпишитесь на канал моего автора',reply_markup=markup)
bot.infinity_polling(interval=0, timeout=0)

Будем использовать код из предыдущей статьи.Только в скобах bot.infinity_polling напишем interval=0, timeout=0.

Теперь в функции button будем отправлять сообщение под которым будут кнопки.

Для этого нам надо создать переменную в которой будет хранится клавиатура.

И сами кнопки чуть ниже предоставлена схема

types.InlineKeyboardMarkup

()

Это сама клавиатура

types.InlineKeyboardButton

('Текст на кнопке',url='ссылка')

Сама кнопка

Теперь нам надо добавить к клавиатуре кнопки

Напишем markup.add(button,button2)

Теперь надо отправить сообщение под которым будут эти кнопки, пишем bot.send_message(message.chat.id,'текст сообщения',reply_markup=markup)

Вот пример:

Теперь давайте сделаем чтобы бот проверял подписан ли юзер на канал.

Проверка подписки на канал

Теперь мы разберём как сделать так чтобы проверить подписан ли юзер на канал.

Это мы сделаем с помощью getChatMember

Теперь мы узнаем новый вид хэндлера который определяет действие при нажатии на одну из кнопок.

Пишем:

@bot.callback_query_handler(func=lambda call: True)

дальше создадим функцию под названием callback_inline

def callback_inline(call):

теперь перед тем как начать писать функцию нам надо сделать третью кнопку

Возвращаемся в функцию с кнопками

И там пишем:

button3=types.InlineKeyboardButton('Я подписан',callback_data="user")

И добавляем к клавиатуре нашу третью кнопку

Теперь при нажатии этой кнопки она возращает "user"

Вернёмся к функции callback_inline

в ней пишем:

if call.data == "user":
	try:
		a = bot.get_chat_member(chat_id='@lubaznatelhabr', user_id=call.from_user.id)
		if not a.status == 'left':
			bot.answer_callback_query(call.id, text="Ты прошёл проверку", show_alert=True)
    else:
			bot.answer_callback_query(call.id, text="Ты не прошёл проверку", show_alert=True)
  except:
      bot.answer_callback_query(call.id, text="Ты не прошёл проверку", show_alert=True)

Объясняю мы пишем "Если возвращённая дата=юзер тогда попробуем:в переменой а хранятся данные о том состоит юзер в нашем канале или нет, если статус а не равен left тогда:бот покажет предупреждение что ты прошёл проверку".Дальше надеюсь вы сами поймёте.Теперь у нас бот проверяет подписаны мы на указанный канал или нет.

То что у нас получилось:

А если ты не подписан на канал он скажет что "Ты не прошёл проверку".

Давайте создадим переменную abcd которая будет равна False

Создадим её перед переменной а

В проверки в которой человек оказывается подписан на канал пишем abcd=True.

теперь после проверки подписки на канал пишем

if abcd:
	@bot.message_handler(commands=['wow'])
  def wow_message(message):
  	bot.send_message(message.chat.id,'wow')

Теперь у нас команда "wow" работает только после подписки на канал

Мы теперь с вами ещё больше знаем про ботов на Python

Это конец статьи.Если хотите ещё что-то изучить тогда напишите в комментариях что именно.И я тогда сделаю 3 часть.

Попрошу подписаться на меня.И у меня появился свой канал в телеграмм.

Пока.

Бонус

bot.send_photo

(message.chat.id,open ("название файла.формат",'rb'))

Функция для отправки фото

bot.send_video

(message.chat.id,open ("название файла.формат",'rb'))

bot.send_document

(message.chat.id,open ("название файла.формат",'rb'))

Канал-Нажми на меня

Я в телеграмм-@ukuleleproger

Весь код:

import telebot
from telebot import types
token='Наш токен'
bot=telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id,'Привет')
@bot.message_handler(commands=['button'])
def button_message(message):
    markup=types.InlineKeyboardMarkup()
    button=types.InlineKeyboardButton('Страница моего автора:',url='https://habr.com/ru/users/lubaznatel/posts/')
    button2=types.InlineKeyboardButton('Канал моего автора:',url='https://t.me/lubaznatelhabr')
    button3=types.InlineKeyboardButton('Я подписан',callback_data="user")
    markup.add(button,button2,button3)
    bot.send_message(message.chat.id,'Подпишитесь на канал моего автора',reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.data == "user":
        try:
            abcd=False
            a = bot.get_chat_member(chat_id='@lubaznatelhabr', user_id=call.from_user.id)
            if not a.status == 'left':
                bot.answer_callback_query(call.id, text="Ты прошёл проверку", show_alert=True)
                abcd=True
            else:
                bot.answer_callback_query(call.id, text="Ты не прошёл проверку", show_alert=True)
        except:
            bot.answer_callback_query(call.id, text="Ты не прошёл проверку", show_alert=True)
        if abcd:
            @bot.message_handler(commands=['wow'])
            def wow_message(message):
                bot.send_message(message.chat.id,'wow')
bot.infinity_polling(interval=0, timeout=0)
Источник: https://habr.com/ru/post/581018/


Интересные статьи

Интересные статьи

В предыдущих двух частях мы научились анализировать нашу камеру и подбирать оптимальную экспозицию исходя из математических принципов.Теперь мы бы хотели эти два умения объединить и получить некую дор...
Привет! Уже довольно продолжительное время занимаюсь метриками в windows. Процесс сбора уже отлажен, и из памяти начинают уходить детали, а поэтому пора перенести получе...
Привет, Хабр! Наконец заканчиваю цикл статей, посвященных запуску курса "Архитектор сетей" от OTUS, по технологии VxLAN EVPN. И сегодня обсудим реализацию ...
Как показала практика, обилие кода в статье не очень хорошо сказывается на ее читабельности. Но для понимания того, как это все работает стоить иногда напрячь мозги. На что и была нацелена предыд...
В данной статье будет проведено сравнение средств резервного копирования, но сначала стоит узнать, как они быстро и хорошо справляются с восстановлением данных из резервных копий. Для простоты...