Задать вопрос
  • Какой конвертер py файлов в exe самый быстрый?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    Ну, во-первых AutoPyExe=pyinstaller. Во-вторых, забыли упомянуть Nuitka.
    А вообще соглашусь с Uncleruc1. Pyinstaller - самый распространенный, стабильный и надежный инструмент. Если, вам нужна скорость самого экзешника, то насколько я знаю Nuitka - самая быстрая (в смысле ее exe самые быстрые)
    Ответ написан
    Комментировать
  • Aiogram 3, FSMContext/State: почему бот отвечает из всех фото только на последнее?

    Следует почитать на счет того как работает медиагруппа в ТГ, 5 фото в одном сообщении = 5 апдейтов.

    Я бы ушел от FSM в сторону Callback Data Factory

    # ...
    from aiogram.filters.callback_data import CallbackData
    
    
    class AnswerCallback(CallbackData, prefix='answer'):
        message_id: int
        answer_type: str
    
    
    @router.message(F.photo)
    async def photo_handle(message: Message):
        await hadnle_text(message)
    
    async def hadnle_text(message: Message):
        builder = InlineKeyboardBuilder()
        builder.add(InlineKeyboardButton(
            text="Answer 1",
            callback_data=AnswerCallback(message_id=message.message_id, answer_type='Answer 1').pack()),
        InlineKeyboardButton(
            text="Answer 2",
            callback_data=AnswerCallback(message_id=message.message_id, answer_type='Answer 2').pack()),
        )
        # Или так
        # builder.button(text="Answer 1", callback_data=AnswerCallback(message_id=message.message_id, answer_type='answer 1'))
        # builder.button(text="Answer 2", callback_data=AnswerCallback(message_id=message.message_id, answer_type='answer 2'))
        await message.answer(
            f"<b>Выберите кнопку</b>",
            reply_markup=builder.as_markup()
        )
    
    @router.callback_query(AnswerCallback.filter())
    async def text_state_callback(callback: CallbackQuery, callback_data: AnswerCallback):
        await bot.send_message(
            chat_id=callback.message.chat.id,
            text=callback_data.answer_type,
            reply_to_message_id=callback_data.message_id,
        )
    Ответ написан
    4 комментария
  • Почему код выдает ошибку, хотя файл llvmlite.dl находится в указанном каталоге?

    Vindicar
    @Vindicar
    RTFM!
    Возможно, проблема с разрядностью. Если DLL на 32 бита а питон на 64 (или наоборот), он её не подгрузит. Это верно практически для любой программы.

    EDIT: и да, как ниже написали, та же самая ошибка будет, если не найдена DLL, требуемая этой DLL. Утилита Dependency Walker в помощь. Может, нужен специфичный пакет MS VC++ Redistributable.
    Ответ написан
    2 комментария
  • Как сделать, чтобы telegram бот принимал текст юзера только 1 раз?

    jabir_sabitov
    @jabir_sabitov
    Для таких задач лучше использовать базу данных, в которой будет хранится информация о том, что сообщение было отправлено.

    @dp.callback_query_handler(text_contains='action_1')
    async def process_callback_button(call):
        await bot.send_message(call.message.chat.id, 'Напишите подробно о вашей вакансии. Можно с изображениями.')
    
    
        @dp.message_handler(content_types=['text'])
        async def start_command(message: types.Message, message_has_been_sent: list = []):
    
         if not message_has_been_sent:
            text = message.chat.id
            await message.answer(
            'Вы точно хотите отправить сообщение?',
            reply_markup=InlineKeyboardMarkup().add(
                InlineKeyboardButton('Назад', callback_data='back'),
                InlineKeyboardButton('Отправить', callback_data='forward'),one_time_keyboard=True
                )
            )
            message_has_been_sent.append(1)


    Данный пример, грубо говоря, для «поиграться». Когда вы перезапустите код – потеряется информация о том, что сообщение уже было отправлено. Также, переменная со списком не очищается и висит в памяти, что может привести к полному исчерпанию памяти с течением времени.

    Изучите работу с asyncpg и будет вам счастье.
    Ответ написан
    Комментировать