• Как использовать cfscrape асинхронно?

    Vindicar
    @Vindicar
    RTFM!
    loop.run_in_executor() чтобы запустить код в отдельном потоке, и обернуть этот поток в асинхронный таск.
    Ответ написан
  • Как работает код в python и почему разные значения?

    Vindicar
    @Vindicar
    RTFM!
    У тебя условие имеет вид: A and B or C, и вычисляется как (A and B) or C.
    Если C истина, то условие будет иметь вид (A and B) or True, что всегда даст истину, независимо от A and B.
    Полагаю, ты был уверен, что условие вычисляется как A and (B or C), но набор скобок у тебя этому порядку не соответствует.
    Ответ написан
    Комментировать
  • Почему telebot не отправляет фото?

    Vindicar
    @Vindicar
    RTFM!
    Ты задал относительный путь к файлу. Ты уверен, что он лежит в текущей рабочей директории?
    Текущая рабочая директория может, но не обязана совпадать с директорией скрипта.
    Тебе лучше вычислить полный путь к файлу, используя sys.argv[0], чтобы узнать путь к скрипту, и модуль pathlib для манипуляции путями.
    Ответ написан
    Комментировать
  • Как сделать полное выполнение условия if-elif Python?

    Vindicar
    @Vindicar
    RTFM!
    Не надо описывать один обработчик внутри другого.
    Это НИКОГДА не будет работать так, как ты этого ожидаешь.
    Ответ написан
  • При нажатие на кнопку в telebot ни сего не происходит, проблема и её решение?

    Vindicar
    @Vindicar
    RTFM!
    @bot.callback_query_handler(func = lambda callback: True)

    Ты говоришь боту "если пользователь нажал кнопку, вызови функцию ниже, и делай это для любых кнопок" (func = lambda callback: True). Но у тебя в коде ДВЕ функции-обработчика, и обе говорят, что их надо вызывать для любых кнопок. Бот в таком случае вызывает только одну из них.
    Измени func так, чтобы она проверяла, какая кнопка нажата. Например, если укажешь
    func = lambda callback: callback.data == 'register'
    , то только кнопка, отдающая строку "register", будет вызывать срабатывание этой функции.

    Если тебе удобнее сделать выбор внутри функции, то можно сделать так:
    func = lambda callback: callback.data in ('faq', 'register')
    , тогда функция ниже будет вызвана при нажатии любой из двух кнопок, и тебе нужно будет внутри функции выбрать один из двух вариантов.

    В любом случае, нельзя допускать, чтобы у двух и более обработчиков проверка подходила под одну и ту же кнопку.
    Ответ написан
    Комментировать
  • Почему не скачивается модуль discord?

    Vindicar
    @Vindicar
    RTFM!
    Какой питон стоит? 3.12 вроде как ещё не поддерживается.
    Ответ написан
  • Как мне исправить эту ошибку?

    Vindicar
    @Vindicar
    RTFM!
    translation=translator.translate(text, dest=lang)
    translated=translation.text

    Ошибка тут возникает? Тогда читай документацию на библиотеку, из которой добыт класс Translator, и находи в ней метод translate() и читай, что он возвращает. Судя по ошибке, он возвращает список каких-то объектов (варианты перевода?), так что твоя задача - разобраться, что это за объекты, и как с ними поступать: перебирать и выводить все, выводить N лучших, выбирать 1 лучший и выводить его, и т.д.
    Ответ написан
  • Как сделать, чтобы с каждым нажатием кнопки бот отнимал от 100 один, то есть писал: 99 98 97 96 95...?

    Vindicar
    @Vindicar
    RTFM!
    1. Читай правила сайта. Оформление кода кнопкой </> обязательно, иначе вопрос могут удалить.
    Не говоря уже о том, что сейчас твой код нечитаем.
    2. Вместо лирики в духе "АААААА СПОСИТЕ ПАМАГИТЕ" лучше бы уточнил, какую именно задачу ты решаешь. Тебе нужно, чтобы счётчик был общий у всех пользователей бота, или чтобы у каждого пользователя был свой счётчик? Если свой, то должен ли счётчик переживать перезапуск бота?

    В первом случае читай про глобальные переменные в питоне и ключевое слово global.

    Во втором случае тебе нужно хранить значения счётчика так, чтобы можно было различать пользователей. Например, в виде словаря "id пользователя - значение счётчика". Читай про словари, а также про глобальные переменные.

    В третьем случае тебе нужно разбираться, как работать с БД, но я бы посоветовал сначала подучить питон как таковой, без ботов.
    Ответ написан
    5 комментариев
  • Попытался перенести код на tkinter в формат ооп, до этого выводил всё корректно, сейчас же выводит только пустое окно, что делать?

    Vindicar
    @Vindicar
    RTFM!
    1. Оформи код. Кнопка </> в помощь. Сейчас нечитаемо.
    2. Включить голову и разобраться, как же работает графический интерфейс (потому что принципы одинаковые в любом языке практически). Ну и немножко подучить Питон на более простых примерах.

    root_changes_2.mainloop() запускает основной рабочий цикл. В нём программа получает сообщения от ОС о действиях пользователя и реагирует на них. Цикл прерывается, когда закрывается основное окно (ты хранишь ссылку на него в root_changes_2).
    Как следствие, программа будет стоять на этой строке, пока ты не закроешь окно, и ТОЛЬКО ПОТОМ перейдёт к объявлению класса Main_window.

    Это объявление, разумеется, ничего не даёт - ведь ты просто объявил класс, но не создал его экземпляр. А после объявления класса у тебя ничего нет, поэтому скрипт завершает работу.
    Я ФЗ что такое ttkbootstrap, поэтому покажу простой пример на голом tkinter.

    import tkinter as tk
    import tkinter.messagebox as tkmb
    
    class MainWindow(tk.Tk):
        """Главное окно программы наследуется от Tk. 
        Вспомогательные окна - от TopLevel.
        Составные элементы управления - от Frame."""
        
        def __init__(self):
            """Метод __init__() автоматически вызывается при создании нового экземпляра класса."""
            super().__init__()  # обязательно вызываем конструктор родительского класса!
            # при закрытии нашего окна вызовется метод __done()
            # если эта функциональность не нужна, можно убрать эту строку
            self.protocol('WM_DELETE_WINDOW', self.__done)  
            # пример создания элементов управления
            # имена, начинающиеся с __, не видны снаружи класса
            # мы присваиваем не просто переменным, а полям объекта. Эти поля будут видны в других методах.
            self.__entry = tk.Entry(self)  # поле ввода будет вложено непосредственно в наше окно
            self.__entry.pack(side=tk.TOP, fill=tk.X, expand=True)
            self.__btn = tk.Button(self, text='Нажми меня', command=self.__btn_pressed)  # кнопка и реакция на неё
            self.__btn.pack(side=tk.TOP)
        
        def __done(self):
            """Мы прописали вызов этого метода при закрытии окна. 
            Тут мы можем корректно завершить работу нашей программы, а потом подтвердить закрытие."""
            self.destroy()  # подтверждаем закрытие. Если этот вызов не сделать, окно не закроется. Иногда это нужно.
        
        def __btn_pressed(self):
            """Реакция на кнопку."""
            text = self.__entry.get()  # мы можем обращаться к полям объекта
            tkmb.showinfo(
                title='Вы ввели',
                message=text,
                parent=self
            )
    
    
    if __name__ == '__main__':  
        # это условие выполнится, только если скрипт запущен непосредственно
        # оно не выполнится, если скрипт импортируется другим скриптом
        # поэтому в такое условие обычно заворачивают "тело" скрипта
        wnd = MainWindow()  # создаём окно
        wnd.mainloop()  # главный рабочий цикл
        # сюда управление будет передано после закрытия окна
        print('Окно закрыто, пока!')
    Ответ написан
  • Как закинуть пользователя на сервер дискорда?

    Vindicar
    @Vindicar
    RTFM!
    Используй нормальные дискордовские инвайт-ссылки. Другого варианта нет, иначе спамеры бы засовывали свои серверы всем подряд.
    Ответ написан
    Комментировать
  • Как сохранить полное форматирование текста при его копировании?

    Vindicar
    @Vindicar
    RTFM!
    Как насчёт вместо message.text посмотреть в message.text_markdown или message.text_html (доки)? Ну и соответственно указать не text, а markdown или html при вызове send_message().
    Ответ написан
    4 комментария
  • Как запустить плагин на Python через консоль?

    Vindicar
    @Vindicar
    RTFM!
    В комментариях тебе совершенно правильно написали - сначала гугл, потом вопросы.
    Так что окей, гугл, python в exe. На первой же странице выдачи достаточно информации, чтобы начать.

    А я добавлю:
    Если запускать через cmd не работает

    Как именно не работает? Виснет? Ничего не происходит? Синий экран? Комп встаёт со стола и уходит искать Сару Коннор? На будущее, чем точнее и подробнее ты опишешь проблему, а также предпринятые тобой попытки её решить - тем больше шансов получить ответ.
    Ответ написан
    1 комментарий
  • Почему асинхронный телебот увеличивает кол-во потоков?

    Vindicar
    @Vindicar
    RTFM!
    while True:
                print(1)
                await asyncio.sleep(1)

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

    Vindicar
    @Vindicar
    RTFM!
    Циклический импорт, вызванный глобальными переменными.
    Вместо того, чтобы использовать глобальные переменные, вынеси код в функции, и передавай им нужные объекты явно. Тогда модулю, содержащему функции, не нужно будет импортировать модуль, содержащий переменные. А там, глядишь, дойдёшь и до классов.
    Ответ написан
    Комментировать
  • Как получить описание устройства в системе через python?

    Vindicar
    @Vindicar
    RTFM!
    Я бы поискал в реестре, в ветке
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{4d36e978-e325-11ce-bfc1-08002be10318}
    . Во вложенных ветках будет свойство DeviceInstance, собираешь значения этого свойства. Затем заглядываешь в
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\сюда вставляешь значение DeviceInstance\Device Parameters
    , там можно найти имя порта и еще кое-что полезное.

    Модуль winreg под виндой идёт из коробки.
    Ответ написан
    Комментировать
  • Почему не удается распознать лицо из базы данный с веб-камеры?

    Vindicar
    @Vindicar
    RTFM!
    1. Как у тебя устроена "база данных" лиц? Ты указываешь относительный путь к ней - ты уверен, что программа корректно этот путь обрабатывает? Будет ли лучше работать, если указать абсолютный путь к каталогу с эталонными фото?
    2. Насколько качественное изображение идёт с вебки? Если лицо занимает три с половиной пикселя, никакая сеть не справится. По-хорошему тебе стоило поэкспериментировать, постепенно уменьшая размер входных изображений и фиксируя процент ошибок. Это дало бы ответ на вопрос "насколько крупным должно быть лицо, чтобы его уверенно распознавало".
    Ответ написан
  • Как зная IP и порт проверить в сети устройства или нет через Python?

    Vindicar
    @Vindicar
    RTFM!
    Если программа, работу которой ты проверяешь, использует протокол на базе TCP (скажем, HTTP), ты можешь попробовать установить TCP-соединение на эту пару адрес:порт, не отправляя никаких данных. Уже можно будет понять, установилось соединение или было отвергнуто.

    Если это не разовая задача, а периодическая, я советую использовать нормальные системы мониторинга. Хотя бы monit, чтобы не возиться с zabbix. Обе умеют проверять подобное.

    Правда, всё выше сказанное верно только для заранее известных IP-адресов. Если у тебя ситуация в духе "где-то в подсети 192.168.69.0/24", то дело усложняется.
    Ответ написан
    3 комментария
  • Как подключить сервер?

    Vindicar
    @Vindicar
    RTFM!
    Я заметил, что ты настроил доступ по ODBC, а коннектишься используя драйвер, который называется просто SQL Server. Я не уверен, что это одно и то же.
    В майковских доках в строке соединения используется другой драйвер, ODBC Driver 18 for SQL Server.
    server = 'Serv'
    database = 'resource'
    username = ''
    password = ''
    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}'
    cnxn = pyodbc.connect(connectionString)

    Напоминаю, {{двойные фигурные скобки}} в f строках просто превращаются в одинарные, а вот одинарные обеспечивают подстановку переменных.
    Ответ написан
  • Как нарисовать круг в turtele, чтобы он удалялся и заново рисовался до бесконечности?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужно, чтобы круг рисовался медленно? Вызывай circle() несколько раз, с задержкой и с параметром extent. Этот параметр задаёт угол дуги в градусах, которую нужно нарисовать. Если задать 360 или не задать вообще, нарисует окружность целиком, если задать 180 - нарисует пол-окружности, и так далее. А значит, можно легко нарисовать окружность из N сегментов:
    N = 18
    R = 200
    for _ in range(N):
        turtle.circle(R, 360 / N)
        time.sleep(0.1)

    Чтобы стереть, смени цвет рисования на цвет фона, скажем так: turtle.pencolor("white").
    После этого нарисуй ещё один круг в той же позиции.
    Ответ написан
    Комментировать