Задать вопрос
  • Непонятная дичь на сайтах с одного хостинга. wp-signups.php что происходит?

    Vindicar
    @Vindicar
    RTFM!
    Обычный заобфусцированный шеллкод.
    В конце кода видно обращение к curl, а потом fopen()+fwrite() - т.е. шелл умеет скачивать содержимое с указанного URL и записывать его в указанный файл на заражённом хостинге, предположительно для дальнейшего исполнения.

    delphinpro в комментариях правильно написал: проверяйте дату изменения файлов (если хакер ленивый, он её не подправил и заражённые файлы будут новее), удаляйте шелл код отовсюду.
    Я ещё добавлю: читайте логи вебсервера на предмет запросов к заражённым файлам, ищите хосты, которые обращались (наверняка китайские прокси). Потом ищите все запросы с этих хостов - если повезёт, поймёте как вас поломали. И в любом случае обновляйте вордпресс на последнюю версию, если это ещё не так.
    Ответ написан
    2 комментария
  • Как остановить выполнение программы спустя какое-то время?

    Vindicar
    @Vindicar
    RTFM!
    Просто добавь параметр timeout в FACE_UNLOCK(), фиксируй текущее время перед входом в цикл while(cam.isOpened()), а внутри цикла проверяй, истекло ли достаточно много времени или нет.
    Ответ написан
    1 комментарий
  • Как определить количество строк, не содержащих ни одного нулевого элемента?

    Vindicar
    @Vindicar
    RTFM!
    Как представлена матрица? Список из списков?
    1. Перебираешь циклом for элементы-строки внешнего списка, и для каждой строки проверяешь условие "0 not in row" где row - строка матрицы. Соответственно, если условие выполнено, увеличиваешь на 1 переменную-счётчик.

    2. Не знаю, можно ли это делать по условиям задачи - но я бы использовал класс Counter из модуля collections. Создаёшь пустой экземпляр Counter, потом проходишь циклом for по строкам матрицы, и каждую строку скармливаешь этому экземпляру методом .update().
    В конце перебираешь все ключи в Counter, и если значение для этого ключа больше 1, добавляешь ключ в отдельный список. Потом находишь максимум в этом списке, либо вручную либо функцией max().

    Так как свой код ты не привёл, делать лабу за тебя я не хочу.
    Ответ написан
  • Парсинг динамического сайта на python?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри там же конкретную структуру запроса (что за поля передаются, их значения). Потом сформируй такой же запрос, скажем через requests и отправляй. Также нужно будет понять, как парсить ответ - это json, или это кусок html, или ещё что?
    Детали зависят от конкретного сайта, так что конкретный код - это уже фриланс.

    Только имей ввиду, сайты могут не любить, когда их активно парсят. Варианты могут быть:
    • Проверка кук - просто загрузи сначала главную страницу в той же сессии requests, чтобы куки были.
    • Специальный сеансовый ключ для запросов - выясни, как он загружается, и сделай этот запрос перед началом работы.
    • Ограничение числа запросов с одного хоста - используй прокси, а лучше ограничь скорость работы скрипта.
    • Проверка клиента - поставь правильный User-Agent, можешь даже скопировать заголовки запроса.
    Ответ написан
    Комментировать
  • Как в python вывести текст на рабочий стол?

    Vindicar
    @Vindicar
    RTFM!
    Ты можешь использовать любой фреймворк для создания окна, но проблема будет именно с расположением. Если речь о Windows, то есть два возможных подхода.

    1. Обрабатывай сообщения о перемещении окна, блокируй любые перемещения, ставь окно в самый низ стопки окон. Используй функцию WinAPI SetWindowPos().

    2. Используя функцию WinAPI SetParent(), установить своё окно как дочернее для рабочего стола. Нужно найти дескриптор окна рабочего стола через FindWindow().

    Проблема в том, что доступ к WinAPI через питон возможен, но очень неудобен. Также тебе придётся как-то узнать у твоего выбранного фреймворка дескриптор твоего окна.
    Ответ написан
    Комментировать
  • Почему не открывается файл?

    Vindicar
    @Vindicar
    RTFM!
    Никогда не работал с этим фреймворком, но есть подозрение.
    a.on_selection = self.selected(a.selection)
    ты присваиваешь свойству on_selection возвращаемое значение метода selected(). Так как метод ничего не возвращает, это None. Т.е. ты говоришь, что никакой реакции на on_selection не надо делать.
    Подозреваю, что правильно будет
    a.on_selection = self.selected
    и обрати внимание, что нет скобок! Вместо вызова метода мы передаём ссылку на него.

    Далее, можно было бы и самостоятельно догадаться в чём дело, но тебя сбило с толку вот эта "обработка" исключений:
    try:
                self.ids.my_image.source = filename[0]
            except:
                pass

    Возьми хорошую железную линейку, и пару раз врежь себе по пальцам, чтобы запомнить что так делать не стоит никогда. Теперь вместо сколь-нибудь вменяемого сообщения об ошибке, по которому можно докопаться до её первопричины, программа просто молча не работает.
    Ответ написан
  • Как вставить фото в embed и строки?

    Vindicar
    @Vindicar
    RTFM!
    1. Гуглить пробовали? Вторая же ссылка по запросу "discord.py embed" ведёт вот на этот пошаговый туториал.

    2. "You Won Free Nitro"? Ну-ну. Зарепортил вопрос.
    Ответ написан
    Комментировать
  • Как обратиться к ключам словаря через input?

    Vindicar
    @Vindicar
    RTFM!
    Засунь словарь в словарь.
    dinos = {
        'carno' : { 'weight': 2170, 'health': 2170, 'bite': 200, 'bleed': 15, 'sbite': 0, 'sbleed': 0 }
        'maia' : { 'weight': 2868, 'health': 2868, 'bite': 175, 'bleed': 0, 'sbite': 0, 'sbleed': 0 }
    }
    
    while True:
        print('Enter attacking dino name: ', end='')
        name = input()
        if name not in dinos:
            print(f'No such dino: {name}')
        else:
            dino = dinos[name]
            break
    #работаем с dino
    Ответ написан
    Комментировать
  • Из-за чего не выполняются действия?

    Vindicar
    @Vindicar
    RTFM!
    > user_id: Value "Amogus" is not snowflake.
    > user = await client.fetchUser(message.username);

    Если не обращать внимание на упоротую терминологию, я подозреваю что fetchUser() требует ID пользователя (для дискорда это длинное число), а не ник.
    Но это просто догадка.
    Ответ написан
    Комментировать
  • Как парсить cmd окно?

    Vindicar
    @Vindicar
    RTFM!
    Вариант 1. Заставить программу вывести данные в файл (как показал Hemul GM), затем прочитать этот файл.
    Вариант 2. Запустить программу самому через модуль subprocess. Он позволяет перехватить стандартный вывод процесса (т.е. вывод в консоль) и вернуть его содержимое в виде строки.
    Вариант 3. Раз уж в целевой программе есть сетевая поддержка, можно попробовать получить информацию через локальное соединение. Но нужно иметь представление о протоколе обмена (что нужно послать, чтобы запросить данные, и как интерпретировать ответ). Само соединение обеспечит модуль socket.
    Ответ написан
    Комментировать
  • Как можно сделать бонус раз в 24 часа?

    Vindicar
    @Vindicar
    RTFM!
    Фиксируешь время нажатия на кнопку.
    Выбираешь из базы значение предыдущего времени по id пользотеля запросом SELECT.

    Если значения нет, человек пишет в первый раз, заносим значение времени и id пользователя в базу запросом INSERT. Отправляем сообщение о бонусе.

    Если значение есть, и разница между ним и текущим временем более 24 часов, человек может получить бонус. Обновляем значение в базе запросом UPDATE и отправляем сообщение о бонусе.

    Если значение есть, и разница менее 24 часов, отправляем сообщение с оставшимся до следующего бонуса временем.
    Ответ написан
  • Как открыть другой исполняемый файл .py по кнопке?

    Vindicar
    @Vindicar
    RTFM!
    Потому что у тебя в вызываемом файле делается повторная инициализация приложения.
    Весь этот вот код
    app = QtWidgets.QApplication([])
    application = X() #где X - имя класса формы
    application.show()
    
    sys.exit(app.exec())

    выполняется как при прямом запуске файла, так и при его импорте.

    Есть два решения:
    а) убрать код инициализации из вспомогательных файлов, оставить его ТОЛЬКО в главном файле.
    б) если позарез нужно, чтобы вспомогательные файлы можно было запускать сами по себе без главного, то заверни этот код в конструкцию вида
    if __name__ == '__main__':
        #тут код, который будет выполняться
        #ТОЛЬКО если файл запущен сам по себе
        #и не будет выполняться, если этот файл импортируют
    Ответ написан
    5 комментариев
  • Как сделать текстовую игру в стиле бота в телеграмме на языке python?

    Vindicar
    @Vindicar
    RTFM!
    Учи, что такое конечные автоматы, и как их реализовывать. По сути, это тебе даст необходимую базу для реализации игры. Каждый сюжетный шаг будет состоянием, а действия игрока - переходами.

    Есть несколько способов их реализации, хорошо подумай, какой удобнее. Например, вариант с матрицей переходов будет работать плохо.
    Ответ написан
    Комментировать
  • Как cделать доступ к команде только для меня?

    Vindicar
    @Vindicar
    RTFM!
    Если "только для меня" = "только для владельца бота", то discord.ext.commands.is_owner(). Можно использовать как декоратор для обработчика команды.
    Ответ написан
    Комментировать
  • Как открыть exe file как архив?

    Vindicar
    @Vindicar
    RTFM!
    Для начала, что за архив? ZIP? Или RAR? RAR питон из коробки не умеет.
    Далее, самораспаковывающийся архив - это EXE, к которому тупо дописан архив. Если знаешь, как выглядит заголовок архива (в частности сигнатуру), то можно просканировать файл, найти сигнатуру, отмотать указатель файла на неё, и уже тогда отдавать файл ZIP-объекту.
    Ответ написан
    Комментировать
  • Проблема сортировки с SQLite 3 на Discord.py Хочу узнать из за чего не работает?

    Vindicar
    @Vindicar
    RTFM!
    А на койхрен ты создаешь embed внутри цикла?
    По-моему, тут проблема не в sqlite и не в дискорде.
    Ответ написан
    Комментировать
  • Как управлять консольным приложением через python?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как сделать чтобы к серверу можно было подключаться через определенный домен или это невозможно?

    Vindicar
    @Vindicar
    RTFM!
    Что значит "только через определённый домен"?
    Т.е. чтобы нельзя было подключиться, уже зная IP сервера, но не зная домена?
    Сомневаюсь. В HTTP протоколе передаётся имя сервера в заголовках, в HTTPS оно передаётся сначала через SNI, потом в заголовках, а вот в ShadowSocks... они не так давно вообще выкинули анализ расширения SNI. Так что скорее всего ShadowSocks по-барабану как юзер узнал IP - через DNS или ещё как.

    И главное, зачем? Что за сценарий этого требует?
    Ответ написан
    Комментировать
  • Как лучше сделать функцию прибавления +30 в бд, так чтобы при 2 пользователях не вис код, и не ждал окончания цикла?

    Vindicar
    @Vindicar
    RTFM!
    Учи, как работает асинхронное программирование.
    Если на пальцах: всякий раз, когда ты делаешь await чтототам, выполнение асинхронной функции (вроде обработчика события) приостанавливается, и передаётся другой.
    А вот код в промежутке между await вызовами (ну или началом-концом функции) выполняется непрерывно, и занимает поток управления. Пока этот код выполняется, остальной бот стоит!
    Теперь посмотри что у тебя:
    while (True):
                user.balance += user.s9 * 30
                time.sleep(30)
                user.save()

    time.sleep() понятия не имеет про асинхронность, и не отдаёт управление другим асинхронным функциям. Поэтому пока она выполняется, остальной бот стоит.
    Да, даже для одного пользователя.

    Как минимум, нужно исправить две вещи.
    1. используй await asyncio.sleep() вместо time.sleep(). asyncio.sleep() знает про асинхронность, и приостановит функцию с передачей управления, т.е. бот сможет делать что-то ещё пока эта функция ждёт.
    2. while (True) - это не тру. Предусмотри код выхода из цикла! Или по максимальному числу итераций, или по команде, или по смене статуса пользователя... или по всему вышеперечисленному.
    Ответ написан
    Комментировать
  • Как создать универсальную функцию для "производства" массивов объектов?

    Vindicar
    @Vindicar
    RTFM!
    Что тут сказать, начинайте с азов ООП, потом с азов Питона!
    create(10,Test1_1())
    Вы передаёте в функцию create результат вызова класса Test1_1() - т.е. один его экземпляр. Если хотите передать сам класс, скобки нужно опустить:
    create(10,Test1_1)
    И тогда уже в функции будете делать вызов переданного класса, а точнее, любого вызываемого (callable) объекта-фабрики.
    Ответ написан
    Комментировать