• Как вивести елемент из словаря которкый находится в другом файле?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ошибка же всё объясняет: на момент окончания f-строки открытая внутри фигурная скобка не имеет парной закрытой. Всё потому, что в выражениях внутри f-строк надо использовать другие виды кавычек:

    f"{some_dict['some_key']}"

    или

    f'{some_dict["some_key"]}'

    или можно так:

    f"""{some_dict["some_key"]}"""
    Ответ написан
    1 комментарий
  • -1 / unknown wget неизвестная ошибка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это bar function пишет. Самый простой способ - заменить её на фейковую, которая ничего не делает и не возвращает (кажется, в библиотеке нет собственной заглушки для этого):

    wget.download(url, bar=lambda x,y,z:None)

    Но в целом нет смысла использовать старую библиотеку из 2015 года, лучше освоить что-то более современное, например, requests.
    Ответ написан
    Комментировать
  • Есть ли сервис предостовляющий крипто дебетовую карту без верификации личности?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Банковскую карту может выпустить только банк с аккредитацией PCI DSS. Очевидно, что криптовалютные сервисы не могут такого предоставить. Также, платёжные операции в карточных системах выполняются в конкретных валютах (рубли/евро/доллары/тенге/лиры/юани/итд), поэтому банк, который бы согласился рисковать играми в криптовалюту, фактически бы всё равно имел бы для клиента настоящий денежный счёт и конвертировал бы в него криптовалюту по своему собственному курсу (скорее всего, с явной невыгодой для клиента для покрытия рисков и неудобств от волатильности криптовалют).
    Ответ написан
  • Как боту изменить сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    message в этой функции - это сообщение пользователя, который написал /start. Дальше бот пытается редактировать это сообщение... и не получается! Конечно, ведь он может редактировать только свои сообщения, а чужие не может.

    Он должен просто редактировать своё сообщение, а не сообщение пользователя:

    my_new_message = await bot.send_message(message.chat.id, 'Ждем: 2сек')
    await sleep(1)
    await bot.edit_message_text(chat_id=message.chat.id, message_id=my_new_message.message_id, text='Ждем: 1сек')
    ...
    Ответ написан
    Комментировать
  • Ошибка пайтон библа дискорд пай что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Рекоммендую отказаться от discord_slash и перейти на потомков discord.py 2.0 (который так и остался в alpha и в pypi не опубликован) в виде форков discord.py, в которых slash commands работают из коробки. Мои эксперименты показали, что discord_slash ломает часть функциональности discord.py, и разбираться, что там пошло не так, я посчитал малоосмысленным. Я протестировал pycord, nextcord и disnake и остановился на последнем как наиболее развитом (по состоянию на декабрь было именно так), но свой выбор не навязываю.

    Нужно будет всего лишь заменить декоратор @bot.command на @bot.slash_command, очень удобно и никакого мазохизма.
    Ответ написан
    Комментировать
  • Как определить язык написанного сообщения на discord.js?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если надо определять язык текста, то смотреть в сторону language identification, например, есть библиотека fasttext, и вот есть первый попавшийся пример реализации на js https://github.com/rse/fasttext-lid (но в гугле я видел и другие, не знаю, какая будет лучше).

    Если надо определять язык конкретных слов, то может быть интересно использовать стеммеры под нужные языки и затем проверять наличие слова в словаре для этого языка. Либо перебирать весь словарь с учётом расстояния Левенштейна либо другой текстовой метрики.

    В общем, это не самая тривиальная задача.
    Ответ написан
    3 комментария
  • Почему не отображается миниатюра результата Inline-запроса?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ссылка на файл на серверах Telegram - это плохо. Во-первых, она содержит токен бота (может утечь), во-вторых, она может меняться со временем. В большинстве ситуаций полагается передавать file_id, но для thumb_url надо передавать именно URL. Так что увы - придётся самому куда-то публиковать картинки.

    Скачивание файла вызывает заголовок Content-Disposition ответа.
    Ответ написан
    Комментировать
  • Как научить чат-бота в телеграм воспринимать буквы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я пришлю тебе

    '';drop table config;select bitcoin from config

    И таблица config будет удалена. Это называется SQL-инъекцией.

    Ты не оборачиваешь строку в кавычки, разумеется, ничего хорошего не получится. В случае цифр, конечно, запрос без кавычек выполняется успешно. Но вообще это неправильный способ использования SQL, так как любая кавычка его сломает, а тщательно подготовленный текст (пример я привёл) вообще вызовет не тот запрос, который планировался.

    Правильно использовать плейсхолдеры:

    q.execute("UPDATE config SET bitcoin=? WHERE id=?", (new_bitcoin, user_id))


    В этом случае база данных сама правильно всё подставит и выполнит.
    Ответ написан
    Комментировать
  • Почему при добавлении бота в канал (Telegram) - он не работает?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если у бота включена опция Group Privacy, то он не видит сообщений в ней. Её надо выключить.

    BotFather - Bot Settings - Group Privacy.

    upd: Хотя, конечно, дело в другом, речь идёт о каналах, каналы - это не группы, там другой метод обработки сообщений.
    Ответ написан
    3 комментария
  • Какой подход правильный в описании docker-compose?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Очень сильно зависит от задачи. Конечно, если точно не понимаешь, зачем это тебе нужно, то имеет смысл доверить настройку сети докеру. Но если надо, чтобы вместо bridge был macvlan со строго заданной сетью и конкретным parent-интерфейсом, то этим нас докер сам не обеспечит, если ему не подсказать.

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

    3. Это попытка бороться с довольно типичным подходом начинающих докероводов, которые обходятся "универсальным" контейнером, исполняющим любой php-код с внешнего каталога. Конечно, для быстрых экспериментов "ща я чёта сваяю и запущу для проверки" это даже не очень плохое решение, но при широком использовании такого подхода смысл докера существенно уходит: вместо готового к разворачиванию приложения мы имеем контейнер, который ничего не умеет и которому приходится самостоятельно пилить отдельную систему доставки самого кода. Вместо этого лучше сразу научиться и отладиться готовить полноценный образ. В конце концов, можно все приложения делать потомками этого супер-образа с php, что сделает их сборку довольно быстрой.

    4. Относительные пути - это как раз очень удобно для многих задач. Мы имеем каталог с проектом, в котором docker-compose.yml и все нужные данные. Размещение данных предсказуемо, точно видно, кто их использует, какой у них размер и всё такое. Удобно в случае чего перекидывать между серверами вместе с данными: просто погасил, rsync, запустил. Напротив, хранение данных в анонимных томах в /var/lib/docker с непонятными именами - это часто антипаттерн, при котором ценное место в /var заполняется чем-то непонятным, что толком невозможно идентифицировать. А использование имён может привести к той же проблеме, что и container_name - в разных compose-проектах имена пересекутся, и узнаешь это только тогда, когда уже сломается.
    Ответ написан
  • Можно ли узнать HypeSquad пользователя с помощью discord.py?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Комментировать
  • Как сделать APK file?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно просто запустить другой скрипт, который создаст объект телебота с тем же токеном, но не будет использовать polling, а сразу вызовет send_message сколько нужно раз. Но надо не забывать про rate limit.

    PS: Почему тут каждую неделю спрашивают про рассылку ботом по списку? Неужели нет более интересных учебных задач?
    Ответ написан
    3 комментария
  • Почему не приходят 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 это почти в два раза разница...
    Ответ написан
    Комментировать