• VS Code, Python и куча ошибок. Просто Tk() или tk.Tk()?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Да, это не ошибки,а обычные предупреждения о том, что где-то код написан не соответствует PEP8. Я бы в принципе отключил все варнинги PEP8, они никак не повлияют на подсветку синтаксических и прочих ошибок.
    2. Лучше всё же не импортировать содержимое модуля через *, дабы избежать путаницы.
    import tkinter as tk - нормальный вариант
    3.
    Появляется, когда я переключаюсь на другое окно vs code и обратно
    а до переключения окно tkinter нормально появляется? Рядом случайно нет еще одного файла tkinter.py? Хотя по варнингам с вайлдкарда похоже, что нет. Приложите полный код и полную ошибку, которую получаете
    Ответ написан
  • Как сохранять ответы telegram бота(библиотека - telebot)?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Например, открыть примеры по использованию функций и посмотреть, как это сделано там:
    https://github.com/eternnoir/pyTelegramBotAPI/blob...

    Помимо этого примера, функция так же принимает *args, **kwargs, так что все данные можно сохранять просто в словарь и передавать в register_next_step_handler как еще один параметр
    Ответ написан
  • Что делает этот скрипт?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    FFD9 - последние байты изображения формата jpg.
    Код вытаскивает второе изображение из файла fimrin.jpg и сохраняет в better_fimrin.jpg

    Допустим у нас есть два jpg файла: orange.jpg и apple.jpg (апельсин и яблоко соответственно). Если мы их склеим в 1 файла таким кодом:
    f1 = open('orange.jpg', 'rb')
    f2 = open('apple.jpg', 'rb')
    
    with open('out.jpg', 'wb') as out:
        out.write(f1.read()+f2.read())


    то получим файл out.jpg, который в просмоторщике фото будет выглядеть как апельсин. Хотя на самом деле, после апельсина дописаны байты яблока. Очень упрощено
    orangeblablablaFFD9applelalalalaFFD9

    Код находит индекс FFD9, которые являются концом первого изображения (апельсина), смещает курсор до этих байт (f.seek), затем читает оставшиеся байты, которые являются байтами изображения с яблоком. И сохраняет эти байты в виде нового файла. В общем, вытаскивает скрытое второе изображение из файла. Может быть как часть какого нибудь легкого задания, связанного с криптографией.

    В принципе, код легко ужимается до
    f = open('fimrin.jpg', 'rb')
    content = f.read()
    
    with open('better_fimrin.jpg', 'wb') as out:
        out.write(content[content.index(bytes.fromhex('FFD9')) + 2:])
    Ответ написан
    Комментировать
  • Почему не работает pip на Python 2.7?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Загружаете get-pip.py
    Запускаете его как обычный python файл: python2 get-pip.py

    как винда будет понимать что мне нужно использовать в том или ином случае pip от той или иной версии Python?

    Версия pip будет зависить от очереди в переменных среды. Лично я предпочел бы оставить просто pip для python3, а для второго вводил бы python2 -m pip
    Ответ написан
    Комментировать
  • Что делать с этой ошибкой?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Значит не json вернулся
    Ответ написан
    2 комментария
  • Оцените тестовое задание?

    SoreMix
    @SoreMix
    yellow
    Самого задания не будет? Оценивать то нечего толком. В описании куча грамматических ошибок. На этом можно закончить, это уже говорит о плохом подходе. Вот это вообще без комментариев.
    61eff88f8b71b313754399.png

    Много коммитов с изменением ридми, можно ведь один раз написать грамотно и не редачить по 10 (буквально) раз. Честно говоря, уже на этом бы моменте даже не стал дальше смотреть. Сама "документация" написана тожн абсолютно никак.

    SQL запросы составлены неверно. Нейминги переменных разные. Некоторые переменные вообще непонятно зачем существуют, как, например, error в методе авторизации.
    https://github.com/chigan0/apptrix.test/blob/main/...

    `utils` откуда-то слизаны, там везде почему-то табы, когда в остальном коде пробелы.
    Красиво
    61effb278a845424859968.png

    Английские слова точно так же написаны с ошибками.

    Дока не соответствует коду.
    ?lastname фильтрация по фамилии

    В коде:
    "last_name" in request.args

    JS разработкой не занимаюсь, но первый раз вижу, чтобы форму формировали не через тег form и/или с использованием ajax, а просто пложив инпуты на страницу, без атрибута name и потом собрав их руками в formdata, и через fetch бросить на сервер.

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

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ссылка на файл лежит много где. Банально ее можно получить из сообщения, если знать его id

    params = {'access_token': TOKEN, 'v': 5.131, 'message_ids': [369]}
    
    r = requests.get('https://api.vk.com/method/messages.getById', params=params)
    
    print(r.json()['response']['items'][0]['attachments'][0]['photo']['sizes'])


    Ну и все ссылки на фото лежат буквально в теле updates
    r = requests.get('{server}?act=a_check&key={key}&ts={ts}&wait=90'.format(server=data['server'], key=data['key'], ts=data['ts'])).json()
    print(r['updates'][0]['object']['message']['attachments'][0]['photo']['sizes'])
    Ответ написан
    Комментировать
  • Не работает requests, readmanga выдает 402, что делать?

    SoreMix
    @SoreMix
    yellow
    Нужно завести себе привычку, при отправке запросов, добавлять в заголовки хотя бы User-Agent от нормального браузера. Большинство проблем сразу отпадет

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'}
    response = requests.get(url, headers=headers)
    Ответ написан
    Комментировать
  • Как заставить код перезапускаться после получения ошибки?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Может не перезапускать код, а исправить ошибки, приводящие к падению? А именно, переменная answer не определена, если пользователь написал "неправильный" текст
    Ответ написан
    Комментировать
  • Как сделать проверку наличия или правильность аргумента?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Создать специальный декоратор, и функцию, которая будет обрабатывать эту ошибку.
    Предположим, имеем код
    @bot.command()
    async def kick(ctx, member: discord.Member):


    Можем создать декоратор, в который будем падать, если в функции kick случится ошибка
    @kick.error
    async def kick_error(ctx: commands.Context, error: commands.CommandError):
        # здесь уже делаем что хотим, в зависимости от класса ошибки. Например, если не хватило аргумента, то можно сделать так
        if isinstance(error, discord.ext.commands.errors.MissingRequiredArgument):
            await ctx.send('Недостаточно аргументов')

    и тд

    Следует обратить внимание на раздел с обработкой ошибок
    https://discordpy.readthedocs.io/en/stable/ext/com...
    Ответ написан
    1 комментарий
  • Как обойти систему верификации при автоматизированной регистрации аккаунта?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    можно также автоматически заходить на указанную почту, в которую пришло письмо с кодом, парсить его оттуда и вставлять в поле при регистрации

    Можно

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

    Придется

    Может, запрос перехватить?

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

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Дело в юзерагенте неправильном. Откройте любой сайт вроде myuseragent, и скопируйте свой UA. Или просто из запросов браузера достаньте.

    headers = {'User-Agent': 'ваш UA'}
    request.post(url, data=data, headers=headers)


    Если ну уж прям точно не нужны - можно самому собрать запрос и отправить
    raw_req = requests.Request('POST', url, data=data)
    prepared = raw_req.prepare()
    
    s = requests.Session()
    r = s.send(prepared)
    Ответ написан
  • Telebot добавление пользователей в канал?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Такой возможности нет
    Ответ написан
    Комментировать
  • Как правильно сформировать POST запрос?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Нужно этот словарь преобразовать в JSON строку

    imprort json
    
    data = {"chat_id": chat_id, "text": text, "reply_markup": json.dumps(reply_markup)}


    Либо изначально отправить всё это как application/json
    data = {"chat_id": chat_id, "text": text, "reply_markup": reply_markup}
    requests.post(url, json=data)


    На будущее - читайте ответ запроса
    Ответ написан
    Комментировать
  • Как создать кнопку в FSM, чтобы потом можно было вывести через базу данных?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Если я правильно понял, то хотите отправить боту в ЛС кнопку и потом создать из этой кнопки и текста с фото пост, который потом уйдёт в группу. Саму кнопку отправить никак не сможете, поэтому просто создать ее в коде, как и все другое. Допустим, текст и фото отправили, дальше вешается state, который приведёт в функцию создания кнопки, там уже просто боту отправляется ссылка текстом, и в коде создаётся кнопка. В общем, не нужно никаких кнопок отправлять. Просто делаете обычный обработчик, который примет ваш текст, который будет являться ссылкой. Либа не указана, пусть будет aiogram тогда

    @dp.message_handler(state=Form.button)
    async def process_button(message: types.Message, state: FSMContext):
    
        # ну и тут дальше, либо новые шаги, либо сразу публикация 
        inline_kb = InlineKeyboardMarkup()
        inline_kb.add(InlineKeyboardButton('Ссылка на страницу', url=message.text))
    Ответ написан
    Комментировать
  • При создании команды unban discord.py выдает эту ошибку. Command raised an exception: AttributeError: 'str' object has no attribute 'name' что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В данном случае member является просто строкой. Если вызыванте функцию с упоминанием /unban @user1222, то можно использовать встроенный конвертер.

    async def unban(ctx,*, member: discord.Member):

    Похожи на обычные аннотации типов, описаны тут:
    https://discordpy.readthedocs.io/en/stable/ext/com...
    Ответ написан
    1 комментарий
  • Как сделать что бы меню в телеграм боте было открыто постоянно?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Оно и не должно пропадать, если не устанавливали one_time_keyboard в True
    Ответ написан
    1 комментарий
  • Почему не получается перебрать строки?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Что-то не понимаю, какого эффекта хотели достичь этим циклом?
    for i in range(len(lines)):
            models_list.append(line.strip().split(' / ')[i])

    Исходя из этого уже нужно решать

    А так конечно, после split(' / ') получается 3 элемента. Если вы пытаетесь получить из трех элементов четвертый и выше, то закономерно получаете ошибку
    Ответ написан
  • Каждый раз создавать новый файл при выполнении if?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Это в принципе не верный подход. while бесконечно ведь работает, до конца файла, так что никаких чанков не будет. Как и не будет никаких байт, вы их просто прочитали и забыли. При таком подходе, даже если заменить "r" на "wb" в последнем вашем условии, то вы получите только последний байт из исходного файла (хотя условие вряд ли сработает, файл на 15 байт это я не знаю)

    Алгоритм простой

    Определяем размер чанка, допустим это будет 10.000. Далее, открываем нужный файл в режиме rb, в бесконечном цикле пытаемся прочитать наш чанк (f.read(10000)). Если что-то прочиталось - открываем файл с чанком с индексом, (мы ведь хотим потом собрать начальный файл) в режиме wb, записываем туда наши байты. Если ничего не вернулось - break.

    Ошибок в коде много, сама база выстроена неправильно. Так что проще удалить и написать заного. У вас как минимум выходгной файл почему-то один, какую роль играет file2? После прочтения с переменной byte ничего не происходит, в итоге файла даже не будет,

    По поводу нового имени - просто добавляете к названию какой нибудь префикс или постфикс, или еще что нибудь, что вам нравится. Обычно это номер итерации цикла.

    Если есть желаение учиться - нужно сделать все самому, алгоритм выше я написал, осталось только написать на его основе код. Учитывая легкость языка, то проблем быть не должно. Если не получилось, оставлю код как подсказку, но тогда и смысла мало.

    код

    chunk_size = 9000
    
    with open(file, 'rb') as f:
        
        i = 0
    
        while True:
            
            data = f.read(chunk_size)
            
            if data:
                with open(f'chunk_{i}', 'wb') as f2:
                    f2.write(data)
            else:
                break
    
            i += 1

    Ответ написан
    1 комментарий