Emince, да, он срабатывает по два раза.
Поэтому нужен свой таймаут на реакцию. Т.е. если обработчик последний раз срабатывал менее чем N секунд назад, просто игнорируем это срабатывание, иначе делаем дело и запоминаем новое последнее время.
Это позволит также избежать спама при слишком частом сохранении файла. Ну мало ли что другая программа с этим файлом делает...
Emince, может, скрипт реагирует на разные события. Я бы сделал так: pathlib.Path(event.src_path).name == 'file.txt'
И добавил бы таймаут на обновления.
Зависит от роутера.
Но если я верно помню, начальный/конечный открывают ДИАПАЗОН портов. Просто укажи одно и то же значение для них.
Тебе нужно указать внешний порт, на который будет стучаться клиент, внутренний IP и внутренний порт, которые будет слушать сервер. Удалённый IP вроде не надо указывать.
ArtyomMedved, и смотреть не стану. Ролики лучше вообще сразу выкинуть. Даже если они написаны без явных ошибок (а-ля "исправил за кадром, рассказать забыл"), зачастую рекомендации по построению программы там те ещё. А даже если норм, ролик может использовать устаревший вариант библиотеки, где что-то поменялось (привет, aiogram). Документацию обновляют хотя бы, а ролик записал, просмотры набил, и забыл.
Лучший источник - найти официальные примеры кода от создателей библиотеки и постепенно адаптировать их под свои нужды, пока не освоишься с используемыми инструментами. После этого можно попробовать переписать код с нуля. Если не получается - лезь в документацию (опять привет, aiogram). Если документация невнятная - поищи по stackoverflow, только обязательно проверяй год ответа. Лучше не старше пары лет.
И только если и это не поможет, тогда начинай спрашивать сам.
А если по теме: если файл db.py - часть твоего проекта, то проблема - внутри него. А ты его содержимого не привёл.
Jnex8dje, взять и сохранить. Какое хранилище использовать - зависит от задачи.
Если кулдаун команды один на всех (т.е. неважно кто её вызвал последним) - сойдёт одна переменная.
Если нужен свой кулдаун для каждого пользователя - значит, что-то типа словаря {id пользователя: время активации}.
Если нужно, чтобы это ещё и сохранялось при перезапуске бота - значит, нужно персистентное хранилище типа простой БД.
ganstar565, у тебя, возможно, не установлен пакет python3.11-dev (ну или какая тебе нужна версия питона). Кроме того, может пригодиться portaudio19-dev.