Задать вопрос
  • Как сделать динамический перевод i18n aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Использовать _ имеет смысл, когда в пределах скрипта используется один язык. При множестве языков лучше использовать class based api.

    См. также https://qna.habr.com/q/960557
    Ответ написан
  • Как избежать ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вплоть до версии 3.35 в sqlite нельзя было удалять колонки вообще https://sqlite.org/changes.html#version_3_35_0
    Ответ написан
    Комментировать
  • Телеграм-бот не обрабатывает сообщения, что не так (pytelegrambotapi)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так, как написано сейчас, работать не будет. Потому что регистрируется несколько обработчиков с одинаковым условием content_types=text, и применяется только первый. Надо как раз использовать bot.register_next_step_handler (или городить свой велосипед на замену). Смысл обработчиков именно в том, что они получают сообщение, обрабатывают его и завершаются. Ждать следующего сообщения не нужно.

    И зачем вообще внутри одной функции описывать другую? Так иногда делают, но в данном случае это не имеет смысла.
    Ответ написан
  • Как правильно отправлять запросы к Telegram API (не Bot API)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Там не просто http-протокол, поэтому легко это повторить нельзя. Если интересно именно php, то советуют библиотеку https://github.com/danog/MadelineProto

    Для python - библиотека telethon или, как вариант, pyrogram. Для js - mtproto-core. Большинство ботописателей используют python и telethon.
    Ответ написан
    Комментировать
  • Как исправить ошибку при работе с inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А что делает message_text у InlineQueryResultArticle? Это параметр конструктора InputTextMessageContent. Неудивительно, что ругается.
    Ответ написан
    Комментировать
  • Что делать если не работают команды кроме bot event?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это весьма популярная проблема, и решение есть в официальном FAQ https://discordpy.readthedocs.io/en/stable/faq.htm...
    Ответ написан
    Комментировать
  • Как заставить бота работать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А как он должен работать, если ты в обработчике zodiac создаёшь переменную msg, но никаких сообщений не отправляешь? До кучи, как по-твоему это будет работать, если call.data на всех кнопках одинаковый, как бот их будет различать?
    Ответ написан
  • Можно ли узнать ответ на сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ответ написан
    Комментировать
  • Как сделать append на json обьект?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Используем метод update:

    my_dict={ "foo": "bar" }
    
    my_dict.update({ "lorem": "ipsum" })
    Ответ написан
    Комментировать
  • Бот притворяется пользователем?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это всё равно невозможно, даже если очень захотеть. Бот может писать только от своего имени, юзербот (запрещён в РФ^Wправилами Discord) может писать от имени конкретного пользователя - своего владельца. От имени любого пользователя писать нельзя.
    Ответ написан
  • Aogram Почему бот не отвечает на сообщение?

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

    Надо или обрабатывать обе команды в одной функции, или отфильтровать в декораторе так, чтобы он применялся только к конкретным сообщениям

    Условие commands=["баланс"] в декораторе позволит использовать команду как /баланс

    А вот такой вариант:

    @dp.message_handler(lambda message: message.text and (message.text.lower() == "баланс"))
    позволит сделать то же самое без / перед словом "баланс". И вообще, так можно делать более сложные проверки.
    Ответ написан
  • Как сделать мультиязычность в aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как и любую многоязычность - через замену прямого вывода строк на языкозависимую подстановку нужного варианта. Можно как самому запилить, так и использовать готовые решения. Например, вот тут обсуждали gettext https://qna.habr.com/q/960557
    Ответ написан
  • Как записать сообщение пользователя тг бота в переменную и передать ее в парсер(переменная это абривиатура криптовалюты),?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Использовать register_next_step_handler пример.
    Ответ написан
    Комментировать
  • 2 L2TP Server'a за NAT?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это неизбежно, так как нельзя сделать nat в два разных адреса по одним и тем же портам, да и как тогда их различать? Придётся или использовать один сервер для всех подключений, или разносить их на разные внешние адреса. Как вариант, можно использовать VPN, позволяющий работу по любому порту (openvpn, wireguard и многие другие это позволяют).
    Ответ написан
  • Как писать программы, если отключат от лицензированного софта?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Будем писать код в блокноте и компилировать с помощью gcj. Да, конечно, будет непросто, а кому сейчас легко?
    Ответ написан
    Комментировать
  • Как сохранить результат работы парсера в файл .txt?

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

    Тут ошибка в том, что файл открывается заново в каждой итерации цикла, что само по себе неразумно, а также и перезатирается его содержимое. Поэтому-то и получается одна строка в итоге. Для исправления надо вынести открытие файла на уровень выше, чем for. В этом случае он будет открыт один раз и закрыт только после завершения цикла.
    Ответ написан
    9 комментариев
  • Почему записывает данные иероглифами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Исправить этот файл можно так:

    iconv -f utf-8 -t utf-16 < test.txt | sed '1s/^\xFF\xFE//' > test_fixed.txt


    Под Linux советую encoding не использовать при работе с файлами, так как если специально не намудрить, будет правильно и красиво использоваться utf-8.
    Ответ написан
    3 комментария
  • Как проверить в лс ли сообщение discord.py?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Использовать свойство channel.type. Для команд также можно использовать декоратор commands.dm_only.
    Ответ написан
    Комментировать
  • Насколько реально нужен консул девопсу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никто не заставляет использовать docker, systemd, ansible и вообще какие угодно системы оркестрации и оптимизации. Необязательно делать шаблоны конфигов или кластерные конфигурации сервисов, необязательно использовать библиотеки настраиваемого логгирования, возиться с балансерами и реприцируемыми базами. Но люди это делают, значит, смысл всё-таки есть?

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

    Консул - это тоже инструмент. Вряд ли хоть кто-то использует его возможности целиком и полностью, тем более что никто не заставляет. Кому-то достаточно того, что у него все сервисы зарегистрированы в одном месте и из коробки имеют автоматическое DNS-имя вида NAME.service.consul. Кто-то использует kv-хранилище для хранения параметров, а кто-то хранит в нём секреты и целые конфиги, настраивает токены с различными acl и скрещивает всё это с consul-template. Вообще, необязательно использовать именно консул, есть и другие инструменты для подобных задач. Например, zk/etcd.

    Консул чаще используют совсем не с ансиблом, а с инструментами оркестрации, в которых сервисы могут расширяться и сворачиваться, перезагружаться и мигрировать. Скажем, пусть у нас есть условный сервис rabbitmq на три ноды. Тогда у нас может быть три контейнера rabbitm{1..3}, при запуске они регистрируются в консуле скриптом запуска вместе с проверками, а далее consul отдаёт их все три в виде имени rabbitmq.service.consul. Если какой-то из них вдруг упадёт, consul оперативно это обнаружит и исключит из DNS проблемный узел. Если вдруг управляющий всем этим администратор или автоматическая система оркестрации посчитает нужным добавить новые узлы или перенести их куда-то ещё в кластере, то consul также отразит все нужные изменения. При этом использующее rabbitmq приложение должно будет знать только адрес rabbitmq.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Любой учебник по python, искать раздел про цикл for.
    Ответ написан
    Комментировать