• Почему он выдает interrupt exception, который не ловится?

    Vindicar
    @Vindicar
    RTFM!
    Потому что вызов thread.start() который внутри start_listen() - не блокирующий. Главный поток продолжит работу, выйдет из try-except и завершится, так что на момент возникновения KeyboardInterrupt он уже будет завершён. Твой поток не помечен как daemon, поэтому интерпретатор продолжит работу (был бы помечен - программа бы завершилась тут же).
    Если ты делаешь join() - то пока запущенный поток не закончится, главный не продолжит работу.

    Собственно, в текущем виде тебе поток вообще не нужен, у тебя главный поток ничего не делает и так, и так.
    Что ты пытаешься сделать?
    Ответ написан
    Комментировать
  • Как получить какой-нибудь хеш от значения переменной (dict)?

    Vindicar
    @Vindicar
    RTFM!
    Очевидно, надо в каждом словаре найти значение, которое уникально идентифицирует соединение.
    Я бы сказал, это пара IP:порт удаленного узла (с которым установлено соединение).
    Не уверен, будет ли эта информация в словаре, так как ты не озаботился привести пример, и как это будет работать с UDP (где формальных соединений нет), но попытаться можно.
    Ответ написан
  • Почему aiogram не выводит фото?

    Vindicar
    @Vindicar
    RTFM!
    В параметр photo клади экземпляр класса InputFile, содержащий путь к желаемому файлу.
    photo=aiogram.types.input_file.InputFile('lesmat/lit1.png')
    Ответ написан
    Комментировать
  • При команде `!mine` алмазы 0, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Рекомендую выучить язык, прежде чем писать ботов.
    Посмотри на свой код (выделено мной):

    elif user_data[5] == '<:939223290105454632:1164940159050059786>':
    ...
    elif user_data[5] == '<:939195860317773856:1164153649296048148>':
    ...
    elif user_data[5] == '<:939223290105454632:1164940159050059786>': # Добавлено условие для железной кирки
    ...

    У тебя уже есть условие для железной кирки. Оно отработает первым, и в дальнейшие ветки elif управление просто не перейдёт. Более простой пример, иллюстрирующий твою ошибку:
    x = 1
    
    if x == 0:
      print('Ноль!')
    elif x == 1:
      print('Один!')
    elif x == 2:
      print('Два!')
    elif x == 1:
      print('Раз!')

    Код выведет "Один!" а не "Раз!".
    Единственный способ добиться нужного поведения - исправить уже существующую ветку.
    x = 1
    
    if x == 0:
      print('Ноль!')
    elif x == 1:
      print('Раз!')
    elif x == 2:
      print('Два!')


    В коде вообще много спорных решений, но про них лучше отдельно поговорить.
    Ответ написан
    1 комментарий
  • Постоянно вылазит ошибка NoneType:None в чём дело?

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

    Vindicar
    @Vindicar
    RTFM!
    Импортируй файл MAIN до f().

    Вообще, если я верно понял ситуацию, у тебя циклическая зависимость.
    Это надо разруливать иначе.
    Например, пусть f() получает ссылку на f_from_main_file как параметр.
    Или, возможно, у тебя вообще неправильно распределены обязанности, и часть f_rom_main_file() на самом деле должна быть там же, где f().
    Ответ написан
  • Как автоматизировать подключение роутов?

    Vindicar
    @Vindicar
    RTFM!
    Можно сделать что-то в таком духе. Не супернадёжно, но сработает, пожалуй.
    from pathlib import Path
    import importlib
    import sys
    
    SCRIPT = Path(sys.argv[0]).parent.resolve()
    IMPORT_FROM = 'webhooks'
    for fpath in (SCRIPT / IMPORT_FROM).iterdir():
        # импортим .py файлы и подкаталоги c __init__.py внутри
        # игнорим __init__.py и подобное, а также файлы, начинающиеся с .
        if not fpath.stem.startswith('_') and not fpath.stem.startswith('.') and \
                ((fpath.suffix == '.py') or (fpath.is_dir() and (fpath / '__init__.py').is_file())):  
            try:
                # эквивалент import webhooks.имяфайла as module
                module = importlib.import_module(f'{IMPORT_FROM}.{fpath.stem}')
                dp.include_router(module.router)
            except Exception as err:
                print(err)  # журналируй ошибку
    Ответ написан
  • Как мониторить изменение файла?

    Vindicar
    @Vindicar
    RTFM!
    Читаем документацию:
    schedule(event_handler, path, recursive=False)
    Schedules watching a path and calls appropriate methods specified in the given event handler in response to file system events.
    Parameters:
    event_handler (watchdog.events.FileSystemEventHandler or a subclass) – An event handler instance that has appropriate event handling methods which will be called by the observer in response to file system events.
    path (str) – Directory path that will be monitored.
    recursive (bool) – True if events will be emitted for sub-directories traversed recursively; False otherwise.

    Returns:
    An ObservedWatch object instance representing a watch.

    Прямо говорится что должен быть путь к каталогу.
    Просто проверяй каталог файла, указав recursive=False, а в обработчике фильтруй по имени. Только имей ввиду, что имя может иметь другой вид. Например, если я мониторю "." (текущий каталог), то имя мне приходит вида ".\test.txt". Так что pathlib в помощь, чтобы вытащть из имени нужную часть.
    Ответ написан
  • Как обойти cloudflare про использовании requests?

    Vindicar
    @Vindicar
    RTFM!
    Смотря как организована защита. Если проверяются возможности браузера - то никак, разве что искать прокси, на который cloudflare агриться не будет... что маловероятно.
    Ответ написан
    Комментировать
  • Какие ограничения есть на ip адреса для SSH?

    Vindicar
    @Vindicar
    RTFM!
    Часть IPv4 адресов (точнее, целые подсети) зарезервирована для локальных сетей и подобных целей - т.н. приватные адреса (private subnets). Они не доступны "снаружи", из Интернета, а только если ты находишься в той же сети.
    Какие именно - гугл и википедия знают.

    А "скорее всего" - даже если IP адрес публичный, не значит, что этот адрес соответствует реальному узлу. А если соответствует, не факт, что на узле поднят SSH сервер.
    Ответ написан
    Комментировать
  • Проверка сообщений пользователей Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Код не имеет смысла.
    @dp.message_handler(text=['Найти группу'])
    async def group(message):

    Вы просите бота вызвать функцию group(), если он получит сообщение с текстом 'Найти группу' (точное совпадение).
    Поэтому message.text в рамках этого обработчика будет равен именно 'Найти группу' и более ничему - ни '6', ни '7'.
    Ответ написан
    Комментировать
  • Как преоброзовать фото в видео (moviepy)?

    Vindicar
    @Vindicar
    RTFM!
    ImageClip чтобы интерпретировать изображение как статичное видео.
    VideoFileClip чтобы загрузить видео.
    CompositeVideoClips чтобы наложить два или более клипов. Потом метод write_videofile(), чтобы сохранить результат.

    Научись работать с одним клипом и изображением. Потом оформи этот код в функцию вида
    def process_one(image_path, input_video_path, output_video_path) -> None:

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

    Дальше уже будет просто вопрос вызова этой функции с правильными именами файлов. Тут пригодится, скажем, стандартный модуль pathlib, в частности метод Path.glob().

    Десять минут работы с документацией, и всё можно найти.
    Ответ написан
    Комментировать
  • Как исправить ошибку с file.tell()?

    Vindicar
    @Vindicar
    RTFM!
    Ну раз проблема в цикле for, то вместо for line in data: делай цикл вручную, например так:
    while True:
        line = data.readline()
        if not line:
            break
        ...  # тут выполняем дальнейшие операции

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

    Vindicar
    @Vindicar
    RTFM!
    Программа доходит до строки print(mydoubler(11)). Чтобы напечать результат выполнения функции mydoubler, программа вызывает эту функцию с аргументом 11, для этого программа идёт к строке mydoubler = myfunc(2).

    Ну вот тут ты уже неправ. Программа не идёт назад по коду.

    Сначала отрабатывает оператор def, определяющий функцию myfunc. После этого в текущей области видимости программы появляется переменная myfunc, хранящая ссылку на объект-функцию.
    Затем отрабатывает строка mydoubler = myfunc(2). Происходит вызов функции myfunc, при этом ей передаётся объект-число 2 как параметр. Внутри локальной области видимости myfunc теперь есть имя a, ссылающееся на объект-число 2. В ходе выполнения создаётся лямбда-функция, которая ссылается на этот параметр.
    Лямбда функция возвращается из myfunc, myfunc завершает выполнение. Поскольку лямбда-функция продолжает существовать (мы её вернули), а она ссылается на объект-число 2, то этот объект тоже продолжает существовать.
    Возвращённая функция присваивается имени mydoubler в текущей области видимости. Это позволяет её продолжать существовать (её не собирает сборщик мусора), ну и позволяет её вызвать по этому имени.

    Если бы ты сделал ещё один вызов, скажем, mytripler = myfunc(3), это бы создало новую, отдельную лямбда-функцию, совершенно независимую от mydoubler, и ссылающуюся на объект-число 3.
    Ответ написан
    1 комментарий
  • Чем рисовать диаграммы, блок-схемы, конечные автоматы, регистры с мультиплексорами?

    Vindicar
    @Vindicar
    RTFM!
    Любой редактор, умеющий диаграмму состояний UML, подойдёт. Хоть diagrams.net (бывший draw.io).
    Ответ написан
    Комментировать
  • Как поставить временное ограничение на использование команд в ТГ боте на python?

    Vindicar
    @Vindicar
    RTFM!
    Сохранять время, когда команда должна перестать работать.
    При вызове команды проверять текущее время: если оно больше сохранённого, значит, не выполняем команду.
    Ответ написан
  • Как отправить несколько сообщений через один хэндлер в Telegram боте?

    Vindicar
    @Vindicar
    RTFM!
    Ну так сначала сформируй желаемый текст в переменной, а потом уже редактируй сообщение.
    Метод str.join() в помощь.
    Ответ написан
    Комментировать
  • У бота такая ошибка, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Почему ты вообще запускапешь файл .yml? Это же файл конфигурации в YAML формате, а не код на питоне.
    Ответ написан
    3 комментария
  • В чем может быть ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Указанная тобой библиотека использует другой плейсхолдер для указания значений параметров - не ? а %s.
    Смотри пример в документации.
    Ответ написан
    Комментировать