- Статус
- Оффлайн
- Регистрация
- 2 Июн 2020
- Сообщения
- 165
- Реакции
- 42
В общем, решил попробовать себя в создании бота в телеге - магазин полуавтоматических продаж.
В самом боте есть админка -
Добавил функции - Добавить пак, Удалить пак, Добавить ссылку.
Функция добавления пака работает идеально, но вот удаление нет.
Нажимаю на кнопку "Удалить пак"
вылазит список паков которые есть в боте
выбираю один из паков -
в итоге проблема заключается в том, что кнопка "Да", не функционирует.
По идеи моей она должна была с базы удалять строки с определенным паком который я выберу.
Вот код отвечающий за эту кнопку -
Помогите пожалуйта, подскажите почему может не работать эта кнопка.
В самом боте есть админка -
Добавил функции - Добавить пак, Удалить пак, Добавить ссылку.
Функция добавления пака работает идеально, но вот удаление нет.
Нажимаю на кнопку "Удалить пак"
вылазит список паков которые есть в боте
выбираю один из паков -
в итоге проблема заключается в том, что кнопка "Да", не функционирует.
По идеи моей она должна была с базы удалять строки с определенным паком который я выберу.
Вот код отвечающий за эту кнопку -
Код:
@dp.callback_query_handler(lambda c: c.data == "delete_pack" and c.from_user.id == ADMIN_ID)
async def delete_pack_start(callback_query: types.CallbackQuery):
try:
conn = sqlite3.connect('packs.db')
cursor = conn.cursor()
cursor.execute("SELECT id, name FROM packs")
packs = cursor.fetchall()
conn.close()
if not packs:
await callback_query.answer("Нет паков для удаления", show_alert=True)
return
keyboard = types.InlineKeyboardMarkup(row_width=1)
for pack_id, pack_name in packs:
keyboard.add(types.InlineKeyboardButton(pack_name, callback_data=f"del_{pack_id}"))
keyboard.add(types.InlineKeyboardButton("? Назад", callback_data="back_to_main"))
await callback_query.message.edit_text("Выберите пак для удаления:", reply_markup=keyboard)
except Exception as e:
logger.error(f"Error in delete_pack_start: {e}")
await callback_query.answer("Произошла ошибка", show_alert=True)
@dp.callback_query_handler(lambda c: c.data.startswith("del_") and c.from_user.id == ADMIN_ID)
async def confirm_delete_pack(callback_query: types.CallbackQuery):
try:
pack_id = int(callback_query.data[4:])
conn = sqlite3.connect('packs.db')
cursor = conn.cursor()
cursor.execute("SELECT name FROM packs WHERE id=?", (pack_id,))
result = cursor.fetchone()
conn.close()
if not result:
await callback_query.answer("Пак не найден", show_alert=True)
return
pack_name = result[0]
keyboard = types.InlineKeyboardMarkup(row_width=2)
keyboard.add(
types.InlineKeyboardButton("✅ Да", callback_data=f"confirm_del_{pack_id}"),
types.InlineKeyboardButton("❌ Нет", callback_data="delete_pack")
)
await callback_query.message.edit_text(f"Удалить пак {pack_name}?", reply_markup=keyboard)
except Exception as e:
logger.error(f"Error in confirm_delete_pack: {e}")
await callback_query.answer("Произошла ошибка", show_alert=True)
@dp.callback_query_handler(lambda c: c.data.startswith("confirm_del_") and c.from_user.id == ADMIN_ID)
async def execute_delete_pack(callback_query: types.CallbackQuery):
try:
pack_id = int(callback_query.data[12:])
conn = sqlite3.connect('packs.db')
cursor = conn.cursor()
# Получаем имя для отображения
cursor.execute("SELECT name FROM packs WHERE id=?", (pack_id,))
result = cursor.fetchone()
if not result:
await callback_query.answer("Пак не найден", show_alert=True)
return
pack_name = result[0]
# Удаляем пак
cursor.execute("DELETE FROM packs WHERE id=?", (pack_id,))
conn.commit()
# Проверка успешности
cursor.execute("SELECT id FROM packs WHERE id=?", (pack_id,))
if cursor.fetchone():
await callback_query.answer("Не удалось удалить пак", show_alert=True)
else:
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton("? Назад", callback_data="back_to_main"))
await callback_query.message.edit_text(
f"✅ Пак '{pack_name}' успешно удален.",
reply_markup=keyboard
)
except Exception as e:
logger.error(f"Error in execute_delete_pack: {e}")
await callback_query.answer("Произошла ошибка при удалении", show_alert=True)
finally:
conn.close()
Помогите пожалуйта, подскажите почему может не работать эта кнопка.