Почему бот не показывает кнопки в сообщениях?

Доброго времени суток. При написании бота столкнулся с такой проблемой, что бот не показывает кнопку в сообщении.

Основной код
import telebot
from telebot import types
import config as cfg
import markups as nav

TOKEN = '6891614943:AAGZQ8mJd959fP-eBdAVHKXvyCHBFUfNs64'

bot = telebot.TeleBot(TOKEN)

btnProfile = types.KeyboardButton('КАНАЛ 1')


def checkSub(channels, user_id):
    for channel in channels:
        chat_member = bot.get_chat_member(chat_id=channel[1], user_id=user_id)
        if chat_member.status == 'left':
            return False
    return True


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    if checkSub(cfg.sponsorChannels, message.from_user.id):
        bot.send_message(message.chat.id, "Привет, {0.first_name}!".format(message.from_user))
    else:
        bot.send_message(message.chat.id, "Для доступа к функционалу подпишись на мой тгк!", reply_markup=nav.showChannels())


bot.infinity_polling()

Сама функция на которую я ссылался
def showChannels():
    markup = types.InlineKeyboardMarkup()
    keyboard = types.InlineKeyboardMarkup(row_width=1)
    for channel in sponsorChannels:
        btn = types.InlineKeyboardButton(text=channel[1], url=channel[2])
        markup.add(btn)
    btn_done_sub = types.InlineKeyboardButton(text="Я ПОДПИСАЛСЯ", callback_data="subchanneldone")
    markup.add(btn_done_sub)
    return keyboard

Массив sponsorChannels
sponsorChannels = [
    ["КАНАЛ 1", "-100...", "https://..."]
]
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
febday
@febday
Потому что вы для чего создали две экзепляра InlineKeyboardMarkup и записали их в разные переменные.
Я не совсем понимаю вашу логику, но видимо она есть

В функции showChannels вы возвращаете keyboard, в который ничего не записано, потому что всё записывается в markup
Удалите строку keyboard = types.InlineKeyboardMarkup(row_width=1)
И возвращайте markup:
return markup

Вот так должно быть:
def showChannels():
    markup = types.InlineKeyboardMarkup()
    for channel in sponsorChannels:
        markup.add(types.InlineKeyboardButton(text=channel[1], url=channel[2]))
    markup.add(types.InlineKeyboardButton(text="Я ПОДПИСАЛСЯ", callback_data="subchanneldone"))
    return markup
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nki
@nki
bezkart.ru готовая система лояльности
Клавиатуру создаете в markup, а в из функции возвращаете пустой keyboard
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы