• Задача от Google про 25 лошадей?

    @havemanyquestions
    Если в таком ключе, то да, ваша правда.
  • Бот, который парсит посты из каналов телеграм, в которых я состою и репостит их в мой канал. Как?

    @havemanyquestions
    Один раз запустить процесс, он будет слушать все входящие сообщения.
    Посмотрите в сторону библиотеки MadelineProto (это если использовать PHP), а именно в сторону $MadelineProto->loop(...
  • Бот, который парсит посты из каналов телеграм, в которых я состою и репостит их в мой канал. Как?

    @havemanyquestions
    Спасибо. В теме разобрался уже давно, по итогу ваш ответ оказался самым точным среди остальных. Необходимо использовать Telegram API, этот же API используется и родным приложением Telegram'а. Иначе говоря, нужно написать свой миниклиент, который с любой стороны будет выглядеть так, как будто вы просто открываете ваш телеграм-клиент и заходите куда-то и что-то делаете. Иначе говоря, можно прикинуться пользователем, используя Telegram API. Но это не бот, мой вопрос был изначально неверен, и Bot API не используется.
  • Бот, который парсит посты из каналов телеграм, в которых я состою и репостит их в мой канал. Как?

    @havemanyquestions
    Здравствуйте. Тему изучил. Ваш ответ неверный. Изначально мой вопрос был не совсем корректно построен, т.е. не знал темы, но меня никто не поправил. Боты тут совсем ни при чем. Bot API не используется в данном случае, необходим Telegram API и только он.
  • Laravel. Когда использовать Events, а когда Notifications?

    @havemanyquestions Автор вопроса
    "Мне так хочется."
    "очередной персонаж, не желающий читать документацию"
    "А ещё надо..."

    А вы зачем на такой тон общения переходите?
    Еще один классический IT-шный "персонаж", который не умеет разговаривать.
    Ну ладно, коли вы позволили мне сделать то же... А могли бы пригодиться...
    В конструктивном ключе писать ничего не буду, ибо переписка скатилась в другом направлении.

    Хочешь продолжения диалога - отвечай по теме, нет - не трать мое время. Одним только словом "Персонаж" разговор переводится в плоскость обсуждения моей личности, этого делать не надо. Тебе так хочется? Что хочется? Проявлять неуважение, грубость, и делаешь ты это осознанно?
    У тебя какие-то проблемы с общением?
    Есть что сказать по вопросу - говори, хочешь чему-то научить - иди учи детей или внуков. Устройся в школу, куда-нибудь еще, меня это не касается. Какова цель такой манеры? Ни силы, ни ума, ни знаний, ни тем более опыта ты этим не показываешь.

    Разговор с такими персонажами мне не интересен. Мне хочется, чтобы ты прошел мимо и игнорировал все мои вопросы, добавь меня в черный список, и с такими манерами больше не отсвечивай. Кроме вполне ожидаемого неуважения, дерзости и агрессии на такую манеру ведения разговора ничего не жди, но тратить время на это я не хочу. Иди учи этику и почаще вылезай из-за компьютера, социализируйся, чтобы жизнь научила осознанной необходимости в уважении собеседника, особенно незнакомого.
    Не хочу тебя ни читать, ни видеть в моих вопросах. Будь добр.
  • Laravel. Когда использовать Events, а когда Notifications?

    @havemanyquestions Автор вопроса
    1. Почему на ты в приличном месте? Иль уже знакомились?
    2. "Непонятно, почему «..." А чего здесь непонятного? Технически полезное действие (пусть это будет добавление пользователя) сводится к добавлению записи в БД. Это есть триггер, который должен вызывать уведомление. Суть уведомления в уведомлении, я и уведомляю.
    3. "что не так?" Laravel в формируемом имени канала использует поле id из таблицы пользователей. В моем случае используется своя таблица пользователей с id из внешней системы, который не записан в поле id. Он даже по типу отличается, там строка. Вариантов "из коробки" поменять используемое поле нет, только написание кастомного драйвера, чего пока не хотелось бы делать.
  • Как заставить работать веб-хуки Telegram bot'а в России?

    @havemanyquestions Автор вопроса
    По ходу весь входящий трафик от телеграма в РФ заблочили. И нет никакого другого смысла. Понятно, что через браузер у меня все будет открываться, т.к. я то могу на свой сервер попасть. А вот API телеграма не может, т.к. нет между нами никакого открытого канала...
    Какие варианты?
  • Как заставить работать веб-хуки Telegram bot'а в России?

    @havemanyquestions Автор вопроса
    Вообще глухо, перечитал все, что нашел на эту тему.
    При обращении через браузер и выполнении getMe в самом обработчике на моей стороне, в браузере получаю информацию о боте. Но когда пишу в чат, то при опросе через getwebhookinfo получаю стабильно "last_error_message":"Connection timed out" Читал еще, что чтобы API телеграма могло вывести ответ от моего обработчика, он должен отдавать назад мой токен. В этом направлении еще покопаю...
  • Как заставить работать веб-хуки Telegram bot'а в России?

    @havemanyquestions Автор вопроса
    В обработчике поставил просто запись в файл при обращении. Пишешь сообщение боту - запись в файл не происходит. Тупо не доходят запросы от API telegram'а. Сертификаты?..
    Сертификат установлен от reg.ru.
  • Как заставить работать веб-хуки Telegram bot'а в России?

    @havemanyquestions Автор вопроса
    Проблема решилась, бесплатные socks5 proxy достаточно нестабильные, нашел неплохой с низкими задержками, все заработало. Но теперь к слову про long-poll и webhooks. Webhook'и настроены, url задан. По поводу long-poll - он невозможен, насколько я понимаю, с момента настроек webhook'ов. И вот что непонятно здесь. То ли у меня опять что-то не работает, то ли так должно быть и я чего-то не понимаю. При использовании указанной библиотеки
    $response = Telegram::getMe();
    - работает, я вижу при открытии в браузере имя своего бота, все, отлично, доступ к API есть. Но когда пишу боту ничего не работает.
    В моем обработчике, на который телеграм должен пересылать сообщение вот такой элементарный код, чтобы понять, работает или нет. Но при открытии в браузере получаю ошибку undefined $result["message"] (естественно, т.к. браузер ничего не посылает), но и если писать в телеграм, то бот ничего не отвечает.

    $telegram = new Api("api", false, config('telegram.http_client_handler'));
    $result = $telegram -> getWebhookUpdates();
    $chat_id = $result["message"]["chat"]["id"];
    return $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => "привет."]);
  • А какой шаблон проекта на Laravel у Вас?

    @havemanyquestions
    jazzus Оригинальное замечание. )
    Дмитрий,
    Я намеренно взял принципиально разные вещи (процессы) из мира людей, равно как zend и laravel принципиально разные вещи ( первое - не есть второе, а второе - не есть первое, возможно; да, не самая лучшая аналогия, но суть высказывания я пояснил) с точки зрения вопрошающего, желая подчеркнуть неэквивалентность. Zend никоим образом не относится к вопросу. Выбор фреймворка - дело сугубо индивидуальное, но он сделан и вопрос - в контексте уже сделанного выбора. И когда человек уже находится в определенном категорийном поле, ему своим ответом, который по сути является ответом для вопроса-гиперонима, предлагают подняться на уровень вверх (вопрос выбора инструмента), не дав ответа на его основной вопрос, что в принципе ломает суть вопрос/ответ для области , где не обсуждаются отвлеченные понятия (когда можно сказать, что дескать нет, вы, батенька, неправильный вопрос задаете), но достаточно точные вещи, когда вопрос поставлен точно, определенными тезисами, которые относятся к определенной сущности (в данном случае фреймворк). Никого обидеть цели не имею, просто обращаю внимание, воспользовавшись случаем, и констатирую факт, который легко объясняется категориями логики.
    P.S. Кстати, идея в этой связи. Было бы здорово ввести две категории ответов: конкретный ответ и предложение. Первые - это для практиков, зашел, ответил на вопрос, решил свою задачу. А вторые - это когда хочется узнать мнения по вопросу, когда предлагаемое решение, подход не совместимы с существующим инструментарием, заложенным в контекст. Либо блок ответов и комментариев по вопросам, чтобы желающий ответа, а не дебатов, мог не тратить времени. Просто хабровская аудитория - это (мне так кажется, это не факт) развитые интеллектуально и не самые ординарные люди, поэтому им хочется показать свой кругозор, обсудить вопрос и это здорово. Но суть вопросника в другом. Поэтому разделение вопроса на два блока - это хорошая идея, хоть и является гипотезой, которую нужно проверить на практике.
  • А какой шаблон проекта на Laravel у Вас?

    @havemanyquestions
    Извиняюсь за оффтоп, но... :) От он - показательный случай про российский форум.
    - Как мне бы научиться ловить рыбу?
    - Тебе не нужна рыба, руби дрова.
    - Спасибо тебе, о мудрец, ты открыл мне потаённый смысл.
    Вопросы, сугубо относящиеся к конкретной теме. А человеку эту тему сменить предлагают. Правильно сказала одна известная нейробиолог и профессор - мир сходит с ума, большинство людей сумасшедшие, без обид. До тех пор, пока логика и прямые причинно-следстаенные связи отсутствуют, можно смело говорить об этом вслух.
  • Возможно ли подменить ip-адрес в $_SERVER?

    @havemanyquestions Автор вопроса
    Если вам не угодил мой заголовок, то предложите вариант, с удовольствием заменю. ;)
  • Возможно ли подменить ip-адрес в $_SERVER?

    @havemanyquestions Автор вопроса
    В принципе прочитал, что хотел. Можно использовать ограничение доступа прямо из кода php без использования htaccess и вывести настройку этих изменений в администраторский интерфейс для легкой настройки. Про прокси немного мимо, но, читая между строк, если кто-то будет знать разрешенный IP, то не сможет подменить свой на разрешенный и получить доступ к API. Спасибо.
  • Как на сайте сделать смену картинок и контента?

    @havemanyquestions
    А сайт у вас какой: на php (самописный, CMS), SPA?
    P.S. Возможно, это поможет - https://stackoverflow.com/questions/24260204/keepi...
  • Как реализовать одновременный доступ к API пользователя и мобильного приложения?

    @havemanyquestions Автор вопроса
    Антон Спирин
    Возможно, сумбурно, да...
    По-другому. Если есть приложение, которое должно иметь монопольный доступ (ко всем функциям) к API, а API требует access token и проверяет права доступа, то как реализуется в данном случае доступ приложения к API. Понятно, что надо выполнить каким-то образом "вход" (не понимаю механизм, это не живой пользователь, форму логина не покажешь) и потом слать access token с каждый запросом (а еще обновлять его, повторно производить входи и т.д.). Но по логике вещей авторизовывать приложение нет смысла (делать, чтобы оно работало по классической схеме с JWT, это больше про пользователей), надо бы, чтобы оно всегда было авторизовано, т.к. других таких нет, этот "пользователь" единственный и он точно имеет право.
    Как предположение - может, не заморачиваться, не проводить аутентификацию приложения, и с любым запросом просто передавать, как некий паспорт, сообщающий о том, что приложение имеет право:

    ?action=get&param1=xxx&param2=xxx&param3=xxx&timestamp=111&secret=xxx


    Где secret=sha1(get+param1+param2+param3+timestamp+secretSalt).
    При получении на сервере запроса проверять secret, что даст понять, что запрос от доверенного субъекта. Чтобы сильно ограничить возможность повторного использования подобного запроса в случае перехвата и не вести базу данных, взять за данность, что каждый запрос жив 5 секунд, т.е. при получении проверять timestamp, и если запрос еще свежий, то отдавать данные. Банки в своих API используют такую схему обмена данными (правда с сохранением всех запросов в базе и с проверкой).
    Но в случае с приложением, которое обращается к API - это нормальная практика или я изобретаю велосипед и есть какие-то типовые, наработанные временем, решения, best practices? Придумать-то как сделать - не проблема. Нужно расширить кругозор, чтобы не было лишней самодеятельности.
  • Как выглядит рабочий процесс при использовании Auth0 (jwt)?

    @havemanyquestions Автор вопроса
    Почему вы решили, что токен нельзя хранить в localStorage?

    https://auth0.com/docs/security/store-tokens#singl...
    Его ведь элементарно можно своровать и пользоваться до истечения срока годности или я что-то не понимаю?..

    3. Достаточно при инициализации при наличии токена, например сделать запрос за данными о пользователе. И в зависимости от ответа отрисовывать нужную версию приложения.

    Допустим, что в самый первый раз я запросил информацию о пользователе (а значит сессия на сервере активна и пользователь прошел аутентификацию и может получить доступ к закрытым маршрутам):
    1) Сохранил его в redux store. В таком случае после перезагрузки страницы данные из оперативной памяти сотрутся и придется снова выполнять вход. Как обрабатывать такое поведение?
    2) Сохранил данные в local storage, поставил флаг isUserLoggedIn. В таком случае получается, что можно просто добавить эти данные себе в local storage и, не вводя данные в форму аутентификации, получить доступ к закрытым маршрутам приложения. Необходимо как-то проверить сессию на сервере и снова запросить данные пользователя. С какой периодичностью это делать, как?
  • MAC OS. Как восстановить закрытые вкладки Chrome после двойной перезагрузки?

    @havemanyquestions Автор вопроса
    Думал попробовать через историю восстановить данные, сравнив время закрытия и время открытия. Посмотрел структуру БД истории. И... там нет время закрытия. Есть время первого открытия, количество посещений. Если бы разработчики добавили туда время закрытия, пусть это и увеличило бы базу, то это бы закрыло вообще все проблемы с сессиями. Можно было бы вообще любые выборки делать. Восстанавливать любые вкладки на любой момент времени в рамках сохраненного временного периода. Куда можно закинуть мысль? ) Это могло бы быть вообще опцией, спрятанной в настройках. Кому надо - включили бы, кому не надо - и не знали бы. Одно пустое поле в БД погоды бы не сделало.
  • MAC OS. Как восстановить закрытые вкладки Chrome после двойной перезагрузки?

    @havemanyquestions Автор вопроса
    Noir, вы бы могли разместить эти две ссылки в ответе. Я бы принял, чтобы ваше время не пропало напрасно. А конкретно в моем варианте пора впадать в депрессию, файлы затерты...
  • MAC OS. Как восстановить закрытые вкладки Chrome после двойной перезагрузки?

    @havemanyquestions Автор вопроса
    Python имеется, поэтому - не беда.
    Все безуспешно. Декодер по ссылке выше действительно работает, но в моем варианте эти файлы были затерты при перезагрузке. Разница в размерах между текущей и прошлой сессией объясняется тем, что я открыл несколько вкладок, эти вкладки и добавили в размере файлам, поэтому казалось, что они принципиально разные. При моем количестве вкладок там должен был быть объем в сотни килобайт или даже мегабайты.

    Вот еще ссылка в догонку, кому-то должно помочь, чтобы не искали - https://superuser.com/questions/635436/can-i-resto...
    Ссылка выше и эта - исчерпывающая информация по проблеме. В рунете ничего вразумительного нет.

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