Задать вопрос
  • Проблема с ботом discord на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    С некоторых пор API Discord больше не позволяет по умолчанию ботам видеть содержимое сообщений. Нужно явно запросить message_content intents:

    intents.message_content = True

    А также надо включить privileged intents в developer portal для этого бота.
    Ответ написан
    3 комментария
  • Как сделать так, что бы бот на disnake увидел мемберов?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Необходимо добавить member intents. А также включить privileged intents в настройках бота в developer portal. Документация. Вообще, примеров на эту тему в интернете море.
    Ответ написан
    Комментировать
  • Как получить цвет пользователя в telegram на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если в Bot API нет такой информации, то никак. А в Bot API её на текущйи момент вообще нет. Можно только узнать о наличии premium-подписки. https://core.telegram.org/bots/api#user
    Ответ написан
    2 комментария
  • Как перенаправить вывод strace в tail?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, так сделать нельзя, но есть утилиты, которыми можно принять через stdin лог и автоматически его ротировать по размеру (в том числе удаляя старые файлы). Например, multilog.

    Примеры есть тут: https://superuser.com/questions/291368/log-rotatio...

    Но в целом strace - это так себе средство отладки, тем более скриптов, лучше логгировать в самом скрипте, потому что в strace много ненужного мусора. Как вариант, можно с помощью опций ограничить системные вызовы, которые он будет логгировать.
    Ответ написан
    Комментировать
  • Можно ли получать обновления с телеграм канала через Telegram API без добавления бота в этот канал?

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

    С помощью клиентского API можно подписываться на чужие каналы и получать с них обновления, но это делается с реквизитами пользователя (своего) и канал должен быть публичным, чтобы на него можно было легко подписаться.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это спам и всё делается ради вон того файла во вложении. Текст такой чтобы повысить его уникальность и усложнить его ловлю спам-фильтром.
    Ответ написан
    Комментировать
  • Как удалить своего бота из чужой группы Телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это можно, используя метод leaveChat. Достаточно id группы знать.

    До кучи, можно запретить в настройках бота у BotFather его добавлять в группы вообще, если это функциональностью бота не предусмотрено.
    Ответ написан
    1 комментарий
  • Как можно получить просмотры на посте в канале телеграм, если бот опубликовал пост, имея на руках чат айди и айди сообщения?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Bot API - никак. Этот API работает на событиях и не позволяет получать информацию по ранее отправленным сообщениям, и события вида "что-то изменилось в числе просмотров" не предусмотрено.

    Только пользоваться клиентским API (MTProto) на базе библиотеки telethon или pyrogram. Изображать из себя обычного пользователя и смотреть историю сообщений в канале.
    Ответ написан
    Комментировать
  • Есть ли универсальный модуль Python для работы с разными базами данных (mysql, postgresql, ...)?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для мобильных телефонов искать по слову HLR, есть сервисы, которые позволяют делать HLR-запросы в сеть GSM с помощью API. Однако надо понимать, что работает это всегда надёжно, может давать ложноположительные и ложноотрицательные результаты, может работать не по всем операторам.

    Самый надёжный способ - совершить звонок и сбросить.

    Вообще, лучше было бы рассказать исходную задачу.
    Ответ написан
    6 комментариев
  • Что ему не нравится с моим буффером?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Думаю, ошибка тут в том, что в процессе выполнения receiver_func значение offset также успевает измениться внутри worker_func, что приводит к выходу за пределы буфера, несмотря на явную проверку offset.

    Вообще, надо всегда помнить, что полноценная синхронизация тредов только на mutex невозможна. Между двумя блокировками mutex одним тредом другой тред может успеть выполнить несколько блокировок. Нужно также использовать condvar.

    В целом кажется, что этот код написан в попытках сделать хоть что-то параллельно, а не для решения какой-то реальной задачи.
    Ответ написан
    Комментировать
  • Сколько места доступно докер контейнеру на linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Docker по умолчанию использует "слоённую" файловую систему overlayfs. В ней каждый образ состоит из нескольких слоёв, которые перекрывают друг друга (read only). Плюс собственный слой контейнера (read write). Поэтому если никакой большой записи приложение в контейнере не ведёт, то образ на диске хранится один раз и дополнительно место почти не расходуется. Это нормально, это так и задумано.
    Ответ написан
    Комментировать
  • Как сделать ссылку на телеграм с текстом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак. Возможности deep linking у Телеграма довольно разнообразны, но передать текст пользователю никак нельзя. Можно только передать текст боту, причём исключительно как аргумент команды start.

    Подробнее в официальной документации: https://core.telegram.org/api/links
    Ответ написан
    Комментировать
  • Как почистить папку с 246к папок по ssh?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно использовать xargs, он сам поделит список аргументов, переданных через stdin, на такие блоки, чтобы они вписывались в лимит. Чтобы не было спецэффектов от всяких особых символов, можно использовать find -print0 | xargs -0 (символ с кодом 0 будет разделять имена файлов вместо стандартного переноса строки):

    find условия -print0|xargs -0 rm -rf

    Однако GNU find сам умеет удалять файлы с помощью -delete:

    find условия -delete

    Ещё может быть проблема, что подобная операция помешает работе сайтов из-за нагрузки на диск, это можно решить с помощью приоритетов для процессов (nice) и ввода-вывода (ionice), тогда удаление будет по возможности выполняться в фоне:

    nice -n19 ionice -c3 команда

    (Если используется find|xargs, то это нужно передать xargs)
    Ответ написан
    Комментировать
  • Старый коммит отвязался от ветки origin/master. Как его туда вернуть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Почему это "отвязался"? Всё на месте https://github.com/boluchevskii/englishmakerNEW/co...

    Конечно же, HEAD в master и origin/master указывает только на faaefef - так и должно быть. Не может HEAD указывать на два разных коммита.
    Ответ написан
    Комментировать
  • Почему запрос SQL не проходит без GROUP BY?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    500-1000 секунд это 6-12 минут примерно. Это вообще не тот масштаб, за который имеет смысл волноваться. Рассылается и ладно...
    Ответ написан
    Комментировать
  • Как принимать сообщения с вотсапп?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть два способа (на самом деле три):

    1. Пойти по легальному пути. Зарегать бизнес-аккаунт у Facebook, пройти верификацию, зарегистрировать WhatsApp-номер, подключить интеграцию через какого-нибудь провайдера API и работать через него. Характерный признак - только для бизнесов, не очень гуманная цена (5-10-15 тыс. рублей только за подключение - легко), рассылка возможна только по одобренным заранее шаблонам. Но зато легально. Для серьёзного бизнеса с большим количеством клиентов наилучший вариант.

    2. Пойти по серому пути. У WhatsApp есть Web-версия, народ её расковыривает и учится посылать в Web запросы напрямую, без браузера. Есть как сторонние поставщики такого доступа с вменяемым API (их много, не буду рекламить), так и готовые реализации, в том числе на гитхабе (но надо искать актуальную, чтобы работала). Характерный признак такой интеграции - нужно сканировать QR-код для привязки веб-аккаунта к мобильному приложению, а если пользоваться сторонним посредником, то его цена невелика и не имеет жёстких лимитов по числу сообщений. Есть некоторый риск бана аккаунта, поскольку официально так нельзя, но если быть очень осторожным и не спамить (только отвечать на входящие) - то риск бана минимальный (но я бы всё равно не советовал свой основной и очень важный номер в это впутывать). Такое нередко используют всякие мелкие интернет-магазинчики.

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

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

    PS: Flask, ngrok - это всё фигня. Надо начать с того, через что делать эту интеграцию. В браузерном WhatsApp Web нет никакого flask, но сообщения ходят.
    Ответ написан
    5 комментариев
  • Woocommerce не отправляет письма на Gmail.com, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Он же прямо пишет, в чём проблема: SPF-запись для pndexam.ru не предполагает отправку с 45.12.19.68. И это действительно так:

    SPF детали
    pndexam.ru descriptive text "v=spf1 include:_spf.yandex.ru include:beget.com ~all"
    beget.com descriptive text "v=spf1 include:_spf1.beget.ru include:_spf2.beget.ru include:_spf3.beget.ru -all"
    _spf1.beget.com descriptive text "v=spf1 ip4:91.106.200.0/21 ip4:5.101.152.0/21 ip4:185.50.24.0/22 ip4:185.78.28.0/22 ip4:87.236.16.0/22 ip4:87.236.20.0/23 ip4:45.12.16.0/24 ip4:45.12.17.0/24 -all"
    _spf2.beget.com descriptive text "v=spf1 ip4:81.200.112.0/22 ip4:81.200.116.0/23 ip4:81.200.118.0/24 ip4:217.172.24.0/22 ip4:185.19.204.0/22 ip4:193.200.72.0/23 ip4:45.67.56.0/22 -all"
    _spf3.beget.com descriptive text "v=spf1 ip4:193.200.75.0/24 ip4:213.139.208.0/22 ip4:95.214.60.0/23 ip4:193.176.77.0/24 ip4:193.176.76.0/24 ip4:5.181.110.0/24 ip4:5.181.111.0/24 -all"


    Тут есть 45.12.16.0/24 45.12.17.0/24, но нет 45.12.19.0/24. Можно в свою SPF-запись добавить ip4:45.12.19.68. А включать весь beget.com плохо: так можно разрешить куче клиентов beget рассылать почту от домена pndexam.ru.

    Ещё он там DKIM упоминает, это следующий пункт из списка "чего надо проверить".
    Ответ написан
    Комментировать
  • Как правильно оформить код для телеграмм бота (калькулятор систем счисления) с кнопками?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В функции bot_message надо проверять обе кнопки:
    if message.text == 'текст первой кнопки':
        ...
    elif message.text == 'текст второй кнопки':
        ...
    else:
        bot.send_message(message.chat.id, 'Моя твоя не понимать...')


    Сейчас же обрабатывает только одну, вторая не обрабатывается.

    Далее нетрудно заметить, что в коде два раза объявляются функции с одинаковыми именами. Последующее определение перекроет предыдущее, и работать будут только последние.

    Вообще говоря, мне кажется не очень осмысленным делать два варианта перевода между системами счисления. Не лучше ли спросить основание исходной и конечной и затем провести преобразование в общем случае? Заодно можно научиться делать перевод между произвольными системами счисления вплоть до 36-ричной? 10 арабских цифр плюс ещё 26 символов латиницы можно использовать как цифры, и даже формула для всех букв алфавита ord(i) - ord('A') + 10 будет хорошо работать...
    Ответ написан
    1 комментарий