Задать вопрос
  • Как сделать голосовой ответ в голосовом помощнике на python?

    Vindicar
    @Vindicar
    RTFM!
    Окей, гугл, python text to speech.
    Ответ написан
    Комментировать
  • Как отправлять по очереди данные заказа по команде "Дальше" из БД Sqlite3?

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

    Технически это можно оформить таблицей БД с парами "id пользователя - число".
    Ответ написан
    1 комментарий
  • Почему присылает профиля всех хотя указанно where user_id?

    Vindicar
    @Vindicar
    RTFM!
    1. Потому что условие "WHERE {user_id}" будет истинным для любых ненулевых user_id. Тебе нужно условие WHERE id = {user_id} (предполагая, что колонка с id пользователя называется id).
    2. С поправкой на то, что это тебе на самом деле не нужно. НИКОГДА не создавай запросы через подстановку значения в строку, слишком легко ошибиться или поймать sql-инъекцию. Перепиши запрос на использование prepared statements.
    cursor.execute("SELECT money, biz, profitbiz, profitkaz, losemoneykaz, moneykaz FROM users WHERE id = ?", (user_id, ))
    Вместо каждого ? в запросе будет подставлен элемент из кортежа параметров. При этом движок сам позаботится о правильном экранировании.
    3. Переподключаться к БД каждый раз при вызове команды - плохая идея. Создай подключение при запуске бота и используй его. Максимум - создавай новый cursor для вызова команды.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы телеграм-бот отвечал уже вычисленным числом?

    Vindicar
    @Vindicar
    RTFM!
    1. Поставь обработчик "входящее сообщение".
    2. Прогони текст сообщения через float(), а для надёжности можно попробовать использовать locale.atof() - оно понимает региональное форматирование. Например, в США сумма "5,000.00" а у нас "5 000,00", причем и там и там могут написать просто "5000". Выцепить все варианты будет непросто, но atof() для начала сойдёт.
    3. Рассчитай проценты.
    4. Ответь на сообщение рассчитанной суммой процентов.

    Вот и всё. Если хочешь код - изволь предоставить то, что написал сам (и оформить кнопкой </>).
    Ответ написан
    5 комментариев
  • Как переключать язык через radibutton?

    Vindicar
    @Vindicar
    RTFM!
    Не получается по вполне очевидной причине.
    Как следует из названия, root.mainloop() входит в бесконечный цикл, и крутится там, пока окно не будет закрыто. Это считается завершением программы, и только тогда mainloop() возвращает управление.

    А нажатие кнопки у тебя тоже реализовано через бесконечный цикл. Разумеется, работать может только один из них.
    Я бы посоветовал почитать повнимательнее доки на keyboard, и выкинуть цикл while True и вызов keyboard.wait().
    Вместо этого, либо попробуй добавить обработчик через keyboard.add_hotkey(), либо попробуй запланировать вызов своей функции через root.after().
    Внутри этой функции используй keyboard.is_pressed(), чтобы узнать, нажата ли клавиша. Тут будет ещё пачка подводных камней - нужно будет повторно запланировать вызов этой же функции, нужно будет игнорировать нажатие клавиш, если перевод уже сделали (чтобы пока держишь клавиши, комп не переводил непрерывно), и т.п.
    Первый способ проще, но нужно проверить, сработает ли.
    Ответ написан
    1 комментарий
  • Как через код получить текст с консоли и вписать текст, который считывает консоль?

    Vindicar
    @Vindicar
    RTFM!
    Запустить в дочернем процессе, перехватить его стандартный ввод/вывод?
    Если же нужно внутри своего процесса, можно временно заменить sys.stdin на что-нибудь типа io.BytesIO или io.StringIO, заполненный заранее заготовленными данными. Если нужно перехватить stdout, то в модуле contextlib есть такая возможность.
    Ответ написан
    Комментировать
  • Как в существующий файл дописать текст в python?

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

    Проще сделать иначе: создать новый файл рядом со старым, прочитать построчно старый, записать изменённые строки в новый. А потом удалить старый и переименовать новый в старый.

    Насчёт последней части посмотри модуль os, в частности, os.unlink() и os.rename().
    Ответ написан
    Комментировать
  • Как определить атрибуты файла — не магические методы?

    Vindicar
    @Vindicar
    RTFM!
    vars(file), потом отсеять все ключи. начинающиеся с __.
    Но метод так себе, в этом файле можно любой код выполнить.
    Ответ написан
    Комментировать
  • Как подключиться к базе данных на другом сервере?

    Vindicar
    @Vindicar
    RTFM!
    Поищи по "SSH port forwarding". Вот хороший пример.
    Если коротко, есть три варианта. Локальный форвардинг означает "любой коннект на указанный порт на локальной машине должен пробрасываться на SSH сервер, а сервер должен пробрасывать его на указанный порт на указанном адресе".
    Удалённый форвардинг означает "любой коннект на указанный порт на SSH сервере должен пробрасываться на этот клиент, а клиент должен пробросить его на указанный порт на указанном адресе."
    Динамический форвардинг проще, но менее контролируемый. Он означает "клиент слушает указанный локальный порт и притворяется SOCKS-прокси. Любое соединение пробрасывается через SSH-сервер, который соединяется с целевым адресом по своему усмотрению."
    Любой форвардинг длится, пока длится SSH-сессия.
    Так что в твоём случае нужен локальный форвардинг. При этом поскольку сервер БД на одном хосте с сервером SSH, ssh-сервер должен пробрасывать соединения на localhost:порт сервера бд. А твоё ПО будет коннектиться на localhost твоей машины, и тот порт, который ты указал как локальный. Можешь для простоты задать его таким же, как порт сервера БД.
    Ответ написан
    Комментировать
  • Не могу перевести ид дискорд нейма в сам ник?

    Vindicar
    @Vindicar
    RTFM!
    Подумай головой и поучи питон на примерах попроще для начала.
    NoneType object has no attribute 'name' - у тебя None вместо объекта, а ты пытаешсья взять атрибут.
    А None у тебя, потому что get_user() тебе вернул None, а ты не проверяешь. Хотя в доках написано, что он может вернуть None.
    Ответ написан
    Комментировать
  • Как использовать переменную из другого файла?

    Vindicar
    @Vindicar
    RTFM!
    Простейший способ - передать словарь в конструктор.
    class voice(commands.Cog):
        #при создании кога передаёшь ему клиента и tdict
        def __init__(self, client, t_dict):
            self.client = client
            self.tdict = t_dict
    
        @commands.Cog.listener()
        async def on_voice_state_update(self, member, before, after):
            print(self.tdict)

    Имей ввиду, в случае с ссылочными объектами, т.е. словарями, списками и т.п., изменения объекта внутри кога изменит его глобально. А вот объекты-значения (числа, строки, кортежи) так изменить не получится.
    Ответ написан
  • Какие есть библиотеки для работы со временем и датой?

    Vindicar
    @Vindicar
    RTFM!
    Ну первое что нашлось. Вот этот кусок конкретно по датам.

    Natural is a Python library to easily transform data into human-readable formats such as dates, time differences, numbers and sizes.
    Features:
    Natural is not using any third-party libraries, so it runs from a bare Python installation
    Natural is fully internationalised and speaks your language
    Natural uses unicode strings where possible
    Natural is PEP8 compliant
    Natural has an extensive test suite
    Ответ написан
  • Как можно взаимодействовать с новым открывшемся браузерам в селение?

    Vindicar
    @Vindicar
    RTFM!
    Всплывающее окно? Посмотри в сторону .selectWindow() и .getAllWindowNames().
    Ответ написан
    Комментировать
  • Selenium как сохранить картинку в объект?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь, что делает from_bytes().
    Creates a copy of an image memory from pixel data in a buffer.
    In its simplest form, this function takes three arguments (mode, size, and unpacked pixel data).

    Оно требует массив значений пикселей, а не содержимое в файле графического формата.
    Используй Image.open(). К слову, open() принимает на вход не только путь к файлу, но и файлоподобный объект. Это открывает две возможности:
    1. Использовать класс io.BytesIO, чтобы хранить данные в памяти вместо временного файла.
    2. Скормить PIL ответ сервера, используя .raw вместо .content.
    Второй вариант предпочтительнее, так как не требует кэшировать в памяти всю картинку, но нужно проверить его работоспособность.
    Ответ написан
    4 комментария
  • Как найти самое похожее лицо из базы данных?

    Vindicar
    @Vindicar
    RTFM!
    Как насчёт многоярусной кластеризации? Т.е. разбиваете базу лиц на кластеры схожих, затем эти кластеры делите на под-кластеры, и так далее. В итоге строите дерево, где каждый ярус описывает некоторое разделение лиц на подгруппы (не обязательно смысловые типа мужское/женское). Начинаете с верхнего яруса, найдя наиболее схожий узел/кластер, производите повторный поиск, но уже по его непосредственным потомкам. И так, пока не сузите диапазон поиска до приемлемого, когда можно будет прогонять поиск по всем лицам в данном кластере.
    Параметры дерева (размер и число ярусов) придётся подбирать самостоятельно.

    Есть возможные модификации. Во-первых, можно превратить дерево в ориентированный граф, задав каждому узлу более одного "родителя". Это может уменьшить ошибку классификации.
    Во-вторых, можно попробовать обучить классификатор (например, SVM) так, чтобы он сообщал номер кластера, к которому скорее всего принадлежит это лицо, а затем искать внутри этого кластера.
    Ответ написан
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    Vindicar
    @Vindicar
    RTFM!
    А таблица уже существует в БД? Выведи-ка результат запроса к твоей БД:
    SELECT sql FROM sqlite_master WHERE name = 'users';
    Ответ написан
  • Как для тг бота сделать одновременно слушатель сообщений и выполнение чего-то в цикле?

    Vindicar
    @Vindicar
    RTFM!
    Советую почитать про основы работы асинхронных программ.

    Но если на пальцах, считай, что из bot.polling() программа не выйдет до своего завершения. Она там будет крутиться, ждать события, и дёргать обработчики.

    Поэтому всё, что ты хочешь научить бота делать, нужно делать
    • ИЛИ в рамках фреймворка (какого кстати? pyTelegramBotAPI? Он это не умеет)
    • ИЛИ в рамках отдельного потока, который запускать до вызова bot.polling()
    • ИЛИ вообще в рамках отдельного скрипта, который вызывать по крону.

    Если в рамках потока, нужно будет посмотреть, позволяет ли телебот вызывать методы из другого потока.
    Ответ написан
    2 комментария
  • Как сделать админ-панель бота для Discord?

    Vindicar
    @Vindicar
    RTFM!
    Если тебе нужна админ-панель в виде именно сайта - учи Flask, он не очень сложный.
    Грубо говоря, на входящий запрос - питоновская функция обработчик. Почти как в ботах.
    А вот чтобы сайт отправлял нужные запросы, когда открыт в браузере, нужно и HTML понимать. А если хочется красивостей, то и JS.
    Ответ написан
    Комментировать
  • Как написать функци для перевода в код Morse не используя списки, кортежи, словари?

    Vindicar
    @Vindicar
    RTFM!
    Длинная цепочка if-else?
    Ответ написан
    Комментировать
  • Каким образом можно собрать статистику доменов в файле?

    Vindicar
    @Vindicar
    RTFM!
    1. Модуль re
    2. collections.Counter
    Ответ написан
    Комментировать