• Можно ли в месте файл указать ссылку?

    Vindicar
    @Vindicar
    RTFM!
    Можно было чуть-чуть погуглить примеры, и почитать код, там всё написано простым английским:
    async def recognize_song(
            self, data: Union[str, pathlib.Path, bytes, bytearray, AudioSegment]
        ) -> Dict[str, Any]:
            """
            Creating a song signature based on a file and searching for this signature in the shazam
            database.
                :param data: Path to song file or bytes
                :return: Dictionary with information about the found song
            """

    Т.е. data принимает или путь к файлу, или байты с содержимым файла.
    Поэтому ответ на твой вопрос: нужно самому скачать аудиофайл по ссылке, и скачанное содержимое отдать в recognize_song().
    Если у тебя ссылка на youtube, то либо используй пакет youtubedl, либо посмотри в примерах есть что-то на тему.
    Ответ написан
    Комментировать
  • Почему бот не отправяет мне значение после функции?

    Vindicar
    @Vindicar
    RTFM!
    if i1 == proverka_slova:
    Ты сравниваешь функцию со строкой. Что ты ожидал получить-то?
    Если тебе нужен текст сообщения, обращайся к свойствам объекта message (подозреваю, нужное свойство так и называется - text).
    Ответ написан
    4 комментария
  • OSError: exception: access violation reading, ctypes, Python, что делаю не так?

    Vindicar
    @Vindicar
    RTFM!
    a = c_char_p(f'{getcwd()}\\file.txt'.encode())
    b = c_char_p(b'Help me pls')

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

    Vindicar
    @Vindicar
    RTFM!
    t.join() дождётся завершения для одного потока t. Если нужно дождаться завершения всех трёх потоков, то можно сделать join() в цикле.
    Ответ написан
    Комментировать
  • Не знаю как сделать так чтобы скрипт обрабатывал сообщения которые приходят ко мне в ЛС, а не в группах?

    Vindicar
    @Vindicar
    RTFM!
    Если хочешь, чтобы бот видел сообщения, отправленные на твою учетку, нужно запускать бота не как бота, а как клиента от твоей учётки. Потенциально чревато баном, и я не знаю, какие библиотеки позволяют делать такой userbot.
    Ответ написан
  • Как сделать так, чтобы бот отправлял текст в таком формате который я ему отправляю?

    Vindicar
    @Vindicar
    RTFM!
    caption отдаёт только plaintext (без форматирования). Вроде как есть свойство-список caption_entities, содержащее сведения о форматировании.
    Либо попробуй указать это свойство при отправке сообщения, параметром entities = message.caption_entities, либо разбирай элементы этого списка, ищи форматирование, и вставляй его вручную (там указывается позиция в строке, где форматирование начинается/заканчивается).
    Ответ написан
    3 комментария
  • Как остановить бесконечный цикл?

    Vindicar
    @Vindicar
    RTFM!
    Последний input() должен быть вне веток if-elif-else, но внутри тела цикла.
    Ответ написан
    Комментировать
  • Как напечать треугольник в консоли?

    Vindicar
    @Vindicar
    RTFM!
    Подскажу идею: печатай по строкам. Тогда тебе нужно будет для каждой строки определить начало и конец.
    Также для упрощения задачи найди "среднюю" вершину треугольника по высоте, и разбей его на два по этой вершине. Если такой нет (т.е. одна из сторон прямоугольника горизонтальна) - задача упрощается.
    Пример

    # было
         *
        ***
       *****
      *******
     ****
    *

    # верхний полутреугольник
         *
        ***
       *****
      *******
    # нижний полутреугольник
     ****
    *

    Таким образом, ты можешь по координатам вершин вычислить шаг - через сколько строк надо уменьшить/увеличить координату начального и конечного столбца. А дальше простой цикл.
    ЕМНИП, так делают видеокарты, только с пикселями.
    Шаг имеет смысл оставить дробным, чтобы избежать проблем с накапливающейся ошибкой округления.
    Ответ написан
    Комментировать
  • Как циклом Python for пройти несколько (сотен) range?

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

    Vindicar
    @Vindicar
    RTFM!
    Template matching попробуй.
    Ответ написан
    Комментировать
  • Почему IDLE и командная строка не видят модуль keyboard?

    Vindicar
    @Vindicar
    RTFM!
    keyboard - это сторонний модуль. Ты его установил через pip?
    Ответ написан
  • Создание, сохранение, проверка ключей доступа?

    Vindicar
    @Vindicar
    RTFM!
    Ну если совсем извратиться, то:
    * зашифровать программу желаемым ключом
    * написать лоадер, который просит у пользователя пароль, загружает файлы основной программы в память, расшифровывает их введённым ключом и пытается запустить точку входа в основную программу.

    Тогда подглядеть ключ в лоадере не получится, как и оторвать сам лоадер. Разве что брутфорсить ключ, пытаясь найти такой ключ, который даст на выходе корректные питоновские скрипты.

    Примерный путь будет:
    1. Загрузить бинарные данные из файла как bytes
    2. Расшифровать в памяти, получив исходники
    3. Использовать exec()

    Альтернативно, вместо исходников можно шифровать байткод, но тогда придётся соображать, как превратить bytes в code object, который можно выполнить через exec(). Теоретически, может помочь marshal.

    Схема не 100% надёжная, разумеется.

    А вообще, какая у тебя задача? Может, pyarmor подойдёт?
    Ответ написан
  • Можно ли узнать какая корутина вызвала ошибку в asyncio.gather?

    Vindicar
    @Vindicar
    RTFM!
    Вообще-то gather() возвращает исключения и результаты в том же порядке, в котором переданы корутины. Всегда.
    Но ты сам себе выстрелил в ногу вот этим: *{f1(), f2()}
    Ты указал литерал множества, а это не упорядоченная коллекция. Так что в каком порядке были переданы корутины - хз.
    Положи их в кортеж или в список перед отдачей в gather(), и проблема уйдёт - элемент выходного списка с индексом i будет соответствовать корутине с индексом i в исходном кортеже/списке.
    Ответ написан
    Комментировать
  • Почему метод find_all из bs4 возвращает пустой список?

    Vindicar
    @Vindicar
    RTFM!
    А ты уверен, что то, что ты видишь в браузере - это то же, что получает на вход BS?
    Инста может либо детектить тебя как бота, и отдавать другую страницу, или просто использовать JS для динамической подгрузки контента, отдавая статически только "болванку". BS не выполняет JS код, так что болванка - это всё, что он увидит в таком случае.
    Скинь page.text в файл и посмотри, что там.
    Ответ написан
    Комментировать
  • Как получить название столбца sqlite?

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

    Если у тебя есть ситуация, когда многие сущности связаны со многими (например, отношение "друзья" между пользователями), используй связную таблицу для этого.
    Ответ написан
    2 комментария
  • Установление значений для маркеров в Matplotlib?

    Vindicar
    @Vindicar
    RTFM!
    Я бы использовал pyplot.text() или pyplot.annotate() (ну или соответствующие методы ax).
    Они позволяют указывать координаты текста в единицах данных (т.е. в координатных осях на твоём графике). А маркеры по умолчанию ставятся на каждую точку данных, так что привязать текст к тем же точкам что и маркеры будет тривиально - просто цикл по данным и вызов метода на каждую позицию.
    for xv, yv in zip(x, y):
        caption = f'{yv:.0f}'  # тут генеришь надпись так, как тебе надо
        ax.text(xv, yv, caption, ha='center', va='top')  # по умолчанию координаты задаются по данным
    Ответ написан
    Комментировать
  • Как из fetchall() сделать строку?

    Vindicar
    @Vindicar
    RTFM!
    Как, как... Каком кверху!
    Итерируешься по списку через for row in cursor:, распаковываешь кортеж через login, pass = row (ну или по индексу login = row[0]), дальше с переменными делаешь что нужно.
    Азы языка! Если ты их не знаешь, какого баклажана берёшься за БД?

    Кроме того, зачастую делать fetchall() и не требуется, можно перебрать строки по одной итерируясь прямо по курсору. Экономит память.
    Ответ написан
    Комментировать
  • Как остановить выполнение функции в тг боте?

    Vindicar
    @Vindicar
    RTFM!
    cards = trees() #ФУНКЦИЯ ПАРСИНГА
    Ну вот тут уже проблема. Ты в асинхронном боте делаешь длительный синхронный вызов.
    Перепиши свой парсер на асинхронный код, запусти его через asyncio.create_task() и сохрани полученный объект задачи в глобальную переменную (если у тебя может быть не более одного активного парсера).
    Для отмены проверь, что в глобальной переменной лежит не None, а искомый объект. Если так, то вызови у него метод cancel().
    Это спровоцирует исключение CancelledError в функции парсера, что позволит прервать её выполнение, но в то же время аккуратно отработать освобождению ресурсов и т.п.
    Ответ написан
    Комментировать
  • Как заменить/обновить данные в sqlite (Python)?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, следует различать сценарий "я знаю, что строка есть, её надо обновить" (UPDATE) и "строки может не быть, если так, её надо создать" (INSERT OR REPLACE или INSERT ON CONFLICT UPDATE). Уточни, какой у тебя.

    Во-вторых, приведи код создания таблицы. У тебя link - первичный ключ?
    Ответ написан
  • Как запустить асинхронную функцию внутри синхронной flask?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, проверка на вменяемость. Асинхронному боту для работы нужен рабочий цикл-реактор (event loop). Где и как ты его запускаешь, с учётом того, что Flask тоже требует рабочий цикл, а у тебя, вроде как, один поток?

    Я бы посоветовал использовать асинхронный веб-фреймворк. Например, доки на Flask упоминают Quart как максимально похожий, но изначально асинхронный фреймворк. Тебе всё ещё придётся разобраться, как параллельно запустить две длительные корутины (рабочий цикл Quart и рабочий цикл бота), но это уже решаемо. Вместо Quart можно использовать любой другой асинхронный веб-фреймворк.

    Альтернативно, можно запустить фласк и бота в разных потоках. Мешать асинхронность с многопоточностью - тоже та ещё идея, но если очень неохота уходить от Flask, то можно попробовать. Однако в этом случае нужно будет очень осторожно выполнять вызовы методов бота. В документации есть пример, как вызвать корутину в другом потоке ОС и дождаться ответа от неё.
    Ответ написан
    1 комментарий