• Из-за чего возникает ошибка и как исправить?

    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.
    Ответ написан
  • Как исправить Message to delete not found?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Тут делается reply, а затем через 30 секунд удаление этого сообщения. Если нажать кнопку удаления, то сообщение будет удалено, но удаление через 30 секунд всё равно будет вызвано и приведёт к ошибке, ведь сообщения и правда уже нет.
    Ответ написан
  • Как добавить в discord.py Слеш команды?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Последняя опубликованная стабильная версия discord.py очень старая, выпущена давно (до прекращения автором разработки) и не поддерживает slash-команды. Надо или ставить версию из git (автор недавно возобновил разработку), или использовать форки discord.py (disnake, nextcord, pycord), в которых поддержка таких команд уже работает в стабильных версиях..
    Ответ написан
    Комментировать
  • Python: как оставить в текстовом файле строки определенного формата?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На самом деле этот файл представляет из себя json, который и надо разбирать как json, не занимаясь разбиением на строки и прочей ерундой:

    import json
    
    json_text = '''{"total":20,"rows":[
    {"id":123,"mark":null,"Status":2,"MessageNumber":123456789,"text":"Привет"},
    {"id":1234,"mark":null,"Status":1,"MessageNumber":23456789,"text":"Пока"},
    {"id":12345,"mark":null,"Status":2,"MessageNumber":345678, "text":"Ало"}]
    }'''
    
    data = json.loads(json_text)
    
    numbers = [x["MessageNumber"] for x in data["rows"]]
    print (numbers)
    with open("output.txt", "w") as f:
       print (", ".join(str(x) for x in numbers), file=f)
    Ответ написан
    Комментировать
  • Можно ли общаться с телеграм ботом в канале, но так чтобы этого не было видно остальным?

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