Задать вопрос
  • Как отправить документ больше 50-ти мегабайт?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В боте (aiogram) надо сделать сохранение куда-то списка текущих запросов (chat_id - запрос). Также сделать обработчик сообщений с content_type видео, который будет получать видео от юзербота, находить по нему в списке запросов chat_id, в который затем отсылать видео по file_id.
    Ответ написан
    Комментировать
  • Как распространять приложение под linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я не знаю, почему все так активно советуют собирать пакеты. Надо начать с того, что в Linux никогда не было принято использовать pyinstaller... почему? Потому что в Linux python идёт из коробки. В Windows сложно вынуждать пользователей устанавливать интерпретатор языка и все зависимости, тут же с этим проще гораздо.

    Так что можно просто распространять архив с приложением и инструкцией по запуску вида:

    virtualenv -p python3 env
    . env/bin/activate
    pip install -r requirements.txt
    ./app.py
    Ответ написан
    2 комментария
  • Согласование архитектур в Linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, конечно, Linux поддерживает кучу архитектур, но код для архитектуры mipsel нельзя запустить на armhf. Поэтому проблемы именно "кучи" нет - никто не использует программы, которые всё равно не запустятся.

    Есть проблема только с поддержкой совместимх архитектур x86 и x86_64. В результате в основном пришли к тому, что есть /lib|/usr/lib|/usr/local/lib и /lib64|/usr/lib64|/usr/local/lib64 или такие же с lib32|lib или даже ортогональный им lib32|lib64 для библиотек, а для бинарников такой проблемы нет, потому что какая разница, будет ли единственный файл /usr/bin/program 32-битной или 64-битной приложенькой? В крайнем случае в имя программы можно добавить 32 (или даже -x86|-x86_64) на конце.

    С учётом того, что в LINUX можно положить библиотеки в /foo/bar, а исполняемые файлы в /lorem/ipsum и разрулить это с помощью PATH и ld.so.conf, можно сделать вообще как душе угодно. Не забываем также, что в грамотно организованной и правильно администрируемой системой всё по возможности ставится из пакетов. Поэтому каждый файл учтён, ничто не будет перезаписано при установке/обновлении.
    Ответ написан
  • Где в моём коде ошибка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет работать. После отправки сообщения "Вам есть 18?" в переменной message не появится нового сообщения. И вообще, надо привыкать, что боты работают по событиям. Нажатие на кнопку - это новое событие, которое сделает новый вызов обработчика.

    Для таких задач лучше использовать FSM пример https://github.com/eternnoir/pyTelegramBotAPI/blob...
    Ответ написан
    Комментировать
  • Из-за чего возникает ошибка и как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    При вызове all_stories происходит промотка StringIO на конец виртуального "файла", и второй запуск all_stories() получает пустой список. Тут же all_stories() вызывается каждый раз в get_storie заново.

    Проще с самого начала хранить тексты не в не StringIO, а в list:

    stories = ["История 1", "История 2"]
    stories.append("А также история 3")
    Ответ написан
    Комментировать
  • Как работать в с клавиатурой в телеграм боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Использовать gettext(i18n). Например, для aiogram даже есть готовый middleware: https://docs.aiogram.dev/en/latest/examples/i18n_e...
    Ответ написан
    Комментировать
  • Как заставить volumes Docker compose не затирать данные из контейнера?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Запись

    - src:/var/www/html

    создаёт именованный том src в хранилище (docker volume ls). Надо указывать путь к каталогу, например, как относительный: ./src.

    В образе по-хорошему ничего не надо заранее класть в этот каталог. Если нужно, чтобы в том попали какие-то данные, то их можно туда, например, распаковать при первом запуске контейнера из заготовленного архива. Но это в принципе считается антипаттерн, докер предполагает, что контейнер - не обёртка для запуска снаружи подсунутого содержимого - а законченное приложение.
    Ответ написан
    Комментировать
  • Предоставляет ли aiogram возможность добавить человека в группу?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак нельзя. InlineQueryResult вообще кэшируются на серверах Телеграма, и если через короткое время придёт такой же запрос, то он даже до бота не долетит.
    Ответ написан
  • Задание из егэ по информатике.Что не так в моём коде?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Неотрицательные - это больше или равно 0. У тебя же x и y начинаются с 1. Например, при a=14 можно взять x=15, y=0, первое условие будет ложно, второе тоже, но оба числа целые неотрицательны - условие задачи выполнено.

    Ну и решение наивным перебором тоже никуда не годится. А вдруг условие перестанет выполняться, если они будут больше 200? Это тоже надо обосновать. Например, нетрудно видеть, что при x и y больше 6 вырашение 2x+3y будет точно больше 30 (=2*6+3*6), так что можно перебирать только числа от 0 до 6 (конечно же, в виде range(0,7), так как генератор range не включает последнее значение).

    Но вообще по-моему этот вопрос скорее всего не на программирование, а на понимание логических операций. И решать его правильно алгебраически или геометрически, как "должно выполняться или то, или другое". И тогда можно не останавливаться на целых значениях x и y, а позволять любые неотрицательные. Ответ, кстати, будет тот же самый: a=15.
    Ответ написан
    1 комментарий
  • Как сделать так что бы ответ от пользователя попал в переменную?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо внутри функции объявлять другую функцию! Это делают в некоторых специфических случаях (например, создание нового декоратора), но чаще всего это категорически неправильно и никаких задач не решает. В том числе и в этом случае никак это не поможет.

    Что касается задачи, то это типичный FSM https://github.com/eternnoir/pyTelegramBotAPI/blob...

    Использовать одну глобальную переменную тут бессмысленно, так как с ботом взаимодействует много пользователей, и у каждого должно быть своё значение. А не одно на всех.
    Ответ написан
    3 комментария
  • I made a telegram bot, it worked, but I restarted it, the same code that worked started to give an error. what to do?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, что содержимое data сохранялось только в памяти и после рестарта бота было потеряно. Надо было сохранять куда-нибудь.
    Ответ написан
    Комментировать
  • Почему 2 id, хотя один должен быть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что надо различать message.from_user.id и message.chat.id. Первое - id отправителя. Второе - id чата. На текущий момент API Телеграма реализован так, что для привата с ботом chat_id == user_id, хотя по чисто формальным признакам это необязательно и id чата может отличаться от id пользователя. Но для групп это, разумеется, не может быть так, у групп id отличается от id пользователя всегда.
    Ответ написан
  • Как сделать универсальную файловую помойку?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Тут главная ошибка в том, что у каждого персональная шара, это плохая практика. Правильнее пользователей объединять в группы, а каждой группы завести шару. Плюс могут быть разные перекрёстные шары (для всех сотрудников компании, для конкретных департаментов, для отделов, шары узкотематического характера...). Тогда проблем бы не было. У каждого пользователя есть свой набор доступных помоек в соответствии с его уровнем полномочий, и не нужно всё время перелогиниваться.

    Интересно, что даже в таком случае почему-то некоторые норовят в общей шаре отдела создать многочисленные персональные "именные папки" и держать везде копии одних и тех же иногда не очень отличающихся файлов.
    Ответ написан
    Комментировать
  • 403 ошибка при fetch запросе к API Яндекс Диск, в чем проблема?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Оказывается, yandex почему-то возвращает 403, если в заголовках запроса есть параметр Referrer. Помогло добавить в html страницы:

    <meta name="referrer" content="no-referrer">

    После этого Referrer из запросов исчез, и всё заработало.
    Ответ написан
    2 комментария
  • Как сделать рассылку в телеграмм незнакомым пользователям?

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На heroku нельзя хранить файлы, так как любой инстанс скрипта может быть запущен на разных узлах сервиса и в любой момент перезапущен. https://help.heroku.com/K1PPS2WM/why-are-my-file-u...

    Зато на heroku можно использовать базу postgresql и в ней хранить данные. Также можно запилить для себя какой-нибудь интерфейс для выгрузки этих данных прям в самом heroku, например, в виде файла, отдаваемого по секретной ссылке с ключом или прямо чтобы бот своему хозяину посылал по запросу.
    Ответ написан
    Комментировать
  • Какой параметр задать комманде cut?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Конечно, cut -d _ -f 1 как раз берёт всё в строке до первого подчёркивания.
    Ответ написан
    1 комментарий
  • Как на питоне проверять наличие файла и считать его название?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотреть в сторону модуля glob

    from glob import glob
    
    for file_name in glob("path/to/directory/*.csv"):
        ...
    Ответ написан
    Комментировать
  • Как удалить установленный из исходников Perl?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как правило, софт можно удалить с помощью make uninstall из каталога с исходными текстами. Если установка шла в расположение по умолчанию, то теперь ошмётки надо искать в /usr/local.
    Ответ написан