Привет!Сегодня мы с вами продолжим изучать 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)