Задать вопрос
  • Как узнать, является ли пользователь подписчиком канала в telegram?

    shurshur
    @shurshur
    HobbytF, ну вот проверка "является ли юзер подпсчиком" делается не для кого-то там, а для конкретного пользователя, у которого в момент проверки доступа id известен. Например, условием получения доступа к функционалу бота может быть подписка на канал, тогда если юзер пишет сообщение боту, мы берём message.user.id и проверяем, что этот юзер присутствует на канале.
  • Как сделать объединение двух сетей, две сети со своим белым IP?

    shurshur
    @shurshur
    praiden, в pointopoint-туннеле два IP-адреса: один адрес одного конца туннеля, другой - другого. Один адрес внешнего сервера, другой домашнего. На такой адрес можно даже по ssh ходить, например, но только с одного сервера на другой.
  • Зачем Telegram Bot Raw присылает json в чат группы?

    shurshur
    @shurshur
    А зачем туда вообще добавлен этот бот?
  • Как отрендерить локальный html файл?

    shurshur
    @shurshur
    Gnifajio None, если нужно прям чтоб js обновил DOM, то это точно не поможет. В моём случае я выдирал кусок c __NUXT__=многоэтажный js-код, который нельзя было распарсить как json, и с помощью js2py получал питоновую структуру, идентичную оригинальной js.

    Чтоб прям рендерить - это к Selenium. Но чаще всего при парсинге лучше узконаправленные решения применять: понять, что там происходит, и сделать явным образом нужные запросы. Например, если там загружается шаблон страницы без данных, а потом js загружает через API данные и подклеивает их в структуры шаблона, то можно просто выявить адрес API и его параметры и спросить всё напрямую.
  • Как отрендерить локальный html файл?

    shurshur
    @shurshur
    Мне некоторое время назад понадобилось достать данные из сайта, написанного на nuxt.js. Помогло использовать js2py. У меня вообще замороченная история была, сайт погиб из-за конфликта владельцев, поэтому я упражнялся с вебархивом и кэшом гугла...

    # основная функция, которая парсит файлы
    # если имя начинается на websites, то это вебархив, из пути берётся archive_timestamp и code
    # если имя начинается на webc, то это кэш гуглопоиска, и параметры берутся из шапки страницы
    def parse_release(fn):
        with open(fn, "r") as f:
            pg = f.read()
    
        assert pg != ""
    
        tree = htmlparse(pg)
    
        if fn.startswith("websites/"):
            archive_source = "webarchive"
            archive_timestamp = int(fn.split("/")[2])
            code = fn.split("/")[4]
        else:
            archive_source = "googlewebcache"
            archive_timestamp = -1
            m = re.search("снимок страницы по состоянию на (.+?)\.</span>", pg)
            if m:
                archive_timestamp = timestr2timestamp(m.group(1))
            code = tree.find("base").get("href").split("/")[4]
    
        # находим __NUXT__ на странице
        nuxt_js = None
        for s in tree.find_all("script"):
            s_text = s.get_text()
            if s_text.find("__NUXT__") > -1:
                nuxt_js = s_text
                break
    
        # если не нашли - ёк!
        if not nuxt_js:
            print (f"ERROR! No nuxt data in {fn}!")
            assert nuxt_js
    
        # выполняем js-код
        nuxt_raw = js2py.eval_js(nuxt_js)
        ...
  • Как мне сделать чтобы бот записывал, то что введет участник в переменную в модальном окне?

    shurshur
    @shurshur
    Кирилл, это так и делается: читаешь учебник, документацию, уроки - получаешь знания и компетенции - пробуешь на практике - набиваешь шишки - чего не удалось решить уже спрашиваешь в интернете. А чтоб за тебя сделали - это нанять на фрилансе кого-нибудь за деньги.

    В данном же случае речь об элементарных азах. Если азы непонятны, то бессмысленно писать ботов.
  • MX, connection failed при настройке почтового сервера на Plesk. Что делать?

    shurshur
    @shurshur
    AUser0, бывает ещё smtps на 465 порту (правда, аналог 587 а не 25).
  • Как пройти hcaptha?

    shurshur
    @shurshur
    Мы здесь очень плохо относимся к спамерам и не горим желанием им помогать.
  • Как принимать сообщения с вотсапп?

    shurshur
    @shurshur
    drqqv, пример серого апи в соседнем ответе. Только не надо верить что он его "использует", это разработчик этого сервиса и он попросту рекламится :)
  • Как сделать объединение двух сетей, две сети со своим белым IP?

    shurshur
    @shurshur
    praiden, да (если ens3 это интерфейс, которым сервак смотрит в интернет).
  • Как убрать водяной знак с помощью PHP?

    shurshur
    @shurshur
    Если это именно "водяной знак" (просто белёсая маска поверх видео или изменение яркости), то шансы неплохи. Если наложение картинки с перекрытием оригинала - то нет.

    Против простых логотипов по-моему в ffmpeg/mencoder/vlc даже когда-то был специальный фильтр, который мне в том моём случае, кстати, не помог.
  • Как сделать объединение двух сетей, две сети со своим белым IP?

    shurshur
    @shurshur
    praiden, в значении параметра -o указывается интерфейс, а не IP. В принципе, в данном случае можно опустить - всё равно в POSTROUTING другой трафик не попадёт...
  • Как мне сделать чтобы бот записывал, то что введет участник в переменную в модальном окне?

    shurshur
    @shurshur
    Кирилл, смотреть в документации или в тысячах пояснительных бригад синтаксис конструкций INSERT и UPDATE.
  • Передача запроса через API: как скрыть информацию об отправителе?

    shurshur
    @shurshur
    Airtone, для сервисов нет никакого сайта. Они видят, как с некоего IP приходят запросы. На этом IP может даже и сайта никакого не быть.

    И дальше уже вопрос, соотнесут ли эти запросы с Россией. Если IP относится к AS, владелец которой имеет прямое отношение к России (в whois указана страна RU, в базах типа GeoIP адреса числятся за Россией), то совершенно неважно, где физически находится сервер.

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

    shurshur
    @shurshur
    Wolf_Yout, крупных музыкальных ботов банят регулярно, потому что они тянут музыку откуда попало (чаще всего с ютуба) без каких-либо моральных колебаний насчёт соблюдения лицензионных требований. Поэтому то, что они регулярно ломаются, не должно особо удивлять.

    Ну а так, вероятно, опять чего-то ютуб подкрутил и youtube_dl перестал справляться с доставанием музыки.
  • Как мне сделать чтобы бот записывал, то что введет участник в переменную в модальном окне?

    shurshur
    @shurshur
    Кирилл, в коде в тексте вопроса я вижу некую переменную name. Я так понимаю, её и хочется записывать?

    В sqlite да, можно, это простейшая база данных, которая не требует установки, просто данные хранятся в файле на диске. Для несложных применений сойдёт, а если боту потребуется рост и развитие, то можно будет переделать на более зрелую базу.
  • Передача запроса через API: как скрыть информацию об отправителе?

    shurshur
    @shurshur
    Airtone, где размещён "модуль" - неважно. Важно, с какого IP приходят запросы. Ну, естественно, не надо светить реальный IP в X-Fordwarded-For. И в rDNS не надо совершенно случайно (тм) оставлять домен .ru.

    Максимально параноидальный сценарий - это если нейросеть начнёт вычислять тех, кто оставляет запросы только на русском языке. Но тут уже не поможет ничего.

    Платные прокси вряд ли помогут, тем более если коммерческий аккаунт начинает ходить через рандомные прокси и тем более в разных странах - это уже подозрительно. А ходить по API из сети хостера - это более чем нормально. Как бы API и предполагает работу сервисов, где-то там хостящихся.
  • Передача запроса через API: как скрыть информацию об отправителе?

    shurshur
    @shurshur
    Просто обеспечить запросы с нероссийского IP. Для чего запросы делать с зарубежного сервака. Можно просто прокси там на дешёвой виртуалке поднять.
  • Как сделать объединение двух сетей, две сети со своим белым IP?

    shurshur
    @shurshur
    praiden, тогда на домашнем сервере поднимаем VPN. Делаем статический роут мимо VPN до внешнего сервера, чтобы при поднятии VPN он не начинал пускать трафик VPN внутрь VPN:

    ip route add IP_ВНЕШНЕГО_СЕРВЕРА via IP_ДОМАШНЕГО_РОУТЕРА


    Затем убираем роутинг по умолчанию через домашний роутер и поднимаем через VPN:

    ip route del default via IP_ДОМАШНЕГО_РОУТЕРА
    ip route add default dev ИНТЕРФЕЙС_VPN
    # или так:
    #ip route add default via IP_ВНЕШНЕГО_СЕРВЕРА_ВНУТРИ_VPN


    После этого весь трафик сервера будет идти в интернет через VPN. Можно с помощью tracepath убедиться.

    Это, конечно, работает до перезагрузки или перезапуска VPN. Надо отдельно обеспечить, чтобы всё это поднималось автоматически. В некоторых VPN можно маршруты задавать прям в конфиге. Например, в openvpn есть ключ route конфига, который позволяет это сделать. Можно сделать отдельный скрипт, который всё настраивает, и как-то запускать его при поднятии VPN (например, в openvpn для этого тоже есть специальная инструкция).

    После обустройства домашнего сервера перейдём к внешнему.

    Там надо настроить SNAT/DNAT через iptables. На входе пакеты на нужные порты должны получать изменение IP получателя, чтобы они летели в VPN (DNAT - Destination NAT), а на выходе сервер должен подменять адрес отправителя на свой, чтобы пакеты летели от имени сервера (SNAT - Source NAT).

    # снаружи прилетает пакет - заменяем ему получателя на домашний сервер
    iptables -t nat -A PREROUTING -p tcp --dport 12345 -d ВНЕШНИЙ_IP_СЕРВЕРА -j DNAT --to IP_ДОМАШНЕГО_ВНУТРИ_VPN:12345
    # от домашнего сервера прилетает пакет - в конце маршрутизации меняем ему IP источника,
    # чтобы казалось, что его отправил внешний сервер
    iptables -t nat -A POSTROUTING -s IP_ДОМАШНЕГО_ВНУТРИ_VPN -o ВНЕШНИЙ_ИНТЕРФЕЙС_СЕРВЕРА -j SNAT --to ВНЕШНИЙ_IP_СЕРВЕРА


    Также надо разрешить форвард пакетов (по умолчанию выключен): в файл /etc/sysctl.conf добавляем

    net.ipv4.ip_forward=1

    Затем вызываем sysctl -p, чтобы применить без перезагрузки.

    Настройки iptables могут быть плохо совместимы с сторонними средствами управления iptables, в частности, с всякими firewalld/ufw, так что их надо будет отключить, ну или адаптировать под них приведённые примеры правил.