• Не устанавливается модуль discord.py,что делать?

    Vindicar
    @Vindicar
    RTFM!
    SuperDuperPuperTurbo, засунь в ошибку в переводчик, и поймешь.
    Тебе нужна версия питона 3.6 или старше. Посмотри, какая у тебя, и поставь нужную. Сейчас вроде 3.10 вышла, но если у тебя windows 7 или более ранняя ось, то самая поздняя будет 3.8.
    И да, если в питоне чайник, то сначала поучи питон, хотя бы почитай Марк Лутц, "Изучаем Питон", а потом уже хватайся за ботов. Боты - это не так просто, как говорят.
    Ответ написан
    Комментировать
  • Как создать файл в python еще до завершения программы?

    Vindicar
    @Vindicar
    RTFM!
    Файл должен создаться сразу, как только отработает open().
    Если ты замеряешь "время создания" по времени появления файла в проводнике, имей ввиду, что у проводника реакция отнюдь не мгновенная.
    Ответ написан
  • Как сделать "реакцию" с упоминанием пользователя и без?

    Vindicar
    @Vindicar
    RTFM!
    import typing

    async def smoke(ctx, member: typing.Optional[discord.Member] = None):


    И внутри обработчика проверяешь if member is not None. Если выполнилось, значит, участник указан.
    Ну и не забудь почитать документацию, там описано, какие конструкции в аргументах понимает discord.py.
    Ответ написан
  • Почему не работает позиционирование в tkinter?

    Vindicar
    @Vindicar
    RTFM!
    1. Для одного элемента можно использовать только один менеджер геометрии. Если ты положил кнопку на форму через place(), не делай ей pack().
    2. В рамках одного контейнера можно использовать только один менеджер геометрии. Если ты положил один элемент на панель/в окно через place()/pack()/grid(), другие элементы, положенные непосредственно в ту же панель/окно, должны использовать тот же самый менеджер.
    Ответ написан
    Комментировать
  • Поместить содержимое файла в переменную в python?

    Vindicar
    @Vindicar
    RTFM!
    Читай документацию, там это есть. Ну и или на русском.

    А вот теперь расскажи, почему ты не мог вбить в гугл "питон прочитать содержимое файла" и прокликать первые несколько ссылок...
    Ответ написан
    6 комментариев
  • Как работают срезы в массиве?

    Vindicar
    @Vindicar
    RTFM!
    Чтение среза и присваивание срезу - это разные вещи. Копия создаётся только при чтении.
    Ответ написан
    3 комментария
  • Json файл возвращает null как исправить это?

    Vindicar
    @Vindicar
    RTFM!
    Выражение response.text ничего не сделает.
    Если ты хочешь, чтобы функция gen() вернула содержимое ответа, используй ключевое слово return.
    return response.text
    или
    return response.json()
    смотря что тебе нужно
    Ответ написан
    Комментировать
  • Как редактировать сообщение бота в Discord // python?

    Vindicar
    @Vindicar
    RTFM!
    Если ты используешь discord.py, то примерно так
    1. Узнать id канала (он неизменен, его можно прописать в коде), получить его объект через метод бота .fetch_channel()
    2. Узнать id сообщения(он неизменен, его можно прописать в коде), получить объект сообщения через метод канала .fetch_message()
    3. Вызываешь метод .edit() сообщения.

    Читай документацию, там много интересного.
    Ответ написан
    Комментировать
  • Socket.gaierror: [Errno 11003] getaddrinfo failed, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Что-то мне подсказывает, что вместо email нужно указывать адрес SMTP сервера.
    Ответ написан
    Комментировать
  • Добавление аргументов к функции с threading?

    Vindicar
    @Vindicar
    RTFM!
    1. На момент вызова конструктора Thread переменная conn ещё не существует. Тебе нужно создавать поток тогда, когда она уже получила значение.
    2. Не вызывай метод run(). Он будет вызван сам, в отдельном потоке. Для запуска этого потока нужно вызвать start(). И имей ввиду, что у тебя send() отрабатывает однажды, и останавливается.

    Я бы посоветовал попрактиковаться в работе с потоками, для начала.
    Ответ написан
    Комментировать
  • Программа proxy-vpn?

    Vindicar
    @Vindicar
    RTFM!
    1. Настрой свой VPN так, чтобы он не прописывал себя как шлюз по умолчанию (default gateway). В этом случае тебе будут доступны ресурсы внутри VPN-сети, но трафик будет идти через VPN только при обращении к этим ресурсам.
    2. Подними прокси сервер, настрой его так, чтобы он обслуживал только запросы изнутри VPN. Тогда запросы к этому прокси будут идти через VPN, а остальной трафик - напрямую.

    Ну или попробуй настроить ShadowSocks, оно поднимает локальный прокси, который заворачивает свой трафик в туннель до сервера.
    В принципе то же самое можно провернуть даже с помощью SSH, через dynamic port forwarding.
    Ответ написан
    Комментировать
  • Лаконичный код, для нуба на Python =/ _main_, _name_?

    Vindicar
    @Vindicar
    RTFM!
    Это несложно, на самом деле.
    Когда ты делаешь import module_name, Питон ищет либо файл module_name.py, либо пакет module_name. Про пакеты пока говорить не будем. Если такой файл нашелся, и он ещё не был импортирован, то он выполняется в контексте импортирующего скрипта. При этом получается объект-модуль, и ссылка на него помещается в переменную module_name в импортирующем скрипте.
    Пример:
    # a.py
    def somefunc():
        print('Hi!')
    
    print('a is executed')
    
    # b.py
    import a  # >>> a is executed
    a.somefunc()  # >>> Hi!

    Имя, под которым импортируется модуль, помещается в переменную __name__. Изменим код так:
    # a.py
    def somefunc():
        print('Hi!')
    
    print(__name__, 'is executed')
    
    # b.py
    import a  # >>> a is executed
    a.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__

    Таким образом, мы видим, что для исполняемого скрипта переменная __name__ содержит строку "__main__", а импортируемые скрипты увидят в ней только своё имя. Причем неважно, если ты переименуешь модуль:
    # a.py
    def somefunc():
        print('Hi!')
    
    print(__name__, 'is executed')
    
    # b.py
    # импортируем модуль и переименовываем его
    import a as d  # >>> a is executed
    d.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__

    Именно эта особенность и позволяет писать код, который выполнится только если питон-скрипт выполняется непосредственно.
    # a.py
    # Этот код выполнится в любом случае
    def somefunc():
        print('Hi!')
    
    if __name__ == '__main__':
        # этот код выполнится только если a выполняется непосредственно
        print(__name__, 'is executed') # Всегда выведет __main__ is executed
    else:
        # а этот код выполнится только если a импортируется в другой модуль
        print('Imported as', __name__)
    # b.py
    import a  # >>> Imported as a
    a.somefunc()  # >>> Hi!
    print('And I am', __name__)  # >>> And I am __main__
    Ответ написан
    1 комментарий
  • Что делать: ValueError: I/O operation on closed file?

    Vindicar
    @Vindicar
    RTFM!
    Не используй with для таких вещей, просто
    file = open('avatar/' + f'{idfot1}', 'rb')
    Иначе with закроет файл до того как бот успеет подхватить его содержимое.
    Лучше вызови file.close() вручную в конце.
    Ответ написан
    Комментировать
  • Почему удаляются не все объеты класса Int?

    Vindicar
    @Vindicar
    RTFM!
    ['a', 1, 2, 'c']
    После того как ты удалил 1, 2 встанет на его место. Но этот элемент уже был обработан, и цикл пойдёт дальше, к 'c'.
    Если тебе нужно удалять элементы из списка в процессе итерации, итерируйся начиная с конца. Тогда будет меняться только позиция уже обработанных элементов.
    И делай итерацию не напрямую по списку, а по индексу.
    Ответ написан
  • Как запустить фоновую задачу?

    Vindicar
    @Vindicar
    RTFM!
    Когда ты делаешь await, ты говоришь "останови работу данной корутины, дождись, пока не закончится операция после await, потом продолжи работу". Пока одна корутина остановлена, другие могут выполняться. В общем, почитай про то, как работает асинхронная программа.
    Если тебе нужно запустить корутину, не дожидаясь её завершения, asyncio.create_task() в помощь.

    Стоит понимать, что код, который ты запускаешь через asyncio.create_task(), должен тоже быть асинхронный! Если ты завернёшь обычный синхронный вызов в корутину, и запустишь её через create_task(), чуда не будет - бот всё равно встанет колом, пока вызов не закончится.
    Так что взгляни лучше на свой парсер - если он основан на синхронной библиотеке типа requests, перепиши его на aiohttp.
    Ответ написан
  • Как получить список онлайна на сервере?

    Vindicar
    @Vindicar
    RTFM!
    Документацию читал?
    Guild.members содержит полный список пользователей сервера, просто пройдись по нему и выбери тех, у кого Member.status будет такой, какой нужно тебе.
    Ответ написан
    3 комментария
  • Телеграм бот + веб сервер, что использовать?

    Vindicar
    @Vindicar
    RTFM!
    И боту и Flask нужен вечный цикл для работы. Так что либо разноси их по разным потокам, либо разноси их по разным процессам (т.е. по разным скриптам).
    Ответ написан
  • Как получить список всех пользователей на сервере Discord?

    Vindicar
    @Vindicar
    RTFM!
    Клиент - это твой бот. Если почитать немножко поглубже, найдешь описание класса Bot
    Represents a discord bot.

    This class is a subclass of discord.Client and as a result anything that you can do with a discord.Client you can do with this bot.

    Очень частая ошибка - пытаться работать одновременно с экземпляром Client и экземпляром Bot. Это просто не нужно.
    Ответ написан
  • Как скачать видео?

    Vindicar
    @Vindicar
    RTFM!
    Устанавливаешь youtube-dl, и запускаешь его как-то так:
    youtube-dl -v -r 1M -f best -c -i -w -o "%(title)s.%(ext)s" --download-archive archive.txt URL_канала_или_плейлиста

    -v - выводить подробную информацию о прогрессе
    -r 1M - ограничение скорости в 1 мегабайт/сек, чтобы не выжрало весь канал.
    -f best - выбирать лучшее качество видео
    -c - при ошибке скачивания не начинать видео сначала, а докачивать
    -i - не останавливаться, если видео скачать не удалось, идти дальше по плейлисту
    -w - не перезаписывать файлы, если они существуют
    -o "%(title)s.%(ext)s" - формат имени файла
    --download-archive archive.txt - вести список скачанных видео, чтобы при перезапуске продолжить с того места, где остановился.

    Есть еще опции --username и --password, но я ими не пользовался, ничего сказать не могу.
    Ответ написан
    Комментировать
  • Python. Как отсортировать двухмерный список?

    Vindicar
    @Vindicar
    RTFM!
    Если j == __COLS - 1, но i < __ROWS - 1, то ты попытаешься обратиться к элементу a[i][__COLS - 1 + 1], т.е. a[i][__COLS]. Я полагаю, в этом и дело.
    Не знаю насчёт Java, но в C++ вполне возможно, что у тебя строки матрицы лежат в памяти подряд, так что ты фактически нечаянно обращаешься к a[i+1][0], тем самым корректно "склеивая" строки.
    Ответ написан