Задать вопрос
  • Можно ли получить телеграм id по номеру телефона?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потенциально клиентский API Телеграма открыт и позволяет сделать поиск по номеру телефона. Но надо понимать, что пользователь может запретить настройками находить себя по номеру телефона. Также надо понимать, что при сколько-нибудь массовом поиске по номеру телефона Телеграм отреагирует и заблокирует.

    Рекомендую отказаться от этой затеи.
    Ответ написан
    2 комментария
  • Составить запрос в API для проверки работоспособности прокси сервера на Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    405 возвращает потому что в доке ошибочно http:// вместо https://, который приводит к редиректу на https:// с GET. Это лечится заменой на https.

    Следующая стадия - полечить ответы об ошибках. Они в ответ возвращают json со строкой, в которой json. Поэтому проверяем, если r.json() текст - интерпретируем как json.

    Сами прокси передавать в POST-запросе через перенос строки в параметре proxy_list:

    import requests
    import json
    
    data = '203.13.32.122:80\n203.13.32.122:443'
    r = requests.post('https://proxy-checker.net/api/proxy-checker/', data={"proxy_list": data })
    
    print (r)
    
    resp_json = r.json()
    if isinstance(resp_json, str):
      resp_json = json.loads(r.json())
    print (json.dumps(resp_json, indent=2, ensure_ascii=False))


    Короче, очень кривой API...
    Ответ написан
  • У всех одинаковое кол - во рефералов, что делать?

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

    cur.execute('UPDATE users SET refferals = ?', str(refs))


    Это стандартная ошибка update without where. При таком запросе UPDATE изменяет все строки таблицы на одно и то же значение. Нужно изменять с фильтром WHERE конкретную запись.
    Ответ написан
    Комментировать
  • Как поймать юзер-бота телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В общем случае это проблематично. Но если совсем-совсем не жалко пользователей, то можно сделать так: удалить половину, запостить какую-нить хрень, посмотреть была ли утечка хрени. Если была - юзербот в этой половине, не была - в другой половине. Дальше возвращаем удалённых пользователей обратно и убираем только половину группы с юзерботом... в общем, бинарным поиском.

    Бедные пользователи...
    Ответ написан
  • Как организовать прогресс бар в дискорд боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Короткий ответ: не надо так делать.

    Длинный ответ: можно отправить сообщение и затем его через равные промежутки редактировать. Но это будет не то использование API, которое предполагает Discord. Можно упереться в лимиты API. Можно получить предписание при попытке review бота. Библиотеки типа tqdm обычно предполагают вывод прогрессбара в консоль, где нет никаких ограничений. И они умеют терминальную псевдографику, которая в Discord недоступна, так там нет терминала.

    Правильный Discord-way - это slash-команды с interaction, выполнение команды или нажатие на кнопку приводит к запуску interaction, в процессе которого пользователь видит сообщение с тремя мигающими кружочками, а потом финальное сообщение.
    Ответ написан
  • Какие права выставить на файл sqlite базы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше не "ставить из пакета". Это лишает смысла проверку целостности пакета по контрольным суммам, усложняет установку обновлений. Поэтому правильнее иметь некую "эталонную" базу, которую копировать в целевое размещение. Как вариант, в пакете держать .sql (.sql.gz) для инициализации базы. Саму инициализацию делать скриптом (как initdb в postgres) или описать в инструкции что куда скопировать/выполнить. К слову, для процесса обновления тоже может потребоваться механизм, так как структура данных может меняться в новых версиях. Процесс первичной инициализации и последующего обновления можно сделать частью post-install скрипта пакета.

    Базу следует класть не в /usr (в классической теории UNIX-систем /usr может вообще монтироваться в read-only, например, по nfs), а в /var, лучше /var/lib/имя_программы. Сделать специальную системную группу без пользователей вполне нормально, так делают. В инструкции следует описать, что пользователей надо в неё добавлять. Соответственно, на файл права 660, на каталог 770.

    Если пользователи будут работать с этой базой параллельно-одновременно, а не строго по очереди, то потребуется ещё механизм блокировок. В этом случае лучше рассмотреть полноценную СУБД или хотя бы вынести работу с базой в отдельный сервис, с которым программа будет взаимодействовать.
    Ответ написан
    7 комментариев
  • Вложенный цикл_при решении, почему ошибка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    acres это list, а не dict, и поэтому итерация index in acres перебирает не индексы (ключи), а значения.

    Надо перебирать или range(len(acres)), или использовать enumerate(acres).
    Ответ написан
    Комментировать
  • Бот проверки подписки в телеграм работает не корректно, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бот всё делает так, как написано. А написано проверить, что проверяем, что пользователь по очереди creator/administrator/member и если нет - то ругаемся. Соответственно, если пользователь подписан, то два раза ругнётся и один раз поздравит (в соответствии с тем, какой у него статус, это будет 1/2/3 сообщение в цепочке).

    Надо выкинуть цикл for stat in status вообще. Получить статус пользователя один раз и проверить его:

    status = bot.get_chat_member(chat_id = '-1001670595457', user_id = message.from_user.id).status
    if status in ['creator, administrator', 'member']:
        ...
    Ответ написан
    2 комментария
  • Bash-скрипт: как заменить данную строку в файле на переменную?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В данном конкретном случае намного более адекватным было бы использовать include в nginx.conf отдельного конфига, который генерировать скриптом.
    Ответ написан
    Комментировать
  • Как вывести массив одним сообщением чтобы значение было с новой строчке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну если в цикле делать message.answer по числу элементов в market_name, то сколько ответов напишет бездушный бот? Надо сообщение собрать в одну переменную и затем отправить за один раз. И два цикла тут вообще не к месту, всё можно в одном делать:

    answer_message_text = ""
    for tickers in data2['tickers']:
        answer_message_text += f"{tickers['market']['name']} - {tickers['trade_url']}\n")
        # а надо ли ещё какие-то массивы использовать?
        #market_name.append(tickers['market']['name'])
        #market_link.append(tickers['trade_url'])
    await message.answer(answer_message_text)
    Ответ написан
  • AIOGRAM Как скачать фото от пользователя и дать фото уникальный id?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самое простое и чаще всего самое разумное - использовать числовой id, монотонно растущий, типа auto_increment в mysql или serial в postgres.
    Ответ написан
    Комментировать
  • Почему второе значение переменной не останавливает цикл?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ещё б оно иначе работало:

    >>> b = "это все" or "конец"
    >>> b
    'это все'
    Ответ написан
    Комментировать
  • Можно ли как то через админку wordpress узнать внешний адрес к phpmyadmin?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    phpmyadmin и wordpress - это два разных движка для двух совершенно разных задач, никак друг с другом не связанные. Более того, phpmyadmin рекомендуется устанавливать в подкаталог с неочевидным именем и закрывать дополнительно http-авторизацией. Также можно дополнительно с помощью chmod закрывать к нему доступ вообще полностью, когда он не нужен, а ещё лучше его вообще не ставить, ибо зачем создавать себе потенциальную уязвимость на пустом месте? В общем, если владелец сайта не совсем дурак, то phpmyadmin у него мом совсем нет, или его фиг найдёшь, а если и найдёшь - не попадёшь внутрь никогда.
    Ответ написан
    Комментировать
  • Как сделать из int str?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну вот у тебя в row набор значений из базы по uid=..., тебе нужно взять то что тебе нужно и отобразить в названия ролей. Например, с помощью словаря, в котором каждому числовому значению присвоено своё строковое:

    my_awesome_dict = {
        1: "Первый",
        2: "Второй",
        10: "Десятый".
    }
    
    print (my_awesome_dict[admin])


    Зачем там дальше делается неправильный insert? Он же просто вернёт ошибку, так как в запросе нет никакого admin, чтобы вставить в таблицу.
    Ответ написан
  • Мейл-хостеры, позволяющие спокойно отправить по SMTP+SSL сотню-другую мейлов, без риска блокировки ящика?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть множество сервисов для рассылок, и у них бывают бесплатные пакеты. Например, у MailChimp 12 тыс. писем в месяц, у SendPulse - 15 тыс., у SendSay - 1 тыс. Рекомендую посмотреть в их сторону.
    Ответ написан
    Комментировать
  • Как убрать ошибку в TeleBot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так проверяй, что message.text cостоит из цифр (например, методом isdigit). Или лови исключение ValueError.
    Ответ написан
    Комментировать
  • Как парсить карточку товара Wildberries на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что в странице и правда нет этой информации, она потом рендерится с помощью js. Решать так же, как и всегда: либо с помощью Selenium, либо разобраться, что как js получает данные, и достать их самому.
    Ответ написан
  • Как спарсить это значение через python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет. Таблица

    <tbody class="table table-hover usdtrub_ask asks">

    пустая и заполняется js после загрузки страницы. Надо или использовать Selenium, или разобраться, откуда скрипт подгружает эти данные, и воспроизвести (подсказка: wss://ws.garantex.io).
    Ответ написан
    Комментировать
  • Discord.py Хочу сделать команду autoclear и присвоить ее каналу, но не пойму как это реализовать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    только начал изучать питон


    В этом-то и заключена проблема. Разумеется, если не понимать, что делаешь, то будет получаться непонятно что.

    В данном случае что происходит?

    1. Мы ловим любое сообщение на любом сервере, где есть бот, в любом из каналов, которые боту видны.

    2. Затем мы зачем-то получаем канал с фиксированным id.

    3. Затем мы обращаемся в этом канале к свойству message (а оно там есть? и что это будет, сообщение? какое?) и от него вызываем метод delete, причём с параметром message.

    В результате даже если этот, с позволения сказать, код удастся запустить, он работать всё равно не будет, зато будет кидать ошибки.

    Не нужно пытаться наугад писать бота. Это как пытаться залить бензин в автомобиль куда получается: в бачок для масла, в выхлопную трубу, в нипель на колесе... - в надежде, что она всё-таки поедет.

    Увы, но нет. Сначала надо освоить язык, начиная с элементарных основ, описываемых в учебнике. А уж потом переходить к более сложным темам.
    Ответ написан
  • Как сделать минимального бота?

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

    Если %любимого_языка_программирования% нет, как и вообще навыков программирования, то обращаемся на фриланс.
    Ответ написан
    Комментировать