Задать вопрос
Ответы пользователя по тегу Python
  • Безопасно ли запускать Telegram Бота на компьютере?

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

    Есть сомнения по поводу корректности схемы, правил валидаций, названий полей но их нет смысла озвучивать, если нет описания решаемой задачи.

    Например странно, что в модели студента есть поле "имя студента", как будто там может быть какое-то ещё имя, а просто "имя" будет не именем студента, а чем-то иным.

    В остальном выглядит ок.
    Ответ написан
    2 комментария
  • Чтоб изменения вступили в силу как делать на облаке?

    Прям сервер перезагружать не надо, а вот приложение перезапускать придётся.

    Можно повесить watch, чтобы при изменении файлов оно перезапускалось само.

    Существует еще понятие "hot reload" - замена кода в уже запущено приложении. Обычно на это есть некоторые ограничения (зависит от языка).
    И для этого нужно, обычно, заранее внести какие-то изменения в приложение, чтобы оно было готово к такому
    Для питона нашёл вот такую штуку:
    https://github.com/breuleux/jurigged
    Ответ написан
    Комментировать
  • Как воспроизводить код при закрытии приложения?

    неважно, закрыл ли ее юзер нажатием на крестик, через диспетчер задач, или программа просто "отработала" весь свой код

    А ещё если вдруг пропало электричество или хулиган перерезал провода, ага :)

    Вообще следующий способ предусматривает даже такие экстремальные случаи
    Надо, чтобы приложение отправляло на сервер условное сообщение "disconnected"

    Раз уж это клиент-серверное приложение, то почему бы прямо не отловить момент, когда соединение разорвано? В рамках TCP и так посылается специальное сообщение о том что клиент (или компьютер клиента) закрыл соединение (и есть механизм для отработки случая, когда соединение было оборвано не по инициативе клиента)

    В качестве запасного варианта - по времени неактивности (например во время работы приложение может с некоторой периодичностью слать сообщение типа "ещё живой, ещё работаю", а как только оно перестало такие слать (пропустило X тактов) - считаем что disconnected)
    Ответ написан
    Комментировать
  • В какой структуре лучше хранить массивы синонимов номенклатур?

    Можно хештаблицу/словарь использовать, где ключом будет синоним, а значением - "каноничное" название / идентификатор.
    Каноничное название собственно тоже в ней будет и будет указывать на само себя.

    Тогда при запросе ты просто будешь сравнивать, что значение у двух ключей одно и то же.
    Ответ написан
    Комментировать
  • Остаток от деления в Python -1%5?

    По определению деления. Школа 3 класс.
    Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
    Остаток всегда больше нуля.
    При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

    Более формально это выглядит так:

    Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

    a - делимое
    b - делитель
    q - частное (целое)
    r - остаток

    Вот и получается
    1 = 0 * 5 + 1
    -1 = -1 * 5 + 4

    UPD: в python это не совсем так. На самом деле в Python действительно релизован mod, как говорит Rsa97, но у этой операции нет чёткого определения, по тому в разных языках оно реализовано по разному:
    https://en.wikipedia.org/wiki/Modulo
    q = floor(a/b)
    r = a - b*q

    В первом случае: q=0, r=1
    Во втором: q=-1,r=4
    (в принципе то же самое)
    Интересное начинается, если делитель отрицательный:
    Если взять a=1, b=-5, то тогда r=-1, q=-4
    А вот при обычном делении с остатком: r=0, q=1
    Ответ написан
    Комментировать
  • Tinkoff api invest не принимает токен. В чём ошибка?

    Там где "мой токен" - должен быть не токен, а название переменной окружения, в которой токен лежит.
    Если хочет прямо в коде держать токен, то os.environ не нужен.
    Ответ написан
    Комментировать
  • Поддерживаются ли на VPS c Windows горячие клавиши ОС (вырезать, копировать, вставить)?

    Немного поправлю.
    1. Поддерживает, если это не Windows Server Core. Значит, скорее всего, поддерживает.

    2. Конфликты вполне могут быть - надо тестить.

    Но это решаемо как минимум двумя способами:
    1. Мало кто мониторит процессы путём захода непосредственно на сервер через RDP. Посмотри в сторону Prometheus + grafana, видимо настало время их изучить.

    2. Возможно, твою задачу можно решить и без использования буфера обмена. (Например, вместо питания в буфер обмена - можно просто сохранять нужный текст в переменные и просто набирать его там, где это нужно)
    Ответ написан
    Комментировать
  • Как из проекта на python RenPY сделать установщик?

    1. Задумайся, а нужен ли тебе установщик вообще? Что такого ты хочешь сделать в системе пользователя при установке, что для этого он тебе понадобился? Очень много проектов распространяется в портативном виде без установщиков.

    2. Возьми любой инструмент для создания инсталлятора. Например Inno Setup
    https://jrsoftware.org/isinfo.php
    Или вообще изкоробочное виндовое: msi и msix, но там имхо посложнее.
    Ответ написан
    Комментировать
  • Что будет с моим кодом если я удалю, и скачаю заново питон 3.9.5?

    Главное свой код по пути не удаляй
    Ответ написан
    Комментировать
  • Существует ли content_types = число?

    content_types - Это контент в терминологии телеграма.
    Так что пусть принимает текст, а дальше уже своим кодом все валидации делай.
    Ответ написан
    Комментировать
  • Как в файле js использовать код python?

    Видимо вам нужен https://pyscript.net/
    Ответ написан
    Комментировать
  • Почему Telegram банит аккаунт при использовании api спустя 2-3 запроса?

    И я не спамил запросами, задержка между ними 3-4 сек.

    Телеграм с большим подозрением смотрит на подключения из неофициального приложения и может банить даже за такое.
    Ну и спам с задержкой хоть даже в сутки - всё ещё остаётся спамом.
    Ответ написан
    Комментировать
  • Как создать Токен для Tinkoff?

    https://www.tinkoff.ru/kassa/dev/payments/#tag/Sta...
    Видимо таки какие-то параметры не те указываешь.

    Вот, как на самом деле формируется токен:
    https://www.tinkoff.ru/kassa/dev/payments/#section...
    Перед выполнением запроса MAPI проверяет, можно ли доверять его инициатору. Для этого сервер проверяет подпись запроса. В MAPI используется механизм подписи с помощью токена. Мерчант должен добавлять токен с каждому запросу, где это требуется.

    Токен - это не просто конкатенация. Это конкатенация + хэширование


    Она направила на документацию и на этот сайт https://tokentcs.web.app/

    Этот сайт как раз демонстрирует, как происходит генерация токена исходя из пароля и параметров запроса

    Вот прям пошаговый алгоритм:
    1. Собрать массив передаваемых данных в виде пар Ключ-Значения. В массив нужно добавить только параметры корневого объекта. Вложенные объекты и массивы не участвуют в расчете токена.

    В нашем случае это TerminalKey и PaymentId

    2. Добавить в массив пару {Password, Значение пароля}. Пароль можно найти в личном кабинете Мерчанта
    3. Отсортировать массив по алфавиту по ключу
    У нас получается Password, PaymentId, TerminalKey
    4. Конкатенировать только значения пар в одну строку
    У нас получается Password + PaymentID + TerminalKey
    ВАЖНО! payment_id нужно брать именно такой, какой тебе пришёл из API. Лишние или недостающие нули - всё сразу пойдёт по сам-знаешь-какому месту.

    5. Применить к строке хеш-функцию SHA-256
    В питоне для этого можно использовать hashlib
    Я хз каким образом без этого у belkinark заработало. Мб он что-то напутал.
    6. Добавить получившийся результат в значение параметра Token в тело запроса и отправить запрос
    Ответ написан
    8 комментариев
  • Как скомпилировать два файла python в один exe файл?

    упакуй код каждого из файлов в функции и добавь ещё код, который будет выбирать, какую функцию надо запустить.
    Ответ написан
    Комментировать
  • Можно ли вместо bot_token использовать user_token в библиотеке disnake?

    В теории то можно, а по факту скорее всего нельзя.

    Я хочу автоматизировать рассылку рекламы на дискорд сервер.

    И таким образом нарушишь сразу два пункта TOS и очень быстро словишь пермач)

    А ошибка говорит о том что ты (клиент) не имеешь права на вызов того метода, который ты (disnake) хотел вызвать.

    Видимо разработчики disnake не предусматривали такой сценарий и не стали заморачиваться с токенами пользователей.
    Ответ написан
    Комментировать
  • Что лучше подходит для изучения алгоритмов (Python vs C#)?

    Раз считаешь, что тебе это нужно - изучай сразу два языка тогда.
    Обрати тогда ещё внимание на какие-нибудь совсем низкоуровневые языки. Rust или Си, например - они даже будут полезными при работе с питоном. (смотри pyo3)

    А ещё можешь упороться и работать с данными на C# - вроде все инструменты есть :)
    Ответ написан
    1 комментарий
  • Как отправить команду в Telegram чтобы он закрылся?

    Нет.
    Ответ написан
    Комментировать
  • Реалтайм на питоне возможен?

    Нет. Планировщик ОС легко может ворочать приоритетами твоего приложения и от этого скорость немного будет скакать.
    Также тут будет влиять скорость компьютера.
    Чуть лучше будет, если попробуешь задавать задержку явно через sleep.

    Если хочется приблизиться к чему-то более-менее равномерному - используй таймеры, которые предоставляет ОС.

    Там тоже не будет точности реалтайма и часто не будет возможности задать очень низкий интервал, но погрешность будет более предсказуемая и не будет сильно зависеть от железа.

    А чтобы измерить задержки - выводи время в каждом таком такие (можно даже не реальное, а системное).

    Потом посмотри на равномерность интервалов через какой-нибудь excel.
    Ответ написан
    Комментировать