• Почему бот не отправляет сообщения?

    Vindicar
    @Vindicar
    RTFM!
    У обработчика сообщений должен быть только один параметр - message.
    Ответ написан
    Комментировать
  • Почему не получается авторизироваться через requests?

    Vindicar
    @Vindicar
    RTFM!
    Потому что надо исходный код целевой страницы почитать, ну и разобраться, как пользоваться инструментами разработчика в браузере, чтобы понять, какие запросы выполняются.
    https://edu.tatar.ru/login - это URL для получения страницы с формой входа. А вот сама форма отправляет данные на URL https://edu.tatar.ru/logon. Именно по этому адресу я бы и делал запрос.
    Ответ написан
    Комментировать
  • Почему звук останавливается на пару миллисекунд а потом продолжает воспроизводиться?

    Vindicar
    @Vindicar
    RTFM!
    Потому что на остальные операции (такие как подгрузка нового чанка, подготовка объектов, и прочее) уходит ненулевое время.
    Тебе нужно два потока, и очередь (queue.SimpleQueue или queue.Queue) для связи между ними. Один поток подгружает данные, формирует экземпляры AudioSegment, и подкладывает их в очередь. Другой - только вытаскивает их из очереди и делает play. Тогда если у тебя соединение достаточно быстрое, то очередь будет пополняться быстрее, чем она опустошается.
    Но и тогда могут быть проблемы из-за питоновских потоков. Надо экспериментировать.
    Ответ написан
    Комментировать
  • Что делать если бот дискорд не отвечает на комнды?

    Vindicar
    @Vindicar
    RTFM!
    Если ты используешь не slash commands, а классические команды в сообщениях, то боту нужно иметь доступ к тексту сообщений. А значит, нужен интент guild_messages (и dm_messages для команд в личке).
    Собственно, slash commands для того и ввели, чтобы ботов не оповещать постоянно о болтовне в чате на случай если там вдруг проскользнёт команда.
    Ответ написан
    2 комментария
  • Запуск Python скрипта по HTML кнопке?

    Vindicar
    @Vindicar
    RTFM!
    Если сайт уже есть, то настроить скрипт как CGI-приложение, кнопка должна делать запрос к серверу, который будет обрабатываться этим приложением. Конкретная настройка зависит от того, какой http-сервер используется.

    Если сайта как такового нет, то подними мини-приложение на том же FastAPI или Flask как отдельный сервер. Пусть он сам отдаёт страницу по одному запросу, и вызывает нужный скрипт по другому. Подробности в документации на соответствующие фреймворки.
    Ответ написан
    Комментировать
  • Как проверить есть ли элемент в списке кортежей?

    Vindicar
    @Vindicar
    RTFM!
    Перебрать список, проверить каждый кортеж.
    Ответ написан
    Комментировать
  • Как заменить time.sleep(N)?

    Vindicar
    @Vindicar
    RTFM!
    Создай threading.Event и используй метод wait(). Если event взведён (set()), то wait прервётся немедленно.
    Правда, я не помню, как он сигнализирует о таймауте - если исключением, его нужно ловить.
    Ответ написан
    Комментировать
  • Как убрать эту ошибку?

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

    Vindicar
    @Vindicar
    RTFM!
    ЕМНИП, добавь '\u0301' после буквы.
    Ответ написан
    2 комментария
  • Как корректно создать шаблон для json-файла?

    Vindicar
    @Vindicar
    RTFM!
    Почитать документацию по модулю json и осознать, что dumps() принимает на вход объект, который надо превратить в JSON-строку. Зачем ты сам что-то колхозишь через f-строку? Подай ему на вход словарь с нужными ключами, и всё.

    JSON объект соответствует питоновому словарю со стороковыми ключами, например:
    print(json.dumps( {'foo': 'bar'} ))
    Ответ написан
  • Как узнать нажата ли клавиша клавиатуры?

    Vindicar
    @Vindicar
    RTFM!
    Ну под виндой можно дёрнуть GetAsyncKeyState() (для одной клавиши) или GetKeyboardState() (для всех клавиш) через ctypes.
    Ответ написан
    Комментировать
  • Что делать если при открытии png файла с прозрачным фоном через OpenCV появляются гличи?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, скриншот в студию.
    Во-вторых, IMREAD_GRAYSCALE отрывает файлу канал прозрачности напрочь. Что там на самом деле было в прозрачных пикселях - фз.
    Попробуй IMREAD_UNCHANGED, тогда у тебя будет дополнительный канал прозрачности, который ты можешь сам принять к сведению - например, залить все прозрачные пиксели нужным цветом, или ещё что.
    Ответ написан
    Комментировать
  • Почему print(1 == True, 1 is True) вывод будет, True False, если можно по-подробнее?

    Vindicar
    @Vindicar
    RTFM!
    is проверяет идентичность, т.е. ссылаются ли два выражения на один и тот же объект.
    == проверяет эквивалентность, т.е. равны ли два объекта по содержанию.

    При этом == поддаётся переопределению, что позволяет разным объектам по-своему определять понятие равенства. is переопределять нельзя.

    Простой пример
    a = [1, 2, 3]  # создаём список
    b = list(a)  # создаём копию списка
    c = a  # создаём еще одну ссылку на список
    print(a == b)  # True - содержимое списка и копии равно друг другу
    print(a is b)  # False - но это два разных объекта
    print(a == c)  # True - объект равен самому себе
    print(a is c)  # True - потому что это один и тот же объект
    Ответ написан
    Комментировать
  • Как асинхронно отслеживать изменение json?

    Vindicar
    @Vindicar
    RTFM!
    Либо обязать сервер пинать бота при обновлении JSON, либо периодически опрашивать JSON ботом.
    Если сервер отдаёт заголовок Last-Modified, то можно передавать в заголовке If-Modified-Since дату и время предыдущего успешного опроса. Тогда сервер либо ответит 304 Not Modified, либо 200 OK если были изменения.
    Ответ написан
    Комментировать
  • Как подставить в скрипт имя файла после конвертации с изображения в pdf?

    Vindicar
    @Vindicar
    RTFM!
    Ну так почитай документацию на os.path. Найдёшь много интересных функций, например, splitext().

    А если использовать pathlib вместо древнего os.path, то можно найти метод Path.with_suffix().
    Ответ написан
    Комментировать
  • Почему не работает код пайтон для яндекс картинок?

    Vindicar
    @Vindicar
    RTFM!
    except:
                pass

    Бить по рукам за такое. Вот как раз поэтому: ты молча глотаешь возникающие исключения, и теперь не можешь понять, что именно идёт не так.

    Хотя бы выводи сведения об исключении в консоль.
    Ответ написан
    Комментировать
  • Как написать функцию со списком python?

    Vindicar
    @Vindicar
    RTFM!
    У тебя ошибка в логике.
    Ты проверяешь каждую возможную гласную, и если слово начинается с неё, ты выводишь "an".
    Но если слово НЕ начинается с этой гласной, ты выводишь "a", что ошибочно.
    Ведь тот факт, что слово не начинается с этой гласной, ещё не означает, что оно не начинается вообще с никакой гласной.
    Поэтому раздели две операции - проверка гласной, и вывод.
    Ну или научись пользоваться оператором in, как выше подсказал Dmitrii.
    Ответ написан
    Комментировать
  • Выполнить другую функцию если первая выполняется дольше 15 секунд?

    Vindicar
    @Vindicar
    RTFM!
    Тривиально. Что-то вроде
    async def notify_long_task():
        'Выполняет оповещение о длинной операции.'
        await asyncio.sleep(15.0)  # ждём таймаут
        await send_notification('Извините, я что-то туплю.')  # оповещаем
    
    async def actual_long_task():
        notification = asyncio.create_task(notify_long_task())  # планируем оповестить
        await perform_long_task()  # потенциально долгая операция
        notification.cancel()  # отменяем оповещение, если оно ещё не сработало.
    Ответ написан
    Комментировать
  • Задача с перестановкой спичек?

    Vindicar
    @Vindicar
    RTFM!
    Шаг 1. Опиши каждую цифру числа как бинарную строку, где каждому биту соответствует спичка в цифре. 1 - спичка есть, 0 - нет. Тебе понадобится 7 бит на цифру, можно округлить до 8 и считать 8й бит всегда 0. Это, по сути, семисегментный индикатор.
    Шаг 2. Научись преобразовывать число из нескольких цифр в длинную бинарную строку. Если гарантируется, что число 4значное или меньше, то эта строка будет выражена как 4 байтовое беззнаковое целое.
    Шаг 3. Если сделать XOR между двумя такими строками, то значение 1 примут только биты, соответствующие пропавшим/появившимся спичкам. Посчитать число единичных бит нетрудно.
    Шаг 4. Перебирай числа по возрастанию, для очередного числа построй битовую строку. Если число единичных бит в строках равно (для их "записи" используется равное число спичек), а число единичных бит в XOR равно четырём (две спички переложили = две спички пропали + две появились), число подходит.

    За скорость, правда, не ручаюсь. Но есть возможности по оптимизации подсчёта единичных бит, и по оптимизации перебора (перебирать не все числа, а только те, которые можно выразить тем же числом спичек).
    Ответ написан
  • Как присвоить переменной значение локальной переменной?

    Vindicar
    @Vindicar
    RTFM!
    Ты написал глупость. Вот этот код
    conn = sqlite3.connect('shop.db')
    cursor = conn.cursor()
    nazvanie_tovara = nazvanie
    cost_tovara = cost
    data = [nazvanie_tovara, cost_tovara]
    cursor.execute("INSERT INTO tovary VALUES(?, ?);", data)
    conn.commit()

    выполнится один раз, перед запуском бота, до срабатывания обработчиков.
    Что-то мне подсказывает, что ты не этого хотел.

    Внеси это внутрь обработчика команды, тогда и глобальная переменная не понадобится.
    Ответ написан