• Как разобраться с выводом valgrind?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    При попадании в блок:
    if (!result)
    память реально НЕ выделена и free от неё - это попытка освободить память по адресу NULL. Разумеется, это не будет работать.

    upd: Прочитал вопрос ещё раз внимательнее. Надо не забывать делать free в конечном месте использования этого result:

    result = get_next_line();<br>
    ...do_something_with_result...<br>
    free(result);


    Иначе да, при каждом вызове get_next_line будет выделяться новый блок на 2 байта.
    Ответ написан
    3 комментария
  • Как проверить хэш PHP функции crypt на Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В python есть такая же функция в модуле crypt.

    $hash = crypt ($password, $salt);

    from crypt import crypt
    hash = crypt (password, salt)
    Ответ написан
    Комментировать
  • Расшифровывается QRcode в TelegramBotAPI, но расшифровывает характеристики фотографии?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, потому что data представляет из себя экземпляр класса Decoded. Думаю, тебе нужно data.data, да ещё и привести тип bytes к строке: data.data.decode()
    Ответ написан
    1 комментарий
  • Какой есть сервис, где можно отправить смс, можно платно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Операторы сейчас вовсю борются с массовыми смс с федеральными номерами. Поэтому крупные сервисы не могут это предоставлять надёжно. Если используются сим-банки - то их быстро банят. Отправка через SS7 мимо interconnect сейчас работает очень плохо, остались только какие-то серые схемы, в которых уровень доставки уже ниже 50%.

    Легальный способ - аренда имени у всех операторов. Это дорого, да. Но операторы под предлогом борьбы со спамом вынуждают к этому. Либо придётся соглашаться на общие имена у конкретных сервисов (да, я уже прочитал, что тебе этого не хочется).

    И последний способ, который условно нелегален, но при 10 смс в месяц вряд ли кто-то заметит: воткнуть GSM-модем с симкой в свой компьютер/сервер и отправлять через него.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Судя по коду, ты вообще не понимаешь, что написал.

    inp будет содержать строку, введённую с клавиатуры, cmds - пустой список

    Дальше проверяется inp == cmds. Очевидно, что пустой список никогда не равен строке, поэтому мы сразу попадаем в else и один раз выполнем этот блок, после этого программа автоматически хавершается.

    Возьми любой учебник по Python (например, Лутца) и изучи основы. Без понимания базовых вещей вообще ничего осмысленного ты никогда не напишешь.
    Ответ написан
    Комментировать
  • Ошибка из за message.delete()?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Настройки сервера - Модерация - выключить требование 2FA.

    Пишут также, что надо включить 2FA у аккаунта создателя бота, но это кажется нелогичным.
    Ответ написан
  • Как cпарсить тег конкретный тег html если его класс повторяется мне это надо сделать через beautifulsou?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Просто перебрать все нужные:

    for node in xxx.findall('div', class_='foobar'):
      ...
    Ответ написан
    Комментировать
  • Ошибка в sqlite3, поможете?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    cursor.execute возврашает итерируемый генератор результатов. Можно либо пробежаться по нему:

    for row in cursor.execute(...):
       cash, = row
       # или
       cash = row[0]


    Либо сделать fetchall:

    res = cursor.execute(...)
    res_list = res.fetchall()
    cash = res_list[0][0]
    Ответ написан
    1 комментарий
  • Через какой сервис использовать Whatsapp API?

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

    Подключиться могут только бизнесы (можно ИП), причём есть ограничения, например, нельзя продавцам алкоголя и лекарств.

    При выборе следует ориентироваться на две основные вещи: на ценовую политику и на наличие нужных интеграций. Далеко не всякого поставщика поддерживает bitrix, jivochat или что там ещё у вас планируется. До кучи, может влиять юрисдикция конкретного поставщика. Далеко не всем может быть удобно заключать договор с Сингапуром или переводить платежи в Ирландию.

    Выбрав, можно выяснять уже детали подключения, используемый протокол и всё такое. Обычно каждый провайдер заинтересован, чтобы к нему больше подключались, и потому с удовольствием ответит на любые вопросы.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, вообще. Нужно иметь бота, добавленного в этот чат, и делать запрос строго с токеном бота. Без бота использовать Bot API не получится (что весьма логично).
    Ответ написан
    Комментировать
  • Почему приходится вводить Enter чтобы программа дальше работала?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что input считает Enter признаком конца ввода. Пока Enter не нажмёшь, он ожидает ввод.

    Тут нужен аналог getch в DOS/Windows, вот пример модуля, который это реализует https://github.com/joeyespo/py-getch
    Ответ написан
    Комментировать
  • JVM для встраивания в С код существует ли?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ввёл в гугле embedded jvm in c и получил некоторое количество ссылок, например:
    https://stackoverflow.com/a/7506378
    https://www.developer.com/java/data/how-to-create-...
    Полагаю, можно использовать примерно на любой платформе, для которой есть JDK.
    Ответ написан
    Комментировать
  • Как правильно прописать проверку ввода чисел на питоне для ТГ бота?

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

    Гугли примеры register_next_step_handler (если это телебот) или "название_библиотеки finite states machine" в общем случае.
    Ответ написан
    Комментировать
  • Может ли Telegram бот читать каналы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, боту доступны только те каналы, в которые их добавит администратор канала. Читать произвольные каналы можно только с помощью клиентского API.
    Ответ написан
    2 комментария
  • Передача данных в callback_data с pyTelegramBotAPI?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно просто запоминать текст пользователя, а в callback_data передавать какие-нибудь кодовые обозначения нажимаемых кнопок. При получении от пользователя кода кнопки можно по его id достать ранее сохранённый текст и выполнить все нужные действия.
    Ответ написан
    Комментировать
  • При наличии on_message(), @bot.command не работает, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сейчас в коде какая-то каша. Зачем внутри класса MyClient, порождённого от Client, использовать методы с декораторами от ранее созданного инстанса другого потомка Client - commands.Bot? Это не имеет никакого смысла. Убери класс MyClient вообще, а все его методы перенеси на уровень выше (с соответствующим убиранием self везде в аргументах и заменой self на bot в коде). Вместо client.run сделай bot.run.
    Ответ написан
    Комментировать
  • Как записать несколько строк в файл bash?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В копилку к вышесказанному:

    echo -e "str1\nstr2\nstr3" >> file.txt
    Ответ написан
  • Почему await не переключает коррутины?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    asyncio вообще никак не гарантирует порядок, в котором будут выполняться функции и выполняться переключение на следующую. В этом примере, например, будет запущена a() и ничего про запуск b() не будет ещё известно среде выполнения. Затем будет запущена c(), быстро завершится и завершит a().

    Смысла в таком тесте мало - тут всё очень быстро происходит. Я бы рекомендовал для экспериментов вставить asyncio.sleep в функцию c, чтобы она не завершилась так уж быстро, а также во время этого ожидания гарантировано выбралась бы следующая задача - в данном случае продолжилось выполнение main().
    Ответ написан
  • При наличии в коде @bot.event, @bot.commands не работает(делал на python 3.9). Что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так и должно быть в соответствии с написанным. Вызов bot.process_commands(message) случается только тогда, когда сообщение содержит smetanka_v_dele. Вынеси process_commands из if.
    Ответ написан
    Комментировать
  • Как отправить сообщение сразу всем на Discord сервере в python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Написать сообщение в канал, который доступен всем пользователям. Это наилучшее решение в большинстве случаев. Можно использовать упоминания (@here, @everyone, @роль).

    2. Использовать цикл по списку пользователей. Если сообщения одинаковы, то это не очень хорошее решение. Также не все пользователи могут разрешать приём сообщений от сторонних контактов (готовимся отлваливать исключения). Плюс флудить в ЛС не очень хорошо в принципе, особенно если пользователей много (готовимся делать задержки, чтобы не превышать скорость). Ещё надо обратить внимание на то, что по умолчанию бот не имеет права получать через API список всех пользователей сервера, это надо явным образом включать, см. https://discordpy.readthedocs.io/en/stable/intents.html
    Ответ написан
    7 комментариев