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

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

    ma4akk
    @ma4akk
    Немного неправильно понял вопрос, решил удалить ответ
    Ответ написан
    Комментировать
  • Бот не видеть 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 комментария
  • Как сделать валидацию в админ панели django?

    ma4akk
    @ma4akk
    Да, вы можете сделать валидацию полей формы в админ панели Django. Для этого вам нужно будет использовать специальный класс ModelForm и переопределить метод clean() для проверки полей формы.

    Например:
    class AnswerForm(forms.ModelForm):
        class Meta:
            model = Answers
            fields = ('question_id', 'aswer_text', 'true_answer',)
            readonly_fields = ('question_id',)
    
        def clean(self):
            cleaned_data = super().clean()
            true_answer = cleaned_data.get("true_answer")
            if true_answer:
                # Проверяем, что у других ответов не установлен чекбокс "Верный ответ"
                answers = Answer.objects.filter(question_id=cleaned_data.get("question_id"))
                for answer in answers:
                    if answer.true_answer:
                        raise ValidationError("Нельзя установить более одного верного ответа")
            return cleaned_data
    
    class AnswerAdm(admin.StackedInline):
        form = AnswerForm
        model = Answers
        fields = ('question_id', 'aswer_text', 'true_answer',)
        readonly_fields = ('question_id',)
    
    class TestquestionAdmin(admin.ModelAdmin):
        list_display = ('question_id', 'test_id', 'question_text',)
        list_display_links = ('question_id',)
        inlines = [AnswerAdm, ]
    Ответ написан
    1 комментарий
  • Почему датафрейм 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 комментарий
  • Как оптимизировать запрос с большим количеством данных в таблице?

    ma4akk
    @ma4akk
    В данном случае, чтобы оптимизировать запрос, можно использовать следующие методы:

    1 Добавить индексы на столбцы user_id и type_id, чтобы ускорить поиск данных по этим параметрам.

    2 Использовать оператор LIMIT для ограничения количества выбираемых данных, чтобы уменьшить нагрузку на сервер.

    3 Использовать оператор WHERE для фильтрации данных по необходимым критериям, чтобы избежать лишней обработки данных.

    4 Использовать параметр кеширования для сохранения результатов запроса в памяти, чтобы ускорить получение данных при повторных запросах.

    Также рекомендуется провести профилирование запросов и использовать специальные инструменты, такие как EXPLAIN, чтобы определить причины медленной работы запроса.
    Ответ написан
    1 комментарий
  • Является ли приемлимой практикой использование JSON обьектов в столбцах таблицы базы данных PostgreSQL?

    ma4akk
    @ma4akk
    Использование JSON объектов в столбцах таблицы базы данных PostgreSQL является приемлимой практикой и позволяет хранить сложные структуры данных в едином формате. Это упрощает их обработку и извлечение нужных данных в запросах. Однако, также следует учитывать, что хранение больших объемов данных в формате JSON может замедлить работу базы данных и увеличить нагрузку на сервер. Поэтому рекомендуется проводить оптимизацию запросов и использовать индексы для ускорения работы с JSON данными.
    Ответ написан
    5 комментариев
  • Не работает видеозапись в GNOME?

    ma4akk
    @ma4akk
    В GNOME 43 используется инструмент для создания скриншотов, который позволяет снимать и записывать видео. Просто нажмите PrtScreen и нажмите кнопку "Записать видео", чтобы начать запись. Если это не работает, убедитесь, что у вас установлены все необходимые зависимости для записи видео. Если вы используете Arch Linux, это может быть пакет gstreamer или другой пакет, который поддерживает запись видео. Попробуйте установить эти пакеты и попробовать снова.
    Ответ написан
  • Как подключить базу данных Postgres к телеграм боту?

    ma4akk
    @ma4akk
    Чтобы подключить базу данных Postgres к телеграм боту, вам нужно сначала установить и настроить Postgres на вашем сервере. Это можно сделать, выполнив команду sudo apt-get install postgresql в командной строке. Затем вы можете запустить командную утилиту psql и создать базу данных с помощью команды CREATE DATABASE parser;.

    После этого вы можете использовать модуль psycopg2-binary для подключения к базе данных с помощью библиотеки SQLAlchemy. Для этого вы можете использовать код подобный следующему:

    import sqlalchemy
    
    DB_URL = 'postgresql://postgres:123@localhost:5432/parser'
    engine = sqlalchemy.create_engine(DB_URL)
    connection = engine.connect()


    Этот код создаст подключение к базе данных parser, используя имя пользователя postgres и пароль 123. После того, как подключение будет установлено, вы можете использовать методы connection для выполнения SQL-запросов и работы с базой данных.
    Ответ написан
    Комментировать
  • Почему Telethon возвращает None как значение юзернейма (хотя он у пользователя указан)?

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

    ma4akk
    @ma4akk
    Для начала стоит поставить себе Linux.
    Почитать книгу, например.

    Самое главное - практиковаться
    Ответ написан
    2 комментария