Смешались кнопки в телеграм-боте
Написал код телеграм-бота, начал проверять и тестировать. Возникает проблема: когда я отправляю фото или видео, он мне выдает текст (всё правильно, как задумано), но когда я нажимаю на кнопки (Удалить фото\видео, удалить сообщение), то выполняется почему-то кнопка "Пользователи", хотя должны быть (Удалить фото\видео, удалить сообщение).
Почему выполняются другие кнопки? Что написано не правильно? Как исправить?
import telebot
import time
from telebot import types
import webbrowser
import sqlite3
token_bot = ''
bot = telebot.TeleBot(token_bot)
name = None
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, f'<b>Привет, {message.from_user.first_name}</b> ?\n\n', parse_mode='html')
conn = sqlite3.connect('All_base.sql')
cur = conn.cursor()
cur.execute('CREATE TABLE IF NOT EXISTS users (id int auto_increment primary key, name varchar(30), pass varchar(30))')
conn.commit()
cur.close()
conn.close()
bot.send_message(message.chat.id, f'? Поиск пользователя в системе...\n'
f'Введите <b>ИМЯ</b>: ...', parse_mode='html')
bot.register_next_step_handler(message, user_name)
def user_name(message):
global name
name = message.text.strip()
bot.send_message(message.chat.id, f'? Сверяем данные пользователя...\n'
f'Введите <b>ПАРОЛЬ</b>: ...', parse_mode='html')
bot.register_next_step_handler(message, user_pass)
def user_pass(message):
password = message.text.strip()
conn = sqlite3.connect('All_base.sql')
cur = conn.cursor()
cur.execute("INSERT INTO users (name, pass) VALUES('%s', '%s')" % (name, password))
conn.commit()
cur.close()
conn.close()
markup = types.InlineKeyboardMarkup()
btn_all_users = types.InlineKeyboardButton(text='Список пользователей', callback_data='users')
markup.add(btn_all_users)
bot.send_message(message.chat.id, f'Данные проверены ✅. Вы зарегистрированы!', reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
conn = sqlite3.connect('All_base.sql')
cur = conn.cursor()
cur.execute('SELECT * FROM users')
users = cur.fetchall() # возвращает все найденные записи
info = ''
for el in users:
info += f'? Имя: {el[1]}\n'\
f'? Пароль: {el[2]}\n\n' # ищем по элементам, не по индексу
cur.close()
conn.close()
bot.send_message(call.message.chat.id, f'```<b>Пользователи</b>```\n\n'
f'<code>{info}</code>', parse_mode='html')
@bot.message_handler(content_types=['photo', 'picture', 'image'])
def get_photo(message):
markup = types.InlineKeyboardMarkup()
btn_delete_photo = types.InlineKeyboardButton(text='Удалить фото', callback_data='delete_file')
btn_edit_photo = types.InlineKeyboardButton(text='Удалить сообщение', callback_data='delete')
markup.add(btn_delete_photo, btn_edit_photo)
bot.reply_to(message, 'Я не работаю с фотографиями, они для меня "пустой звук".', reply_markup=markup)
@bot.message_handler(content_types=['video'])
def get_video(message):
markup = types.InlineKeyboardMarkup()
btn_delete_video = types.InlineKeyboardButton(text='Удалить видео', callback_data='delete_file')
btn_edit_video = types.InlineKeyboardButton(text='Удалить сообщение', callback_data='delete')
markup.add(btn_delete_video, btn_edit_video)
bot.reply_to(message, 'Я не работаю с видео, они для меня "пустой звук".', reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def delete_message(callback_delete):
if callback.data == 'delete_file': # функция, которая удаляет предыдущее сообщение
bot.delete_message(callback_delete.message.chat.id, callback.message.message_id - 1)
elif callback.data == 'delete': # функция, которая удаляет сообщение
bot.delete_message(callback_delete.message.chat.id, callback.message.message_id)
bot.infinity_polling()