Ответы пользователя по тегу Python
  • Как работает цифровая подпись в питоне в модуле ecdsa?

    ma4akk
    @ma4akk
    Функция sk.sign() вызывается дважды с одним и тем же сообщением, b'a', но каждый раз возвращает разные результаты. Потому, что функция sign() генерирует новую цифровую подпись при каждом вызове, даже если она вызывается с одним и тем же сообщением.
    Ответ написан
  • Бот не видеть file_id, что делать?

    ma4akk
    @ma4akk
    В вашем коде ошибка. Вы используете метод open() для открытия файла изображения, который принимает путь к файлу изображения на диске. В вашем случае в качестве пути к файлу изображения вы передаете строку с file_id изображения, который хранится на сервере Telegram.

    Чтобы отправить изображение ботом используйте метод send_photo(), который принимает chat_id получателя, и идентификатор файла изображения file_id.

    @dp.message_handler(content_types=['text'], text=['/mem', 'mem', 'мем'])
    async def sendphoto(msg):
        arr=["AgACAgIAAxkBAAIBDGOTEZidA5W9TrvjLb_d7cAE5Nn7AALewjEbPQigSLUEN_gyByq8AQADAgADeAADKwQ", "AgACAgIAAxkBAAIBDGOTEZidA5W9TrvjLb_d7cAE5Nn7AALewjEbPQigSLUEN_gyByq8AQADAgADeAADKwW"]
        file_id = random.choice(arr)
        await bot.send_photo(msg.from_user.id, file_id)
    Ответ написан
    1 комментарий
  • Можно ли получить значение callback_data при реплае?

    ma4akk
    @ma4akk
    Мб так
    @dp.message_handler(commands=['test'])
    async def test(message: types.Message):
        user_id = message.from_user.id
        keyboard = types.InlineKeyboardMarkup()
        callback_button = types.InlineKeyboardButton(text="test button", callback_data=f"{user_id}")
        keyboard.add(callback_button)
        await message.answer('test message', reply_markup=keyboard)
    
    @dp.message_handler(content_types=['text'])
    async def text(message: types.Message):
        if message.reply_to_message:
            # Получаем данные из callback_data
            callback_data = message.reply_to_message.callback_data
            # Сравниваем user_id из сообщения и user_id из callback_data
            if message.from_user.id == callback_data:
                await bot.edit_message_text(chat_id=message.chat.id, message_id=message.reply_to_message.message_id, text='Good')
    Ответ написан
  • Почему не стоит использовать f строки в SQL Python запросах?

    ma4akk
    @ma4akk
    Использование f строки в SQL запросах может быть небезопасно, потому что оно позволяет вставлять значения переменных непосредственно в SQL запрос. Это может привести к SQL injection - атаке, когда злоумышленник вводит в запрос подозрительные данные, чтобы получить доступ к базе данных или внести в нее изменения.

    Чтобы избежать этой проблемы, рекомендуется использовать параметризированные запросы. Это значит, что значения переменных не вставляются непосредственно в запрос, а передаются отдельно как параметры. В SQLite это можно сделать с помощью вопросительного знака (?) вместо значения переменной:

    connect = sqlite3.connect('INFO.db')
    cursor = connect.cursor()
    
    GLAV_USER = message.from_user.id
    cursor.execute("SELECT ID FROM table WHERE MEMBER = ?", (GLAV_USER,))


    Такой подход более безопасен и предотвращает возможность SQL инъекцй.
    Ответ написан
    3 комментария
  • Почему датафрейм Pandas не удаляется полностью?

    ma4akk
    @ma4akk
    Возможно, проблема заключается в том, что вы пытаетесь удалить ссылку на датафрейм, но не сам датафрейм. В Python переменные являются ссылками на объекты, и при использовании оператора del, вы удаляете только ссылку на объект, но не сам объект. Датафрейм по-прежнему существует в памяти. Чтобы его удалить полностью, можно использовать метод df.drop().

    df_terminals.drop(inplace=True)Метод df.drop() принимает параметр inplace, который позволяет указать, что изменения нужно применить к текущему датафрейму, а не создать новый
    Ответ написан
    Комментировать
  • Как сделать команду и функцию по команде только для вызывавшего эту команду в чате(Python, Pyrogram)?

    ma4akk
    @ma4akk
    Чтобы сделать команду доступной только для того, кто ее вызвал, можно использовать фильтр filters.private. Например:

    @bot.on_message(filters.private & filters.command(['Кнб'], prefixes=''))
    async def startik(bot, message):
        # Код команды здесь


    Этот фильтр будет пропускать только сообщения, отправленные в личном чате боту (не в групповом чате или канале).

    Чтобы скрыть кнопки у остальных пользователей, можно использовать метод delete_message вместе с фильтром filters.user(message.from_user.id) для удаления сообщения с кнопками только у отправителя сообщения. Например:

    @bot.on_message(filters.private & filters.command(['Кнб'], prefixes=''))
    async def startik(bot, message):
        # Код команды здесь
    
        # Удаление сообщения с кнопками у отправителя сообщения
        await bot.delete_message(message.chat.id, message.message_id, filters.user(message.from_user.id))
    Ответ написан
    5 комментариев
  • Как распарсить датафрейм в пандас, когда сзначеним одной колонки являются словарь?

    ma4akk
    @ma4akk
    Чтобы проанализировать поле Tuples в фрейме данных pandas, вы можете использовать метод DataFrame.apply для применения пользовательской функции к каждой строке фрейма данных. Эта пользовательская функция может извлекать поля Ordinal и Cardinality из словаря в столбце Кортежи и возвращать новый кортеж или список, содержащий эти значения.

    Например:

    def extract_ordinal_and_cardinality(row):
          tuples_dict = row['Tuples']
          return (tuples_dict['Ordinal'], tuples_dict['Cardinality'])


    df['Tuples'] = df.apply(extract_ordinal_and_cardinality, axis=1)
    Это создаст новый столбец в фрейме данных под названием Tuples, который содержит извлеченные Ordinal и Cardinality из словарей в исходном столбце Tuples.

    Чтобы создать новый фрейм данных без столбцов Hierarchies и Tuples, вы можете использовать метод DataFrame.drop для удаления этих столбцов из исходного фрейма данных.

    Например:

    new_df = df.drop(columns=['Hierarchies', 'Tuples'])
    Это создаст новый фрейм данных с именем new_df, который содержит все столбцы из исходного фрейма данных, за исключением столбцов Hierarchies и Tuples.
    Ответ написан
    1 комментарий
  • Почему Telethon возвращает None как значение юзернейма (хотя он у пользователя указан)?

    ma4akk
    @ma4akk
    Возможно, что информация о юзернейме не доступна через API, которое использует Telethon. Вам стоит проверить документацию и список доступных методов API для получения информации о пользователях. Если такой метод не предоставляется, то вы не сможете получить эту информацию с помощью Telethon.
    Ответ написан
    Комментировать