Задать вопрос
  • Почему не приходят OTP смс на номер Twilio?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, на номера Twilio шлют смс вовсе не операторы. Приложения и сервисы не используют сети операторов для доставки. A2P (application-to-person) SMS работают не так. Для этого используются специальные интеграции, промышленным стандартом здесь является протокол SMPP. Как правило, конкретный сервис пользуется услугами некоторого поставщика-агрегатора, в которого может посылать не только посредством SMPP, но и каких-то других протоколов. Но в дальнейшем агрегатор пошлёт уже по SMPP либо конечному оператору, либо другому посреднику. Интегрироваться напрямую со всеми операторами мира попросту нереально, их в России десятки, в США сотни, а сколько в целом по миру уже невозможно посчитать. При этом нельзя никогда узнать, пойдёт ли SMS из конкретного агрегатора напрямую конечному оператору или другому посреднику (и в целом невозомжно узнать, сколько посредников вообще будет по дороге). На любой стадии цепочки может что-нибудь глючить или работать недостаточно достоверно.

    Кроме того, любая стадия цепочки может что-то зарезать по своему усмотрению: по текстам, по номерам, по источнику трафика (с каким system_id поступило сообщение). В конце концов, во многих странах весьма сложные правила и технические условия. Например, в Индии максимальная длина альфанумерического имени 6 символов, а в России 11, во многих странах или у отдельных операторов имена должны предварительно регистрироваться (могут быть платны или бесплатны, могут требовать или не требовать документальных подтверждений на товарный знак). В некоторых странах мобильные сети в принципе не поддерживают альфанумерические имена (например, в США), и там необходимо делать подмену на цифровое, которое в дальнейшем не всякий оператор пропустит.

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

    Ссылаться на успешное хождение SMS между обычными абонентскими устройствами нельзя, так как обычные SMS могут ходить по SS7, что для A2P SMS вообще невозможно. Даже если найти за деньги или в даркнете дырку в сеть SS7 у какого-нить африканского оператора, то доставки не будет вообще или её качество будет ужасным (насколько помню, для России лет 5 назад доставка не превышала 40%, сейчас скорее всего ещё хуже).

    С вопросами о неработе следует обращаться в техподдержку конкретного сервиса. Пусть они пушат своего поставщика, а тот по цепочке добивается у своих партнёров.
    Ответ написан
  • Не работает код, ошибок нет, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Зачем тут вообще вызывать get_channel? Быстрее и нагляднее будет проверка:

    if ctx.channel.id == 7тут айди канала:

    Обычно даже тривиальные команды не работают, если есть обработчик on_message, что с этим делать в официальным FAQ описано первым же пунктом: https://discordpy.readthedocs.io/en/stable/faq.htm...
    Ответ написан
    Комментировать
  • Как отправить сообщение боту от имени пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потребуется использовать клиентский API (MTProto). https://core.telegram.org/#getting-started

    Библиотеки tdlib, для python - telethon или pyrogram, для других языков см. гугл.
    Ответ написан
    Комментировать
  • Как создать канал которому можно отправлять анонимные истории?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Технически гарантировать анонимность нельзя. Бот всегда видит имя и id пользователя, который ему пишет.

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

    Как вариант, можно предложить пользователям оставлять истории в стороннем источнике, а в бота присылать ссылку. Например, пусть постят на pastebin.com и присылают ссылку на него. Правда, это довольно замороченно и неудобно, люди будут путаться или даже вообще решат не связываться.
    Ответ написан
    3 комментария
  • В чем разница между Client и Bot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Обычно бот создаётся либо как экземпляр класса discord.Client, либо как порождённого от него класса discord.ext.commands.Bot. Как называть переменную, в которую будет присовоен этот экземпляр - вопрос вкуса.
    Ответ написан
    Комментировать
  • Как получить ответ от сервера в читабельной кодировке (utf-8)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    \uXXXX - это вполне валидные с точки зрения json unicode-символы. Модуль json делает их по умолчанию, чтобы не делал, надо json.dump/json.dumps передавать параметр ensure_ascii=False:

    >>> print(json.dumps(["Превед!"]))
    ["\u041f\u0440\u0435\u0432\u0435\u0434!"]
    >>> print(json.dumps(["Превед!"], ensure_ascii=False))
    ["Превед!"]
    Ответ написан
    Комментировать
  • Как убрать дробную часть, не округляя число?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самый лёгкий способ безо всяких приведений к строке: умножить на 10, округлить вниз, разделить на 10.

    x = 0.19123809523809523
    y = math.floor(x*10)/10
    print (y) # 0.1


    Но не очень понимаю смысл такого действия. Ведь 0.19 по сравнению с 0.1 это почти в два раза разница...
    Ответ написан
    Комментировать
  • Как получить статистику телеграм бота?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    К сожалению, нет.

    Можно попробовать сфотографировать и применить OCR :) Но, скорее всего, результат будет так себе...

    В принципе, старые телефоны умели хранить СМС на сим-карте, но даже в таком случае переставлять сим-карту в другое устройство (например, модем) - так себе решение. И проще было бы тогда принимать СМС сразу в модеме.
    Ответ написан
  • Traceback (most recent call last): File "botrun.py", line 14, in Как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Он же всё пишет:

    discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.

    При создании бота запрошены privileged intents, но они не были включены в Developer Portal. Их надо включить, либо (что лучше) убрать из кода intents до тех пор, пока они не будут действительно нужны.
    Ответ написан
    1 комментарий
  • TypeError: __init__() missing 1 required positional argument: 'command_prefix' Как исправить?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно использовать SGID (написали выше).

    Можно использовать default ACL, примерно так:

    setfacl -m g:developers:rwx -m d:g:developers:rwx -R /var/www/html
    setfacl -m u:www-data:rx -m d:u:www-data:rx -R /var/www/html
    setfacl -m u:www-data:rwx -m d:u:www-data:rwx -R /var/www/html/uploads


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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нужно поднять веб-сервер, который будет обрабатывать ссылки навроде /bot-callback/токен-бота, а при создании бота делать setWebhook с его токеном и правильным callback. В обработчике коллбэка по токену определять бота, а затем вызывать от соответствующего инстанса бота в Своей Любимой Библиотеке функцию обработки событий (например, в телеботе это метод process_new_updates).

    Старая история
    Был такой вопрос https://qna.habr.com/q/943325

    В нём есть ссылка на уже несуществующий пример с использованием aiogram, где из URL брался токен, а дальше это обрабатывалось каким-то кодом типа:

    with bot.with_token(parsed_token) as bot1:
      ... действия с bot1


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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это нельзя сделать. В библиотеке можно авторизоваться только по токену и никак иначе. Дискорд при авторизации может показать капчу, поэтому по логину-паролю войти нельзя.
    Ответ написан
    Комментировать
  • Ошибка в коде,как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поскольку login - это метод класса, то в него передаётся неявно параметром сам экземпляр класса (параметр self):

    async def login(self, token, *, bot=True):

    То есть, фактически, этот метод неявно вызывается как login(client, '**', '376...').
    Ответ написан
  • При попытке чтения каталога ls /root процесс зависает, как починить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По умолчанию ls не только читает каталог, но и делает stat на каждый файл, чтобы цветом показать их тип и executable bit. Это очень замедляет процесс.

    Обойти вызовом ls без параметров, заданных в alias ls:

    $ alias ls
    alias ls='ls --color=auto'
    $ ls # вызывает алиас
    $ 'ls' # вызывает обычный ls без параметров


    Но лучше не выводить в консоль (особенно если сервер открыт по сети) - это будет очень долго - а перенаправить в файл и потом просмотреть.

    'ls' /root > /tmp/list_of_files
    less /tmp/list_of_files


    Удалить файлы проще всего с помощью find:

    find /root -name 'index.html.*' -delete
    Ответ написан
    2 комментария
  • Как сделать так, чтобы каждые 10 минут дискорд бот отправлял сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В discord.py есть свой механизм для выполнения регулярных задач:

    from discord.ext import tasks
    
    @tasks.loop(seconds=600)
    async def notify_task():
        await bot.wait_until_ready()
        ... нужные действия
    
    notify_task.start()
    bot.run(config.BOT_TOKEN)


    Но ничто не мешает запустить отдельный asyncio-task с циклом (и, разумеется, asyncio.sleep вместо time.sleep) и своими силами.
    Ответ написан
  • Telegram реклама в группах под статусом sponsored??

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотреть, начиная отсюда: https://promote.telegram.org/
    Ответ написан
  • Какие есть api для переводчика?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть, например, libretranslate:
    https://translate.argosopentech.com/
    https://translate.mentality.rip/
    https://libretranslate.de/

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если канал свой, можно написать бота с channel_post_handler, добавить его на канал, в обработчике засылать посты в WP. Можно даже сделать webhook-обработчик на php с использованием собственных библиотек WP.

    Если канал чужой, можно сделать бота на клиентском (MTProto) API.

    Также если публикация уже идёт через бота, можно сделать, чтобы бот сам дублировал посты куда надо как надо.
    Ответ написан
    1 комментарий