Задать вопрос
  • Как отдавать страницу с серыми 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.
    Ответ написан
  • Как исправить ошибку No module?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Разумеется, если в sys.path добавить каталог flaskr/live, то это не поможет найти в нём web. Надо добавлять flaskr.

    Проще запускать скрипт из вышестоящего каталога (python live/LiveScanner.py).

    upd: Посмотрел внимательнее, flaskr/web вообще не содержит подкаталогов, а live/apiLiveData.py находится в flaskr/, а не в flaskr/web. Думаю, надо начать с наведения порядка в этом хозяйстве.
    Ответ написан
    5 комментариев
  • Как сделать так, чтобы бот игнорировал ошибку, связанную с лс, и продолжал выполнять команду?

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

    try:
        await member.send("Привет!")
    except disnake.ext.commands.errors.CommandInvokeError:
        print(f"Написать {member} не удалось")


    Но вообще спамить в ЛС - это ненормальный сценарий использования Discord API, и за это бота могут заблокировать. Правильнее писать в каналы, для чего имело смысл с самого начала заложить в бота понятие "канал для уведомлений", чтобы все пользователи бота его заранее настроили на своих серверах.
    Ответ написан
    1 комментарий
  • Почему не работает aiogram, когда создаёшь виртуальное окружения?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что в виртуальном окружении по умолчанию ничего (почти) нет. Надо доустановить с помощью pip всё необходимое.
    Ответ написан
  • Telegram: как передать текст в callback?

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

    Во многих библиотеках для этого есть поддержка FSM (FSM - Finite State Machine - конечный автомат). В php-библиотеках я не очень разбираюсь, но можно поискать в сторону "название библиотеки FSM", либо в библиотеке уже есть своё решение этой задачи, либо кто-то уже наверняка над этим задумывался раньше, так что можно найти примеры подобного. В конце концов, написать самому под свои задачи.
    Ответ написан
  • Телебот forward_message как скрыть автора?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Что мешает вместо форварда просто отправить такое же сообщение с идентичным содержанием от имени самого бота?

    В доках метод клиентского апи, не Bot API. Нетрудно видеть, что в Bot API нет аналогичного параметра https://core.telegram.org/bots/api#forwardmessage
    Ответ написан
  • Можно ли разместить 2 почтовых сервиса с разными доменами на одном хостинге/сервере?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так он пишет в чём проблема: одновременно делаются несколько вызовов getUpdates. Обычно это означает, что с одним токеном запущено больше одного бота.

    Хотя если судить по предыдущим ошибкам, возможно проблема сетевого доступа до Telegram.
    Ответ написан
  • На 25 строчке при 2-ом повторении выдаёт NonType, почему и как поменять на int?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо так делать. Метод append изменяет список (добавляет в него элемент) и не возвращает никакого значения (или, что то же самое, возвращает None). То есть в результате такой записи мы добавляем элемент в список, а дальше этот список моментально выкидываем на помойку.

    week[g] = week[g].append(subj[gm])
    Ответ написан
    Комментировать