@dapiagey

Как сделать отправку InlineKeyboardButton по три элемента из списка?

Здравствуйте, помогите пожалуйста, как сделать отправку по три сообщения в одном InlineKeyboardButton.
Суть в чем, есть список содержащий названия и ссылки, нужно отправлять пользователю по 3 разных ссылки одном сообщением, но проблема в том, что если взять два телефона и нажать на одну и туже кнопку, то сообщения перепрыгивают на кол-во нажатий на другом телефоне. Помогите пожалуйста.
# -*- coding: utf-8 -*-
import telebot
from telebot import TeleBot
from telebot import types
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import re
import glob
import baza
starts = 0
end = 3
bot = TeleBot(baza.code)
@bot.message_handler(commands=['start'])
def start_message(message):
  sstup = types.ReplyKeyboardMarkup(resize_keyboard=True)
  item1 = types.KeyboardButton('')
  item2 = types.KeyboardButton('')
  
  sstup.add(item1, item2)
  bot.send_message(message.chat.id, "Привет,{0.first_name}!".format(message.from_user), reply_markup=sstup)
@bot.message_handler(content_types=['text'])
#Инициализация действий
def bot_message(message):
  if message.chat.type == 'private' and message.text =='':
      marcup = types.ReplyKeyboardMarkup(resize_keyboard=True)
      
      item1 = types.KeyboardButton('')
      item2 = types.KeyboardButton('')
      back = types.KeyboardButton('➢ Back ➣')
      marcup.add(item1, item2, back)
      
      bot.send_message(message.chat.id, '{0.first_name},'.format(message.from_user), reply_markup=marcup)
  elif message.chat.type == 'private' and message.text == '':
    marcup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    
    item1 = types.KeyboardButton('')
    item2 = types.KeyboardButton('')
    back = types.KeyboardButton('➢ Back ➣')
    
    marcup.add(item1, item2, back)

    bot.send_message(message.chat.id, '{0.first_name}, '.format(message.from_user), reply_markup=marcup)

  elif message.chat.type == 'private' and message.text == '➢ Back ➣':
    baza.files_java_curs = baza.files_java_curs
    sstup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('')
    item2 = types.KeyboardButton('')
    sstup.add(item1, item2)
    bot.send_message(message.chat.id, "{0.first_name}, давай попробуем ещё разочек!".format(message.from_user), reply_markup=sstup)
  elif message.chat.type == 'private' and message.text == '':
    sstup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('"')
    item2 = types.KeyboardButton('➢ Back ➣')
    sstup.add(item1, item2)
    bot.send_message(message.chat.id, "Привет,{0.first_name},'".format(message.from_user), reply_markup=sstup)
  elif message.chat.type == 'private' and message.text == ''or message.text == '' or message.text == '':
    sstup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item2 = types.KeyboardButton('➢ Back ➣')
    sstup.add(item2)
    bot.send_message(message.chat.id, "Привет,{0.first_name}, недоступен".format(message.from_user), reply_markup=sstup)

  elif message.chat.type == 'private' and message.text == '"':
    keyboard = InlineKeyboardMarkup()
    keyboard.row_width = 4
    for i in range(0, 3):
        sm = baza.files_java_curs.pop(0)
        keyboard.add(InlineKeyboardButton(sm, callback_data=f"files_java_curs{i}_"))
        #baza.files_java_curs.pop(0)
    item1 = InlineKeyboardButton('Дальше', callback_data='files_java_curs_finish_')
    keyboard.add(item1)
    bot.send_message(message.chat.id, '{0.first_name}, '.format(message.from_user), reply_markup = keyboard)

@bot.callback_query_handler(func=lambda callback:callback.data)
def check(callback):
  req = callback.data.split('_')
  print(req[0])
  if req[0] == 'files' and callback.message.chat.type == 'private':
    for i in range(len(baza.files_java_curs)):
      if callback.data == f'files_java_curs{i}_':
        video_make = (f'{baza.video_safe_telega[i]}')
        bot.send_video(callback.message.chat.id, video_make)
        bot.send_message(callback.message.chat.id, f'{baza.files_java_curs[i]}')
        #bot.send_message(callback.message.chat.id, f'{baza.video_safe_telega[i]}')
        
    if callback.data == 'files_java_curs_finish_' and callback.message.chat.type == 'private':
      try:
        ssm = baza.video_safe_telega.pop(0)
        keyboard = InlineKeyboardMarkup()
        keyboard.row_width = 4
        for i in range(0, 3):
            sm = baza.files_java_curs.pop(0)
            keyboard.add(InlineKeyboardButton(sm, callback_data=f"files_java_curs{i}_"))
        item1 = InlineKeyboardButton('Дальше', callback_data='files_java_curs_finish_')
        keyboard.add(item1)
        bot.send_message(callback.message.chat.id, ', reply_markup = keyboard)
      except:
        start += 1
        end += 2
        keyboard = InlineKeyboardMarkup()
        keyboard.row_width = 4
        for i in range(start, end):
            keyboard.add(InlineKeyboardButton(baza.files_java_curs[i], callback_data=f"files_java_curs{i}_"))
        item1 = InlineKeyboardButton('Дальше', callback_data='files_java_curs_finish_')
        keyboard.add(item1)
        bot.send_message(callback.message.chat.id, 'Молодца! Вот продолжение !', reply_markup = keyboard)
    else:
      start = 0
      end = 3
  

bot.polling(none_stop=True)
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@TKDBOT
Учу python. Готов к конструктивной критике.
Я не совсем понял где именно проблема с кнопками, но вот пример создания нескольких инлайн кнопок через цикл.
marka = cursor.execute("SELECT * FROM marka").fetchall()
keyboard = types.InlineKeyboardMarkup(row_width=1)
button_list = [types.InlineKeyboardButton(text=f'{marka[x][1]}', callback_data=f'marka|{marka[x][0]}' ) for x in range(len(marka))]
keyboard.add(*button_list)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы