Задать вопрос
  • Как добавить поддержку кириллицы в ConTeXt?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А шрифт-то такой есть? У меня в Ubuntu он нашёлся в пакете texlive-fonts-extra-links как ссылка на шрифт в другом пакете:

    $ ls -l /usr/share/texlive/texmf-dist/fonts/truetype/public/dejavu/DejaVuSerif.ttf 
    lrwxrwxrwx 1 root root 55 фев 18  2020 /usr/share/texlive/texmf-dist/fonts/truetype/public/dejavu/DejaVuSerif.ttf -> ../../../../../../fonts/truetype/dejavu/DejaVuSerif.ttf


    С кириллицей в конечном документе проблем не возникло.
    Ответ написан
    2 комментария
  • Как сделать на одном устройстве чтобы я мог получать сообщения SMS без sim-карток(если у меня 10 sim-карток настоящих), кто знает?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, нельзя, ну кроме случаев если это eSIM. Сим-карта - это микрокомпьютер с процессором и секретным ключом внутри. Невозможно её не подключать для использования.

    Много лет назад можно было подобрать секретный ключ симкарты брутфорсом и сделать копию. Сейчас это невозможно, число попыток сильно ограничено, после чего симкарта перестаёт работать. Поэтому сим-карта может работать только при физическом подключении к устройству и это не обойти.

    Но можно подумать на тему того, чтобы оптимизировать работу с таким количеством сим-карточек. Китайцы делают SIM bank, но там обычно всё нацелено на отправку сообщений (спам), а не на приём, в том числе и прилагающийся софт. Можно также самому купить ндцать модемов (вполне достаточно б/у 3G-модемов). Но придётся найти или написать софт для управления этим хозяйством.

    Я когда-то изучал похожий вопрос. У меня была задача на интерес сделать тестовый полигон из сим-карт нескольких разных операторов, чтобы можно было тестировать доставку на них. До реализации дело не дошло.
    Ответ написан
  • Как работает телеграм бот скачивания видео с ютуба?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Скачивание видео с ютуба - обычная операция. Её реализует, например, проект youtube-dl (который фактически уже загнулся) и его форк yt-dlp (живее всех живых). Они могут работать как отдельный скрипт, так и как модуль к python.

    А так как ботов часто пишут именно на python, то это ещё и достаточно просто реализовать. Получив ссылку, бот вызывает функцию модуля yt_dlp, затем скачанное видео отправляет запросившему.

    Бот также может помнить, какие видео у него уже есть, и отправлять их сразу по file_id. Если у бота большая аудитория, то популярные видео он может отправлять довольно быстро, если их уже хоть кто-то запрашивал.

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так и должно быть: не-inline клавиатура - это просто помощник по отправке текстовых сообщений с текстом, написанным на кнопке. У них нет и никогда не было никаких callback_data.
    Ответ написан
    Комментировать
  • Возможно ли создать скрип, который после бронирования клиентом будет отписывать ему в telegram(WP)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Telegram невозможно писать по номеру телефона. Ну, точнее, можно с помощью клиентского API найти пользователя по номеру (если не запрещено его настройками приватности) и от пользовательского же аккаунта ему написать. Но это будет нарушением правил Телеграма, и при сколько-нибудь заметной активности в поиске юзеров по номеру Телеграм банит. Я рекомендую отказаться от этой затеи. Телеграм для этого не предназначен.

    Возможность отправки по номеру телефона для бизнесов есть в Viber, WhatsApp, VK/OK, но это платно и бизнесу нужно будет пройти верификацию. Или использовать SMS, которые по определению работают по номеру телефона.

    Из других идей: можно предлагать пользователю подписаться на специального бота, получить у него некий код, который ввести в поле при бронировании, тогда бронирующий сайт сможет запомнить user_id клиента в Телеграме и сможет посылать ему через бота сообщения (пока тот от бота не отпишется). Тоже не шибко удобное решение.

    Большинство небольших сайтов ограничиваются электронной почтой, это проще всего.
    Ответ написан
  • Подтверждение почты запросом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В письмах нельзя выполнять javascript.

    Ссылка из письма в почтовом клиенте в любом случае откроет браузер,
    Ответ написан
  • Как можно получить ключ доступа к api?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Судя по всему, их API теперь переехал сюда developers.pho.to
    На это намекает, что вызов API https://photolab.me/api/feed/best перенаправляет на https://photolabsocialapi.pho.to/api/v1/feed/best
    Ответ написан
    Комментировать
  • Как сделать такой вывод в Bash?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Открываем man bash, раздел QUOTING. Там описано как экранировать всякие спецсимволы.
    Ответ написан
  • Как отдавать страницу с серыми ip в IFrame (vpn)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Отдавать ссылки на эту сеть напрямую нельзя, ведь эти адреса конечному пользователю недоступны. Надо проксировать их, можно прям на том же vps через nginx, например.
    Ответ написан
    9 комментариев
  • Телеграм бот не корректно отправляет результаты парсинга страницы, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А как иначе? На каждой итерации цикла содержимое n2 перезатирается очередной строкой, в итоге в конце цикла остаётся последняя. Вероятно, предполагалось, что в n2 нужно добавлять очередную строку.

    Ну и скрипт, вероятно, парсит страницу один раз, при своём запуске, а затем показывает одинаковый неизменный результат (но так как начала скрипта не видно, непонятно, когда запускается этот парсинг).
    Ответ написан
  • Защита от спама Телеграм бота в telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как-как, так же как и всегда: посмотреть, какое исключение возникает, отловить его и корректно обработать.

    Например, пусть бот упал из-за ZeroDivisionError (ошибка деления на 0), тогда оборачиваем нужную часть бота или даже главный цикл бота в try ... except и как-то это разруливаем:

    while True:
        try:
            bot.infinite_polling()
        except ZeroDivisionError:
            # чуть подождём, чтобы не было проблем, если падает слишком часто и быстро
            time.sleep(5)


    Разумеется, не всегда имеет смысл так делать прям вокруг главной функции, иногда лучше обработать исключение непосредственно в обработчике, где оно возникло, можно даже предпринять какие-то действия, например, добавить вызвавшего сбой пользователя во временнй чёрный список, чтобы игнорировать сообщения от него.
    Ответ написан
    2 комментария
  • Как тестировать Viber чат-бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно при установленном Viber открыть такую ссылку: viber://pa?chatURI=код_бота_из_ссылки

    Тогда в контактах появится этот бот, а на вебхук бота улетит callback с типом subscribe и идентификатором пользователя (имеет вид base64-строки). Важно понимать, что один и тот же пользователь в разных ботах будет иметь разный идентификатор, а определить номер телефона пользователя бот вообще не может.
    Ответ написан
    Комментировать
  • From или chat? Где хранятся данные о пользователе telegram api?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В текущей реализации Bot API в привате с ботом from.id всегда равно chat.id. Но это не распространяется на всякие групповые чаты.

    Я всегда рекомендую исходить из того, с чем мы имеем дело. Если нужно указать chat_id при отправке сообщения, то нам нужен именно чат, а не пользователь, и следует брать chat.id. Если мы хотим сохранить информацию о пользователе, то правильнее брать from.id. Это, в том числе, повысит шансы на корректную работу бота без доработок в том случае, если Telegram вдруг когда-нибудь откажется от идентичности chat.id и from.id в привате с ботом.
    Ответ написан
    Комментировать
  • Можно ли отправлять в телеграмм вместе разные клавиатуры?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно. В обработчике inline-кнопки вызываем стандартный метод API sendMessage, содержащий новую inline-клавиатуру, и пользователь получит ещё одно сообщение с другими кнопками.

    Как вариант, можно отредактировать (editMessage) исходное сообщение (его идентификатор прилетает в inline-обработчик), так тоже часто делают.
    Ответ написан
    Комментировать
  • Бот не реагирует на команды ранее все работало поменял токен не помогло Поможете?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше увеличить интервал, 1 секунда это мало, и при любой ошибке ты скорее всего очень быстро сделаешь второй запрос, который и вызовет подобное поведение. Дефолтные 30 секунд это норма, не надо их менять без очень веских причин.

    Long polling так и работает: запрос длится 30 секунд, если приходит событие - запрос завершается досрочно. Это позволяет и события получать быстро, и сервер слишком часто не дёргать.
    Ответ написан
    Комментировать
  • Почему ссылка работает в хром но не работает через href в html?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что символ & (как и некоторые другие символы) в HTML должен экранироваться как &

    upd: Проблема была в чём-то другом. См. комментарии.
    Ответ написан
    5 комментариев
  • Может ли физ лицо создавать интернет-проекты?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Создавать сайт не запрещено, и на это не нужно никаких специальных разрешений, получения лицензий или ещё каких-то бессмысленных телодвижений. Это же не медицинская деятельность, производство продуктов питания, строительство или банковское дело.

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

    Для того, чтобы не получать формальных претензий от властей разных стран (в первую очередь ЕС, который требует соблюдать GDPR и другие нормативные акты по отношению к своим гражданам безотносительно места предоставления им услуг), сейчас много кто начал показывать на всякий случай предупреждение о куках и выкладывать формальную политику конфиденциальности (которая всё равно по большому счёту декларация о намерениях). Публиковать свои собственные личные данные в ней необязательно. Достаточно просто указать в ней адрес электронной почты или ссылку на онлайн-форму для связи, с помощью которой можно обратиться с запросом на удаление данных. Ну и стандартные ля-ля об использовании электронной почты для предоставлению пользователю дополнительных услуг, требующих его идентификации и всё такое.

    Кроме того, в некоторых случаях политика конфиденциальности требуется не для соответствия законам, а по правилам тех или иных сайтов и сервисов. Например, для прохождения review приложения в Facebook у него обязательно должна быть опубликована политика конфиденциальности. Когда мне потребовалось пройти этот квест (по работе), я взял текст с сайта своей компании и немного отредактировал, даже гуглить примеры не потребовалось.
    Ответ написан
    Комментировать
  • Как сделать проверку базы данных, на наличие новых записей?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Заводим в базе поле навроде created_at, в которое вставляем NOW() для всех новых записей (или задаём значение по умолчанию CURRENT_TIMESTAMP, чтобы оно заполнялось автоматически). В ежеминутном запросе выбираем записи с created_at больше максимального created_at при прошлой проверке. Либо можно использовать монотонный идентификатор (auto_increment), помнить последний известный и выбирать новые записи больше последнего. Ещё иногда добавляют поле статуса события, в котором отмечают процесс обработки. Например, 0 - ещё не обработано, 1 - обрабатывается, 2 - обработано.

    Идея из соседнего ответа использовать брокер очереди тоже неплоха, но ради такой простой задачи без высоких требований по скорости, надёжности, высоким объёмам, отказоустойчивости и масштабируемости это для простого бота будет чересчур. Можно иметь в виду и в какой-нибудь другой раз (когда это будет более осмысленно) воспользоваться советом.
    Ответ написан
  • Как называется специальная ячейка памяти в pytelegrambotapi?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Думаю, речь не про "ячейку памяти", а про register_next_step_handler.
    Ответ написан