Вопрос Помогите фиксануть одну кнопку в боте телеграмм

  • Автор темы Автор темы s1neks
  • Дата начала Дата начала
Армянин
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
2 Июн 2020
Сообщения
165
Реакции
42
В общем, решил попробовать себя в создании бота в телеге - магазин полуавтоматических продаж.
В самом боте есть админка -
1744112277450.png


Добавил функции - Добавить пак, Удалить пак, Добавить ссылку.
Функция добавления пака работает идеально, но вот удаление нет.

Нажимаю на кнопку "Удалить пак"

1744112336080.png


вылазит список паков которые есть в боте

выбираю один из паков -
1744112364493.png


в итоге проблема заключается в том, что кнопка "Да", не функционирует.

По идеи моей она должна была с базы удалять строки с определенным паком который я выберу.

Вот код отвечающий за эту кнопку -

Код:
Expand Collapse Copy
@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()

Помогите пожалуйта, подскажите почему может не работать эта кнопка.
 
В общем, решил попробовать себя в создании бота в телеге - магазин полуавтоматических продаж.
В самом боте есть админка - Посмотреть вложение 303234

Добавил функции - Добавить пак, Удалить пак, Добавить ссылку.
Функция добавления пака работает идеально, но вот удаление нет.

Нажимаю на кнопку "Удалить пак"

Посмотреть вложение 303235

вылазит список паков которые есть в боте

выбираю один из паков -
Посмотреть вложение 303236

в итоге проблема заключается в том, что кнопка "Да", не функционирует.

По идеи моей она должна была с базы удалять строки с определенным паком который я выберу.

Вот код отвечающий за эту кнопку -

Код:
Expand Collapse Copy
@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()

Помогите пожалуйта, подскажите почему может не работать эта кнопка.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
В общем, решил попробовать себя в создании бота в телеге - магазин полуавтоматических продаж.
В самом боте есть админка - Посмотреть вложение 303234

Добавил функции - Добавить пак, Удалить пак, Добавить ссылку.
Функция добавления пака работает идеально, но вот удаление нет.

Нажимаю на кнопку "Удалить пак"

Посмотреть вложение 303235

вылазит список паков которые есть в боте

выбираю один из паков -
Посмотреть вложение 303236

в итоге проблема заключается в том, что кнопка "Да", не функционирует.

По идеи моей она должна была с базы удалять строки с определенным паком который я выберу.

Вот код отвечающий за эту кнопку -

Код:
Expand Collapse Copy
@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()

Помогите пожалуйта, подскажите почему может не работать эта кнопка.
Во-первых фу, Пайтон.
Во-вторых, если ты написал код через чат ЛГБТ, то в чём проблема спросить у него про эту ошибку?
Или ты не смог чату ЛГБТ нормально сформулировать вопрос и пошёл на форум?
Ладно, за тебя спрошу.
" Проблема скорее всего в том, что условие callback_query.from_user.id == ADMIN_ID не выполняется (например, типы не совпадают). Проверь, чтобы ADMIN_ID был целым числом и равнялся твоему ID. Также добавь логирование для отладки, чтобы понять, срабатывает ли хендлер. "
 
Во-первых фу, Пайтон.
Во-вторых, если ты написал код через чат ЛГБТ, то в чём проблема спросить у него про эту ошибку?
Или ты не смог чату ЛГБТ нормально сформулировать вопрос и пошёл на форум?
Ладно, за тебя спрошу.
" Проблема скорее всего в том, что условие callback_query.from_user.id == ADMIN_ID не выполняется (например, типы не совпадают). Проверь, чтобы ADMIN_ID был целым числом и равнялся твоему ID. Также добавь логирование для отладки, чтобы понять, срабатывает ли хендлер. "


1744161547877.png

Во-первых фу, Пайтон

Телеграм ботик для сохранения тиктоков, звучит как респектовая вещь, услышал тебя
 
Во-первых фу, Пайтон.
Во-вторых, если ты написал код через чат ЛГБТ, то в чём проблема спросить у него про эту ошибку?
Или ты не смог чату ЛГБТ нормально сформулировать вопрос и пошёл на форум?
Ладно, за тебя спрошу.
" Проблема скорее всего в том, что условие callback_query.from_user.id == ADMIN_ID не выполняется (например, типы не совпадают). Проверь, чтобы ADMIN_ID был целым числом и равнялся твоему ID. Также добавь логирование для отладки, чтобы понять, срабатывает ли хендлер. "

прежде чем обращаться к людям на форуме, я очень долго пытался решить эту проблему и сам, и через чат джипити. А еще, прежде чем умничать, нужно понимать, что чат джипити не сделает рабочую полуавтоматическую платёжку с подтверждением от админа, админ-панель и другое, что есть в моем боте.

Да, и бессмысленно отправлять не правильный ответ от чата джипити. Если пишешь, пиши что то полезное хоть
Во-первых фу, Пайтон.
Во-вторых, если ты написал код через чат ЛГБТ, то в чём проблема спросить у него про эту ошибку?
Или ты не смог чату ЛГБТ нормально сформулировать вопрос и пошёл на форум?
Ладно, за тебя спрошу.
" Проблема скорее всего в том, что условие callback_query.from_user.id == ADMIN_ID не выполняется (например, типы не совпадают). Проверь, чтобы ADMIN_ID был целым числом и равнялся твоему ID. Также добавь логирование для отладки, чтобы понять, срабатывает ли хендлер. "
похоже ты тоже не смог правильно сформулировать вопрос, потому что ответ не правильный :cry::cry::cry:
 
Последнее редактирование:
прежде чем обращаться к людям на форуме, я очень долго пытался решить эту проблему и сам, и через чат джипити. А еще, прежде чем умничать, нужно понимать, что чат джипити не сделает рабочую полуавтоматическую платёжку с подтверждением от админа, админ-панель и другое, что есть в моем боте.

Да, и бессмысленно отправлять не правильный ответ от чата джипити. Если пишешь, пиши что то полезное хоть

похоже ты тоже не смог правильно сформулировать вопрос, потому что ответ не правильный :cry::cry::cry:
Я у него спросил в точь точь что ты написал на форуме
 
Назад
Сверху Снизу