Задать вопрос
  • Как сделать так что бы ответ от пользователя попал в переменную?

    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.
    Ответ написан
    Комментировать
  • Как поправить поиск в BASH?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Тут нет цикла. Если каждый раз брать 1 рандомный элемент всего списка, то нельзя избежать повторения. Список надо взять один раз и по нему итерироваться:

    for filename in $(find ... | shuf)
    do
       do_something_with "$filename"
    done


    Но тут могут быть побочные эффекты с пробелами и спецсимволами в именах.

    (Зачем в исходном примере было |shuf -n 2|head -n 1 я не знаю, это эквивалент простому |shuf -n 1)
    Ответ написан
  • Как создать многопользовательского бота в Telegram на Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ошибка в том, что бот сохраняет в одних и тех же переменных данные разных пользователей.

    Решение этой задачи называется FSM (Finite State Machine - конечный автомат) и в указанной библиотеке есть простая реализация FSM на основе метода register_next_step_handler. Пример.
    Ответ написан
    2 комментария
  • Как выровнять блок с информацией об авторах справа и добавить подписи под прочерки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Верстать \TeX-документ на низкоуровневых \box'ах это особое искусство, и не всё там будет просто... Что-то типа такого:

    \small{
         \vbox{
              \hfill
              \vbox{
                   \hbox to 6cm{Научный руководитель:\ \hrulefill}
                   \hbox to 6cm{\strut\hrulefill}
                   {\tiny\it\hbox to 6cm{\hfill(имя)\hfill}}
                   \hbox{Студент группы ...}
              }
         }
    }


    Сюда бы ещё \vtop to 0cm{...\vfill}, чтобы подписи не раздвигали строки, но что-то сходу не получилось, позабыл я уже как все эти шаманства делаются...
    Ответ написан
  • Так и должно быть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это нормально - vim обратно более-менее совместим с vi, поэтому в реальных системах в его качестве часто стоит не доисторический мамонт, а какой-то из более поздних (не всегда vim - в BSD-системах это, насколько помню, часто бывает elvis или nvi). Но, скорее всего, это урезанная сборка, которая ещё и понимает, что её запустили по имени vi, а не vim, и начинает симулировать некоторые старые вышедшие из моды особенности vi.

    Смотрим:

    shurik@ubuntu ~ $ ls -l `which vi`
    lrwxrwxrwx 1 root root 20 янв 29  2016 /usr/bin/vi -> /etc/alternatives/vi
    shurik@ubuntu ~ $ ls -l /etc/alternatives/vi
    lrwxrwxrwx 1 root root 16 ноя 13  2020 /etc/alternatives/vi -> /usr/bin/vim.nox


    Скорее всего, в твоём случае там будет ссылка на vim.tiny - сильно урезанную сборку vim.
    Ответ написан
    Комментировать
  • Как исправить ошибку в написании Telegram-бота - python (aiogram)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет реагировать. Ведь в момент выполнения этого кода message.text == '/game1'.

    Ищи примеры по ключевым словам FSM aiogram.
    Ответ написан
    Комментировать
  • Это можно считать микросервисной архитектурой?

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

    Микросервисы - это не про распилить приложение хоть как-нибудь на несколько файлов. Это про разделение функций, резервирование, масштабирование и отказоустойчивость. А также про непрерывную разработку и раскатку.
    Ответ написан
    4 комментария