• Как исправить ошибку в коде Python?

    Vindicar
    @Vindicar
    RTFM!
    А почему так много аргументов subprocess.Popen()?
    "powershell putty.exe ", login, "@", name_server, " -pw", password, - 6 штук.
    В документации четко написано: "args should be a sequence of program arguments or else a single string or path-like object. "
    А также:
    class subprocess.Popen(args, #и так далее
    args без звёздочки, так что это должен быть ОДИН аргумент. Т.е. коллекция строк, например, список.
    Ответ написан
  • Как сделать приветствие в боте дискорд?

    Vindicar
    @Vindicar
    RTFM!
    Правильно говорит. Имя функции с точкой типа "discord.on_member_join" в Питоне допустимым не является. Подучи сначала основы Питона, потом бросайся писать ботов.
    Ответ написан
    2 комментария
  • Здравствуйте. Как правильно написать функцию для определения типа данных при создании таблицы в sqlite3?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала не пытаться засунуть запрос в одну f-строку, а собирать его по частям. Нечитаемо же. И зачем тебе @staticmethod, если это не часть класса? А если часть класса, то почему staticmethod, а не classmethod - ты же обращаешься к константе data_type, которая должна быть в том же классе, не?
    А вообще, у меня такое чувство что ты пытаешься сделать свою ORM. Попробуй погоняй ponyorm или peewee, они простые и удобные.
    Ответ написан
    Комментировать
  • Как разрешить нажимать на реакцию одному пользователю?

    Vindicar
    @Vindicar
    RTFM!
    Хранить коллекцию вида "сообщение-автор", реагировать на проставление реакции, удалять реакцию если автор реакции не совпадает с заданным для этого сообщения.
    Ответ написан
    Комментировать
  • Возможно ли сделать стрим в видео звонок телеграм?

    Vindicar
    @Vindicar
    RTFM!
    Гипотетически - да. Но не факт, что есть готовые решения, и тем более конкретно для ноды. Нужно смотреть используемую вами библиотеку для телеги, поддерживает ли она видео-звонки, и если да, что в каком виде она принимает видеопоток. Если это что-то абстрактное, то возможно, удастся завернуть видео из стрима в этот формат и скармливать телеге понемножку. Если же требуется доступ именно к вебкамере, то тогда искать реализацию виртуальной вебкамеры.
    Ответ написан
    1 комментарий
  • Как можно реализовать фильтрацию текста на python?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых - это будет соревнование брони и снаряда, т.к. пользователи будут пытаться обходить ваш блэклист. Так что не ожидайте, что решение будет "раз и навсегда".
    Во-вторых, должно ли сообщение содержать хоть одно слово из белого списка, чтобы быть пропущенным? Не очень ясно, что вы имели ввиду под белым списком.
    В-третьих, и сообщение, и элементы фильтра должны подвергаться предварительной нормализации. Речь не только о приведении к регистру, но и работе с омографами (простейший случай - русское и латинское "о"), а также удалении некоторых символов (например, символ невидимого пробела или комбинаторные символы). Можно решить, заменяя перед проверкой разные символы на простейший омограф, например, русское о на латинское - как в сообщении, так и при подготовке черного и белого списков.
    В-четвёртых, нужно подумать о ложных срабатываниях. Грубо говоря, если мы не удаляем пробелы, пользователю достаточно написать "б л я" чтобы обойти нашу систему. Если удаляем, "гребля" будет давать ложное положительное срабатывание. Если занесём "гребля" в белый список и сделаем так, чтобы оно имело приоритет перед пересекающимся словом из чёрного списка - то тогда будет ложное отрицательное срабатывание на "игре бля". Разумеется, список слов зависит от контекста сообщений, но его составление будет долгим итерационным процессом.

    С учётом вышесказанного -
    1. нормализовать строку,
    2. проверить вхождение подстрок из чёрного списка,
    3. если они есть - проверить, есть ли вхождения подстрок из белого списка, пересекающиеся с вхождениями чёрного.
    4. убрать из рассмотрения все пересекающиеся вхождения чёрного списка
    5. если остались вхождения из чёрного списка - реагируем на сообщение как на нежелательное. Иначе считаем его допустимым.
    Ответ написан
    Комментировать
  • Почему не находит атрибут .group?

    Vindicar
    @Vindicar
    RTFM!
    Потому что надо не только прочитать сообщение об ошибке, но и понять его.
    Тебе английским по черном говорят, что ты пытаешься взять атрибут (в данном случае вызвать метод) у объекта типа None.
    Иными словами, re.search() тебе вернуло None.
    А когда это случается? Открываем документацию и читаем. Если коротко, строка в first_m не соответствовала указанному регулярному выражению.
    Ответ написан
    Комментировать
  • Как создать список треков?

    Vindicar
    @Vindicar
    RTFM!
    > upcoming.index(_)
    Попробуй использовать enumerate() для нумерации элементов списка (или иной коллекции).
    Ответ написан
    Комментировать
  • Как произвести вывод промежуточных результатов вычисления в элемент tkinter?

    Vindicar
    @Vindicar
    RTFM!
    В большинстве случаев, когда изменяешь элемент управления, он не перерисовывает себя немедленно - он только принимает к сведению, что ему нужно будет перерисовать себя при первой возможности. А первая возможность ему представится, когда твой обработчик calc() закончит работу.

    Поэтому есть пара вариантов.
    1. вызывать внутри цикла в calc() root.update_idletasks(). Это приостановит твой обработчик и даст шанс элементам управления отрисоваться, а потом возобновит выполнение.
    2. Разбить обработчик на отдельные короткие (это важно!) итерации. В конце каждой итерации планировать выполнение следующей с помощью root.after(), если требуется. Тогда в промежутках между завершением текущей итерации и вызовом запланированной следующей ткинтер будет успевать отрисовываться.

    В обоих случаех следует предусмотреть/проверить, что будет если нажать на кнопку дважды. Я подозреваю, ничего хорошего, так что кнопку стоит отключить на время выполнения обработчика.
    Ответ написан
    4 комментария
  • При использовании range( ), через N-ное количество циклов падает скорость?

    Vindicar
    @Vindicar
    RTFM!
    reversed(range(250))
    Зачем? Чем не устроил range(249, -1, -1)?

    Далее, ты и в up() и в down() в цикле создаёшь раз за разом один и тот же объект, а потом забываешь про него. Зачем устраивать разминку для сборщика мусора? Создай объект 1 раз и модифицируй его - либо в глобальной переменной, либо (лучше) в классе.
    Ответ написан
    Комментировать
  • Как из базы данных получить все значения столбца в список?

    Vindicar
    @Vindicar
    RTFM!
    Если используешь для работы с базой движок sqlite3, то будет как-то так
    con = sqlite3.connect("mydb.sqlite") #подразумеваю, что таблицу ты уже создал
    cur = con.cursor()
    cur.execute("SELECT id FROM users")
    ids = [row['id'] for row in cur]

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

    Vindicar
    @Vindicar
    RTFM!
    Непонятно, что именно ты пытаешься сделать.
    Если просто перевести скриншот в другое цветовое пространство, то вот этих двух строчек
    image = pyautogui.screenshot(region=(514, 495, 264, 12))
    image = cv2.cvtColor(np.array(image), cv2.COLOR_BGR2GRAY)
    должно хватить.
    Дальше crop лучше делать средствами cv2, благо для этого достаточно средств numpy-массивов (а именно так cv2 хранит изображения).
    Ответ написан
  • Последовательность чтения кода браузером?

    Vindicar
    @Vindicar
    RTFM!
    Percivald, ты не понимаешь.
    Тут три действия, а не два.
    1. Запланировать показ текущего значения изменяемого объекта planet (console.log() делает именно это!)
    2. Изменить значение объекта planet
    И спустя некоторое (пусть и небольшое) время
    3. Отобразить текущее значение изменяемого объекта planet.
    Не важно, в каком порядке выполняются 1 и 2, к момент выполнения 3 значение planet уже будет изменено.

    А вот если выводить строку, например, innerHTML, ситуация изменится, потому что строки не изменяемы!
    И тогда будет так:
    1. Запланировать показ объекта-строки, которая в настоящий момент находится в объекте planet.
    2. Сменить содержимое planet на другое. Старая строка при этом не пропадает, так как её показ уже запланирован. Про новую строку консоль ничего не знает.
    И спустя время
    3. Показать в консоли запланированный объект-строку.

    Иными словами, в первом случае содержимое объекта planet читается на шаге 3, где оно уже изменилось. Во втором случае, значение строки, которую мы взяли из planet, тоже читается на шаге 3 - но тот факт, что внутри planet эта строка была заменена на другую, ни на что не влияет.

    Вот, на пальцах:
    Вариант 1
    611443763c478362532846.png

    Вариант 2
    6114439e7363a433817881.png
    Ответ написан
    1 комментарий
  • Как получить список все классов из текущего файла?

    Vindicar
    @Vindicar
    RTFM!
    Нужно знать имя модуля. Для основного скрипта (который непосредственно выполняешь) это будет '__main__'. ЕМНИП это имя можно узнать из магической переменной __name__.

    import sys
    
    def enum_classes(module_name: str = __name__):
      module = sys.modules[module_name]
      return [v for v in vars(module).values() if type(v) is type and v.__module__ == module_name]


    Первая часть условия отсеет всё, кроме классов. Вторая по идее отсеет то, что попало в пространство имён через импорт типа "from X import Y".
    Ответ написан
    Комментировать
  • Python sqlite как обновить запись в базе?

    Vindicar
    @Vindicar
    RTFM!
    Убери кавычки вокруг последнего "?". В текущем варианте ты обновляешь баланс пользователя с именем "?", т.е. подстановка из переменной не происходит.
    И да, как посоветовали выше - проверь, что у тебя в переменных money и user перед запросом.
    print('Money:', repr(money))
    print('User:', repr(user))
    repr() выведет строку как строковую константу в питоне, т.е. можно будет увидеть обычно невидимые символы, которые могут присутствовать. Например, пробелы в конце строки.
    Ответ написан
    Комментировать
  • Почему проблема в сортировке?

    Vindicar
    @Vindicar
    RTFM!
    Код феерический. Два запроса вместо одного, выбор всех строк ради сортировки на клиенте, NULL там, где его быть не должно, и так далее.

    Всё это прекрасно делается на уровне запроса к базе!
    SELECT fname, balance FROM users WHERE balance IS NOT NULL ORDER BY balance DESC LIMIT 5

    Выберет имя и баланс пользователей, у которых баланс не NULL (sql-евский NULL превращается в питоновский None, с которым ты и столкнулся при сортировке). Это, к слову, твоя вина, нужно было указать NOT NULL и значение по умолчанию для поля balance при создании таблицы.
    Результат сортируется по полю balance по убыванию, и выбираются не более первых 5 строк (может быть менее).
    Каждая строка результата будет кортежем, где нулевой элемент - имя игрока, а первый - баланс.

    top5 = cur.execute('SELECT fname, balance FROM users WHERE balance IS NOT NULL ORDER BY balance DESC LIMIT 5').fetchall()
    table = []
    for num, (fname, x) in enumerate(top5, 1):
        table.append(f'{num} • {fname} - <b><i>{x}</i></b> монеток.\n' )
    await message.reply('Топ 5 богачей бота.\n\n'+''.join(table))


    Подучи SQL, сильно упростишь себе жизнь при составлении запросов.
    Ответ написан
    Комментировать
  • Как создать несколько команд?

    Vindicar
    @Vindicar
    RTFM!
    Потому что делаешь через задницу. Вместо того чтобы использовать существующий механизм команд, ставишь реакцию на любое сообщение и пытаешься выдернуть из него текст команды самостоятельно. Собственно, проблема в том, что ты объявил два метода с одним именем. Один из них всегда будет перекрыт другим.
    Я так понимаю, Quickstart ты прочитал, молодец. А как насчет почитать дальше?
    Ответ написан
  • Ошибка Non-UTF-8 в PyCharm, что с этим делать?

    Vindicar
    @Vindicar
    RTFM!
    У тебя исходный код набран не в кодировке UTF-8, или Питон не понял в какой он набран.
    а) Посмотри, какая кодировка выбрана в настройках Pycharm.
    б) Допиши в начало файла строку с указанием кодировки, например
    # -*- coding: utf-8 -*-
    если файл всё-таки в utf-8 или
    # -*- coding: windows-1251 -*-
    если файл набран в дефолтной кодировке винды.
    Ответ написан
    1 комментарий
  • Как перехватить STDOUT gunicorn`а?

    Vindicar
    @Vindicar
    RTFM!
    А ты уверен, что речь про stdout? Посмотри в p.stderr.
    Ответ написан