Задать вопрос
  • Как правильно сделать структуру базы данных?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обычная задача, делаем промежуточную таблицу grapes_for_wine (wine_id, grape_id).
    Ответ написан
    Комментировать
  • Как отловить удалённое сообщение в Telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Telegram Bot API не поддерживает сообщение о фактах удаления сообщений. Также через API нельзя читать историю сообщений. Поэтому эта задача не имеет решения с помощью ботов.

    Это можно сделать только с помощью клиентского API (MTProto), имитирующего реального пользователя ("юзербот").
    Ответ написан
  • Как сделать await purge(limit=1) в disnake?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обработчик on_message принимает в качестве параметра сообщение (тип Message), а не interaction context. А у сообщения есть метод delete. Так что использование purge тут совершенно не к месту. Открою секрет: удалять вообще что бы то ни было единичное с помощью purge - плохая идея. Пока бот обрабатывает событие, в канале могут появиться новые сообщения. Purge нужно только для масштабной очистки.

    @client.event
    async def on_message(message):
        await message.delete()
        temporary_message = message.reply(...)
        await asyncio.sleep(30)
        await temporary_message.delete()
    Ответ написан
    7 комментариев
  • Как получить смс без связи?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно взять модем типа знаменитого Huawei E3372, к которому можно подключить выносную направленную антенну. Это позволит принимать сообщения за много километров от вышки. Плюс антенну можно поднять повыше, если рельеф и деревья мешают. Обычно это вариант для мобильного Internet на дачу, но и для приёма SMS подойдёт.

    Ещё у некоторых операторов бывают услуги типа "Мультифон" от Мегафона, с которой можно получить дополнительный номер с программным доступом. Но нужно учесть, что на такой номер часто невозможно получать SMS от всяких банков и прочих сервисов - они просто не доходят.

    Также можно разместить модем где-то не у себя, а в зоне уверенного приёма нужного оператора, и ходить этот комп по RDP/VNC/RustDesk/ssh для чтения SMS. К примеру, если находишься на даче, можно оставить этот модем у себя в городской квартире.

    И ещё один вариант: бывают приложения для Android, которые позволяют настроить пересылку SMS, например, на почту. Можно оставить в зоне приёма телефон (разумеется, на зарядке) и пущай пересылает.
    Ответ написан
    Комментировать
  • Как пробросить webhook Telegram бота на домашний компьютер через виртуальный сервер с OpenVPN и Docker?

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

    import config
    
    if __name__ == '__main__':
        if config.POLLING:
            ... start_polling
        else:
            start_webhook(...


    Всё-таки основная часть бота - его бизнес-логика. Каждый раз проверять работу его вебхуков необязательно.

    Если всё же хочется вебхуков, то организуем VPN по любой инструкции, коих тысячи, получаем туннель с парой IP. Например, 10.10.10.1 на сервере и 10.10.10.2 локально. На сервере поднимаем nginx, в котором настраиваем что-то типа
    location /path/to/api_test {
      proxy_pass http://10.10.10.2:порт/path/to/api_test
    }


    Обязательно настраиваем https, можно с Let's Encrypt, но можно и с самоподписанным сертификатом. В последнем случае надо будет загрузить этот сертификат в Telegram через API при настройке вебхука.

    Локально у себя пробросить в докере тот самый порт в нужный контейнер с ботом.

    Возможны разные вариации, не изменяющие общий принцип. Например, можно не настраивать https на сервере, пробросить весь порт "как есть" через nginx stream, haproxy, двойной нат или нат с policy routing, а сам https настраивать у себя локально.
    Ответ написан
    Комментировать
  • Как узнать User_id в inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У объекта query, который передаётся в inline query handler, есть поле from_user, содержащее объект пользователя. Там есть и его id. Например:

    @bot.inline_handler(lambda query: len(query.query) > 0)
    def query_text(inline_query):
        print (inline_query.from_user.id)


    (это для телебота, другие библиотеки могут иметь некоторые отличия)

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот не имеет никакой возможности лезть в избранное пользователя.
    Ответ написан
    Комментировать
  • Возможно ли ботом отвечать на коментарий в Telegram канала?

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

    Соответственно, бота надо добавить в эту группу и посылать сообщение с цитированием сообщения канала.
    Ответ написан
    3 комментария
  • Могу ли я размещать авторские материалы на своем сайте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Следует смотреть правила конкретного сайта и условия, на которых они размещают контент. Например, сайт может требовать, чтобы это было что-то новое, нигде раньше не размещавшееся (как на Хабре). Или что оно больше нигде не размещаться. Или что какие-то права (вплоть до всех с отказом от авторского упоминания) передаются сайту. Или что данные доступны под какой-то конкретной лицензией (хорошей или плохой с точки зрения конкретных интересов автора). Абстрактно гадать о том, какие права получит сайт после размещения материалов, мы тут не можем, повторюсь, это надо читать правила этого сайта.
    Ответ написан
    Комментировать
  • Как снять лимит загрузки файлов бота Telegram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для этого необходимо поднять Local Bot API Server, затем вместо серверов Телеграм (api.telegram.org) обращаться к этому серверу. Чтобы это сделать, у конструктора класса TelegramBot есть параметр baseApiUrl.
    Ответ написан
  • Как получить Текущую карту на сервере CS:GO с помощью python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С помощью протокола a2s, и вот похожий вопрос https://qna.habr.com/q/1154466
    Ответ написан
  • Как добавить поддержку кириллицы в 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 комментариев