• Как создать пост в Whatsapp с последовательным чередованием изображение\текст?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак. Контент в WhatsApp - это либо текст, либо изображение или несколько (возможно, с сопроводительным текстом), а не текст с картинками в качестве сопровождения. Так что только отправлять несколько сообщений по очереди.
    Ответ написан
    Комментировать
  • Почему сумма ряда Тейлора не верна?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Формула Тейлора имеет смысл лишь в небольшой окрестности рассматриваемой точки, и чем меньше окрестность, тем выше точность величины, которая рождает формула. Естественно, x=20 находится в очень даже большой, просто огромной окрестности точки x=0, в которой было взято разложение исходного квадратного косинуса.

    Можно улучшить точность, если перевести аргумент в интервал периодичности значения (0,2pi), затем в (0,pi) с учётом знака, затем в (0,pi/2) с учётом симметрии относительно pi/2, затем в (0,pi/4) с заменой синуса на косинус, если аргумент превышает pi/4. Это уже будет намного лучше, но если аргумент заметно отличается от нуля, то точность просядет очень быстро.
    Ответ написан
    Комментировать
  • Как ботом подписаться на канал?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Боты не могут подписываться на каналы, их может добавлять в список подписчиков канала только владелец/админ канала. На каналы могут подписываться только живые пользователи. Соответственно, придётся пересмотреть концепцию. Например, объяснить пользователю в картинках, как ему добавить бота в канал вручную. Или, в конце концов, вместо бота использовать юзербота.
    Ответ написан
    Комментировать
  • Какой протокол лучше выбрать для шифрованного обмена файлами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Универсальный шифрованный канал для любых задач легко обеспечивается любым VPN с шифрованием. Можно openvpn/wireguard/ipsec или что ещё душе угодно. Как вариант, можно использовать stunnel для превращения нешифрованного tcp-соединения в шифрованное, это для некоторых задач может быть проще.

    Для синхронизации удобно использовать rsync (поверх ssh, то есть он сразу шифрованный).

    Готовые решения постоянной синхронизации: lsyncd (обёртка над rsync, синхронизирует в одну сторону; важно ни в коем-случае не запускать два экземпляра в обе стороны, так как риск синхронизации не в ту сторону крайне высок!), https://github.com/stephenh/mirror (неплохо работает и умеет синхронизировать в обе стороны, но в моих экспериментах всё же случались синхронизации не в ту сторону, хоть и очень редко), syncthing (тоже умеет в обе стороны, не тестировал). Но в целом можно просто запускать rsync по планировщику.
    Ответ написан
    Комментировать
  • Как исправить эту ошибку docker-compose?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Идём сюда: archive.ubuntu.com/ubuntu/dists и видим, что там нет релиза hirsute. Зато он есть тут: https://old-releases.ubuntu.com/ubuntu/dists/ , так что меняем archive.ubuntu.com на old-releases.ubuntu.com. Ещё лучше, конечно, обновить Dockerfile на более новую версию убунты, но может потребоваться разобраться в разных нюансах (какой-нить пакет иначе называется, какие-то конфиги в другом месте лежат и всякое такое).
    Ответ написан
    4 комментария
  • Как перебрать всех пользователей, и узнать создателя беседы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Telegram Bot API не предоставляет возможности получить список участников чата. Это можно сделать только с помощью клиентского API (его реализует, например, библиотека telethon).

    Однако если id пользователя известен (можно, например, отслеживать ботом сообщения о вступлениях в чат, запоминая всех, кто вошёл в чат после бота), можно проверить его роль в чате с помощь метода get_chat_member. Но основатель чата, очевидно, будет в нём всегда самым первым пользователем до любого бота.
    Ответ написан
    Комментировать
  • Как сделать единую точку входа в nginx через auth_basic?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, http auth помнит авторизацию только для конкретного сайта/домена. Придётся перейти на общий домен, смириться с двумя авторизациями или отказаться от http auth вообще. К слову, её в интернетах вообще используют исчезающе редко, так как она сильно неудобна для пользователя не только по причине отсутствия кроссдоменности.
    Ответ написан
    7 комментариев
  • Как сгруппировать ip по /24?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ошибка в том, что не надо в процессе итерации по списку удалять из него элементы. Результат может быть непредсказуем.

    И вообще, код какой-то безумный. Задачу можно решить в один цикл, примерно так:

    mask_dict = {}
    
    for i in test:
        mask = IPv4Network('{}/24'.format(i), strict = False)
        if mask in mask_dict:
            mask_dict[mask].append(i)
        else: 
            mask_dict[mask] = [i]
    Ответ написан
    2 комментария
  • Как настроить передачу с формы на заказчика т.г?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Токен не даёт полного доступа к аккаунту, только возможность отправлять/принимать сообщения от имени бота. Так что это вполне нормально передавать токен бота для интеграции. В конце концов, владелец бота может через BotFather поменять токен и тем самым быстро отключить ранее выданный.
    Ответ написан
    3 комментария
  • Как сделать телеграмм бота, который когда его отметили дает выбор какое отправить аудио?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это не "отметили", а так называемый inline mode. Нужно включить этот режим в настройках бота, а затем в коде реализовать обработчик inline_handler. Примерно так:

    @bot.inline_handler(lambda query: len(query.query) > 0)
    def query_text(inline_query):
        keyboard = []
        for code in ['foo', 'bar']:
            keyboard.append(telebot.types.InlineQueryResultArticle(code, f'>>> {code} <<<', telebot.types.InputTextMessageContent(f'<<<{code}>>>')))
        bot.answer_inline_query(inline_query.id, keyboard, is_personal=True)


    Важно понимать, что inline mode - это не полноценное средство интеракции с ботом, а помощник в написании сообщения от пользователя. В частности, результаты inline query кэшируются на серверах Телеграма, так что если поступит такой же запрос, что и минуту назад, то Телеграм даже не сделает запроса к боту. Также в этом режиме не раскрывается информация о чате, в который будет отправлено сообщение, и даже больше того, пользователь может в итоге отказаться от отправки сообщения вообще, но бот об этом не узнает.

    ЗЫ
    Мне в одном боте пришлось из-за этого реализовать концепцию inline policy: в зависимости от настроек чата бот может игнорировать или даже удалять сообщения, оставленные пользователями с помощью inline mode ботов из чёрного списка.
    Ответ написан
    Комментировать
  • Есть ли payload в телеграм кнопках?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для обычных (не inline) кнопок текст на кнопке означает обычный текст, передаваемый боту при нажатии на кнопку. Никакого другого способа определить нажатую кнопку нет.
    Ответ написан
    Комментировать
  • Как получить id?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, средствами Bot API это невозможно. Тем более что у пользователя может вообще не быть username.

    Конечно, его можно получить в событии от пользователя в поле Update.from.id, но для этого пользователь должен сделать какое-то действие в сторону бота (или, например, в сторону группы, в которой он состоит).
    Ответ написан
    Комментировать
  • Сколько всего ip адресов в глобальном интернете?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если ipconfig показывает адрес с префиксом fe80::, то это Link Local address, аналог 169.254.* в IPv4, такие адреса в Internet не маршрутизируются.
    Ответ написан
    Комментировать
  • Как узнать количество уникальных результатов random.shuffle?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Число перестановок списка длины n - это n! (факториал: n!=1*2*3*...*n). Это основы комбинаторики.

    Так что если надо просто число различных вариантов, то:

    math.factorial(len(our_list))
    Ответ написан
    Комментировать
  • Что за папка /root/mdb103/?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сделай из под root

    lsof -n | grep root/mdb103

    при запущенной mariadb. Если найдёт запущенные процессы mariadb, использующие файлы в этом каталоге, значит да, файлы там нужны.

    В каталоге лежат deb-пакеты, они после установки не нужны. В подкаталоге лежат исходники сервера скомпилированные. В зависимости от того, как они установлены, они могут быть также не нужны. Если их ставили через make install без префикса в /root, то сервер должен, скорее всего, стоять в /usr/local. Если через сборку пакетов с помощью debian/rules (при этом готовые пакеты кладутся в вышестоящий каталог, что весьма логично), то тоже не нужны - они должны быть затем установлены в систему.

    В конце концов, необязательно файлы сразу удалять. Можно попробовать переименовать этот каталог, перезагрузить базу или даже весь сервер и убедиться, что всё работает.
    Ответ написан
    1 комментарий
  • Где взять бесплатную музыку для коммерческого использования?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, можно посмотреть на проекты Кевина Маклауда:
    https://incompetech.com/ требует только упоминания автора
    https://freepd.com/ музыка, перешедшая в общественное достояние (public domain)

    А вообще искать музыку royalty free, под public domain или под лицензиями Creative Commons (внимательно смотреть на конкретный тип, некоторые разрешают коммерческое использование, а некоторые нет).
    Ответ написан
    Комментировать
  • Как реализовать Mutual TLS?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала немного теории.

    CA - Certificate Authority - доверенный удостоверящий центр, который подписывает сертификаты.
    У каждой стороны есть секретный ключ, который она никому не показывает, и публичный ключ, он же сертификат. Чтобы подтвердить, что сертификат принадлежит обеим сторонам, эти сертификаты должны иметь подпись доверенного лица, в данном случае CA.

    Обычно мы привыкли, что в SSL только серверная сторона доказывает свою подлинность. Идея mTLS в том, что обе стороны должны предоставить свой публичный сертификат, подписанный CA. Тогда если сервер доверяет CA, он будет доверять и клиентскому сертификату.

    Но публичный ключ не имеет смысла без приватного. А в куске кода в вопросе он вообще не встречается.

    Итак, что нам нужно для установления сессии?

    1. Сертификат CA - kbs_ca.crt (скорее всего, можно склеить оба CA - промежуточный и корневой - в один файл);
    2. Приватный ключ клиента, который он будет использовать для шифрования - private.key;
    3. Соответствующий приватному публичный ключ-сертификат, который клиент будет сообщать серверу - public.cer.

    Я ввёл в гугл "php curl mtls" и в первой же ссылке есть пример кода: https://smallstep.com/hello-mtls/doc/client/php

    В примере, конечно, нет пароля от ключа, но справка подсказывает, что это опция CURLOPT_SSLKEYPASSWD.
    Ответ написан
  • Как сделать что-бы бот отправлял сообщение в групповой но, не в лс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Распространённая ошибка: в качестве chat_id используется id пользователя. Естественно, получателем будет пользователь, а не группа.

    Правильно вместо этого:

    $chat_id = $data['message']['from']['id'];

    использовать это:

    $chat_id = $data['message']['chat']['id'];
    Ответ написан
    Комментировать
  • А можно ли создать скрипт, который добавить в html письмо что отследить папки пападания?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Почтовые клиенты принципиально не поддерживают javascript, так как это офигенная дыра в безопасности пользователя. Более того, приличные почтовые клиенты по умолчанию даже картинки с внешних ресурсов не скачивают, не то что скрипты.
    Ответ написан
    5 комментариев
  • Как пользоваться TTY?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В консоли раскладка клавиатуры грузится с помощью команды loadkeys, раскладки лежат в /usr/share/keymaps (в deb*untu их по умолчанию нет, надо доставить пакетом console-data).

    Шрифт в консоли устанавливается командой setfont, шрифты и таблицы кодировок лежат в /usr/share/console{fonts,trans} (тоже в пакете console-data).

    loadkeys и setfont устанавливают раскладку и шрифт до перезагрузки. Лучше этим не страдать, а использовать штатную настройку, в debubuntu это dpkg-reconfigure console-setup.

    Для использования мыши в консоли надо установить и запустить сервис gpm.
    Ответ написан
    Комментировать