Ещё в Windows XP нужно было ковырнуть пару политик в gpedit.msc, а в Vista/7 их стало ещё больше, а то случилось потом я не знаю. И серверную винду в домен включать никогда не пробовал, зачем её вообще вводить в домен? Если она есть, то домен имеет смысл поднять на ней же...
Есть много методов. Например, проверять Accept-Languages в запросах. Помнить куки/fingerprint, которые были до включения VPN. Проверять почту, с которой был зарегистрирован пользователь (если на сайте есть регистрация). В конце концов, может оказаться, что реально VPN не используется.
Как ни странно, в большинстве баз COUNT(*) на самом деле (вопреки распространённому заблуждению) работает так же, как COUNT(id) или COUNT(1), о чём я на просторах интернетов читал очень интересную статью.
pillow позволяет получить размер строки с заданным шрифтом, можно это использовать. Например, поделить строку по пробелам и набирать строки так, чтобы общий размер по горизонтали вписывался в блок. Или изменять размер шрифта по необходимости.
alex01s, если хостер блокирует исходящие соединения, то бессмысленно пытаться что-то запускать. Даже если бы там реально был браузер (который, скорее всего, за лимит времени php-скрипта даже не успеет запуститься).
Бесплатный хостинг вполне может запрещать и коннекты в интернет, и открытие файлов по ссылке. Правильно использовать функции libcurl, вот если и с ней не заработает, то ой.
Danzx, в этом коде callback_query_handler проверит сначала call.data.startswith('bts1'), то есть что call.data НАИНАЕТСЯ С bts1, а затем, если это выполнится, вызовет функцию-обработчик s1rt, где случится проверка call.data.startswith == "startzen". Очевидно, что работать это не будет, так как bts1 и startzen одновременно быть не могут. Но проблема даже не в этом.
Смотрим:
call - это экземляр объекта класса CallbackQuery;
call.data - это callback_data с исходной кнопки, объект класса str (строка, "string");
call.data.startswith - это метод (функция) класса str.
С функциями можно обращаться так:
имя_функции - просто передаёт ссылку на объект функции;
имя_функции(...) - вызывает функцию.
Поэтому call.data.startswith == "startzen" сравнивает ссылку на функцию со сторокой. Разумеется, всегда будет "не равно", даже если значение call.data начинается с bts1 (знаение startzen не пролезет в этот обработчик ещё раньше).
Вообще, лучше сначала подтянуть знания языка, порешать какие-нибудь более простые задачи. Человек может воспринимать язык интуитивно и понимать, что имелось в виду, даже если допускаются ошибки и опечатки, а бездушный интерпретатор Python так не может.
Alexander Kalinin, сейчас по всей стране у провайдеров (не у всех) стоят так называемые "ТСПУ", которые умеют только одно - быть дополнительным звеном отказа и фильтровать. И там могут резать что угодно без суда, следствия и внесения в реестр.