Не работает скрипт end нажатия на кнопку при нажатии кнопки markup
Доброго времени суток,
Всё работает за исключением последней кнопки которая должна по нажатию на неё выводить сообщение но при нажатии вылетает ошибка:
Windows PowerShell
Попробуйте новую кроссплатформенную оболочку PowerShell (https://aka.ms/pscore6)
(venv) PS C:\Users\d.chapaev\Desktop\TGBot> python main.py
2022-08-12 16:24:38,075 (__init__.py:878 MainThread) ERROR - TeleBot: "Infinity polling exception: 'NoneType' object is not subscriptable"
2022-08-12 16:24:38,080 (__init__.py:880 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\__init__.py", line 874, in infinity_polling
self.polling(non_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\__init__.py", line 946, in polling
self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\__init__.py", line 1021, in __threaded_polling
raise e
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\__init__.py", line 977, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\util.py", line 154, in raise_exceptions
raise self.exception_info
File "C:\Users\d.chapaev\PycharmProjects\TGBot\venv\lib\site-packages\telebot\util.py", line 98, in run
task(*args, **kwargs)
File "C:\Users\d.chapaev\Desktop\TGBot\main.py", line 48, in search
val1 = db_table_val(message.text)
File "C:\Users\d.chapaev\Desktop\TGBot\main.py", line 22, in db_table_val
return film.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable
Вот сам код:
import telebot
from telebot import types
from pathlib import Path
import sqlite3
bot = telebot.TeleBot('Token')
ph = open('test.jpg', 'rb')
db_fn = Path("C:/Users/d.chapaev/Desktop/TGBot/db.db")
try:
conn = sqlite3.connect(db_fn, check_same_thread=False)
cursor = conn.cursor()
except sqlite3.Error as error:
print("Error", error)
if not (db_fn.exists() and db_fn.stat().st_size > 0):
raise FileNotFoundError(f"file [{db_fn.resolve()}] is empty or doesn't exist!")
def db_table_val(number: int):
film = cursor.execute("SELECT name FROM list WHERE id=?", (number,))
conn.commit()
return film.fetchone()[0]
def db_table_pic(picnumber: int):
pics = cursor.execute("SELECT pic FROM list WHERE id=?", (picnumber,))
conn.commit()
return pics.fetchone()[0]
@bot.message_handler(commands=["start"])
def start(message):
kb1 = types.InlineKeyboardMarkup()
kb1.add(types.InlineKeyboardButton(text='?НАЗВАНИЯ ФИЛЬМОВ?', callback_data='button'))
bot.send_photo(message.chat.id, photo=ph, caption='?ВСЕ БЕСПЛАТНЫЕ ФИЛЬМЫ? ЖМИ НА КНОПКУ ??? «УЗНАТЬ НАЗВАНИЯ ФИЛЬМОВ»', reply_markup=kb1)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.data == 'button':
bot.send_message(call.message.chat.id, '?ДЛЯ ПРОСМОТРА ФИЛЬМА ВВЕДИТЕ КОД В ФОРМАТЕ<<123>>')
@bot.message_handler(content_types=['text'])
def search(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton("Искать фильмы")
val1 = db_table_val(message.text)
pic1 = db_table_pic(message.text)
markup.add(btn1)
bot.send_photo(message.chat.id, photo=pic1, caption=val1, reply_markup=markup)
@bot.message_handler(content_types=['text'])
def end(message):
if message.text == "Искать фильмы" :
bot.send_message(message.chat.id, text="?ДЛЯ ПРОСМОТРА ФИЛЬМА ВВЕДИТЕ КОД В ФОРМАТЕ<<123>>")
bot.infinity_polling()
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Разобрался сам, проблема была в хэндлерах с одинаковыми типами данных, решилось через объединение содержимого двух хэндлеров в одном через цикл if:
@bot.message_handler(content_types=['text'])
def start_message(message):
if message.text == "?ИСКАТЬ ФИЛЬМЫ?":
bot.send_message(message.chat.id, '?ДЛЯ ПРОСМОТРА ФИЛЬМА ВВЕДИТЕ КОД В ФОРМАТЕ<<123>>')
else:
val1 = db_table_val(message.text)
pic1 = db_table_pic(message.text)
rkb = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
rkb.add('?ИСКАТЬ ФИЛЬМЫ?')
if pic1 == None:
bot.send_message(message.chat.id,'Фильм № ' + message.text + ' называется: ' + val1, reply_markup=rkb)
else:
bot.send_photo(message.chat.id, photo=pic1, caption='Фильм № '+message.text+' называется: '+val1, reply_markup=rkb)