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

    Vindicar
    @Vindicar
    RTFM!
    # HELP
    bot.remove_command("help")
    @bot.command(command/help.py)
    
    # PROFILE
    bot.remove_command("profile")
    @bot.command(command/profile.py)

    У меня такое чувство, что ты не вполне понимаешь что такое декоратор и как им пользоваться.
    Да и конструкция вида command/profile.py не является синтаксически корректной в питоне.
    Подучи основы языка. Вот кроме шуток.
    Марк Лутц, "Изучаем Питон", 4е издание.
    Потом вернёшься к боту, и уже не будешь спотыкаться на таких пустяках.
    Ответ написан
    Комментировать
  • Как использовать asyncio внутри Thread Python?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, несколько асинхронных задач прекрасно уживаются друг с другом. На кой тебе вообще нужны потоки для этого? Чем не устроил loop.create_task(), или asyncio.gather()?

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

    В-третьих, технически ты можешь создавать свой цикл реактора (asyncio loop) в каждом потоке. Почитай доки на asyncio как это делается. Но нужно помнить, что async-объекты из разных реакторов не дружат друг с другом. Так что подчеркиваю красным: не надо это делать. Лучше сначала попробуй по-иному подойти к проблеме.
    Ответ написан
    4 комментария
  • Как я могу сделать что-то вроде os.startfile() на удаленном хосте?

    Vindicar
    @Vindicar
    RTFM!
    Нужна программа, выполняемая на удалённом хосте, которая будет выполнять код по запросу из сети.
    Либо терминальные серверы типа SSH (для Linux систем идут в комплекте, под винду надо ставить), либо удалённый рабочий стол типа VNC, либо своё приложение, которое вы запустите на хосте и которое будет слушать запросы из сети.
    Ответ написан
    1 комментарий
  • Value for header {} must be of type str or bytes, not Ошибка полностью ниже.?

    Vindicar
    @Vindicar
    RTFM!
    session_id = requests.post(
            "https://yug-krdr-itv04.svc.iptv.rt.ru/api/v2/user/sessions",
            headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "session_id": sess_id},
            json={"login": email, "login_type": "email", "password": "1234567"},
        ).json() # значение session_id может быть не только строкой, но и целым числом, словарём, списком или None
        return {"san": san, "session_id": session_id, "uid": ud} #в словарь оно пишется как есть
    
    
    def requestBuilderWink(url, data=None, params=None, json=None, method=None):
        register = regAccount()
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
            "session_id": register["session_id"], # а потом используется как заголовок - тоже как есть
            "x-rt-uid": register["uid"],
            "x-rt-san": register["san"],
        }
    Ответ написан
    Комментировать
  • Как реализовать множество параллельных таймеров?

    Vindicar
    @Vindicar
    RTFM!
    Если бот асинхронный, то множество параллельных ожиданий не будет проблемой.
    Ответ написан
  • Как сделать что бы бот реагировал на сообщение discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Погуглить! Это показывается в Quick Start в доках discord.py.

    # вместо client.event может быть bot.event, смотря как названа переменная с объектом бота
    @client.event 
    async def on_message(message):
        # отсеиваем сообщения, которые отправили мы сами
        if message.author == client.user:
            return
        # а вот тут мы проверяем содержимое сообщения. Это пример.
        # Реальную логику проверки, разумеется, пишешь самостоятельно, под свои нужды.
        if message.content.startswith('$hello'):
            await message.channel.send('Hello!')
    Ответ написан
    Комментировать
  • Почему не добавляет роль по реакции?

    Vindicar
    @Vindicar
    RTFM!
    Удаление роли работает, а добавление нет?
    Первое, что бросается в глаза - при удалении роли не проверяется ID поста, на котором была поставлена реакция.
    ID точно задан корректно? Как целое число?
    Ответ написан
    5 комментариев
  • Как остановить работу Телеграмм Бота?

    Vindicar
    @Vindicar
    RTFM!
    Это будет непросто.
    Стандартный input() - строго синхронный, он остановит выполнение программы до своего завершения.
    Можно попробовать что-то в духе:
    import asyncio
    
    loop = asyncio.get_event_loop()
    bot = Bot(token=TOKEN)
    dp = Dispatcher(bot=bot)
    
    async def delay_exit():
        #запускаем input() без параметров в отдельном потоке
        # await не продолжит выполнение, пока поток не отработает
        # но в то же время цикл бота будет работать независимо от этого потока
        await loop.run_in_executor(None, input) 
        dp.stop_polling()
        await dp.wait_closed()
        await bot.close()
    
    if __name__ == '__main__':
        loop.create_task(delay_exit()) # планируем выполнение delay_exit() и продолжаем
        loop.run_until_complete(dp.start_polling()) # работаем, пока dp.start_polling() не выполнится
    Ответ написан
    Комментировать
  • Как несколькими потоками читать файлы на питоне? Как ускорить следующий код?

    Vindicar
    @Vindicar
    RTFM!
    Несколько потоков тут вряд ли помогут из-за особенностей питона.
    Несколько процессов - возможно (модуль multiprocessing).
    Но вообще для начала стоит убедиться, что затык именно по CPU, а не по производительности диска.
    Ответ написан
  • Как делать проверки в боте Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Через loop.create_task() создаёшь долгоживущую корутину, которая крутится в цикле вида
    async def my_long_task():
      while True:
        await do_stuff() # выполняешь нужные действия, например, проверяешь очередь сообщений для отправки
        await asyncio.sleep(60) # спишь минуту

    Детали, вроде конкретных выполняемых действий, условий их выполнения, длительности сна или условия прекращения цикла, зависят от твоей задачи.
    Ответ написан
  • VALUES(?) как работает в Sqlite3/Python?

    Vindicar
    @Vindicar
    RTFM!
    1. VALUES - это часть синтаксиса SQL, точнее запроса INSERT, а не питоновской обертки sqlite3. Твой запрос синтаксически некорректен. Обёртка позволяет только заменить токен ? на переданное значение.
    2. Насколько я знаю, нельзя, так как подстановка значений умеет вставлять только константы - числа и строки. Можно (только осторожно) использовать обычное форматирование строк. Но вообще если ты наткнулся на такую задачу, стоит остановиться и переспросить себя: нельзя ли добиться того же самого результата по-другому? Потому что в динамическом формировании SQL запросов легко напортачить.
    Ответ написан
    Комментировать
  • Как перебрать и добавить в список все экземпляры класса?

    Vindicar
    @Vindicar
    RTFM!
    Никак, твоё решение с тремя .append() правильное.
    Если при создании экземпляра класса он сам себя не регистрирует в каком-то списке или иной коллукции, то узнать о нём из другой части программы не получится.
    А если и получится, то это потребует чертовски неочевидного хака, которым лучше не пользоваться.
    Ответ написан
  • Не получается добавить роль через реакцию, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    1.
    async def on_raw_reaction_add(self, payload : discord.RawReactionActionEvent):

    Откуда self, функция же не в классе?

    2.
    intents = discord.Intents.default()
    intents.members = True
    keep_alive()
    client.run(os.getenv("BOT_TOKEN"))

    Создали объект intents, но не передаёте его боту в client.run(), и вообще никак не используете.
    Ответ написан
  • RuntimeError: There is no current event loop in thread 'Thread-2'. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Мешать многопоточность с асинхронностью - плохая идея. Зачем тебе это потребовалось?
    Если нужно выполнить длительную синхронную задачу в отдельном потоке, используй loop.run_in_executor() - он позволяет аккуратно представить выполнение потока как обычную асинхронную задачу.
    Ответ написан
    Комментировать
  • BS4 не видит полный код страницы?

    Vindicar
    @Vindicar
    RTFM!
    Однако, если сохранить файл с кодом страницы то в файле присутствует все необходимое.

    Значит дело не в BS, а в том как ты выводишь содержимое в консоль.
    Подскажу в чём может быть дело:
    >>> print("foo\rbar")
    bar

    Символ \n - это перевод строки, но \r - возврат каретки. Если в искомой строке есть \r, но нет \n, то все строки будут выводиться поверх друг друга.
    Ответ написан
    1 комментарий
  • Как в discord переименовать название сервера по команде?

    Vindicar
    @Vindicar
    RTFM!
    await ctx.message.guild(name)
    Ну конечно так не будет работать. Ты доки вообще читал?
    Ответ написан
    Комментировать
  • Не работает on_member_join, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Интент member забыл включить поди?
    import discord
    intents = discord.Intents.all()
    discord.member = True
    bot = commands.Bot(command_prefix="!", intents = intents)

    И на странице где ключ от бота получал тоже настрой интенты.
    Ответ написан
  • Как исправить ошибку TypeError: 'type' object is not subscriptable?

    Vindicar
    @Vindicar
    RTFM!
    Уффф. Тут уже речь про основы синтаксиса питона.
    Ваш первый код делает следующее.
    num = list( #построить список из последовательности
        map( #вызываем функцию map()
            int, #первый параметр
            f.read().split() #второй параметр
        )
    )

    А второй код делает (точнее пытается) вот что
    num = list( #построить список из последовательности
        map[ #обращаемся к объекту map и пытаемся получить значение по ключу
            int, #первый элемент кортежа-ключа
            f.read().split() #второй элемент кортежа-ключа
        ]
    )

    Так как map не является словарём или подобной коллекцией, то конечно это не работает, и генерирует именно такую ошибку, которую вы указали.
    Я не пойму, откуда вообще взялась идея что можно просто заменить в вызове функции круглые скобки на квадратные, если у них совершенно разная семантика.
    Ну и да, не может быть ничего кроме списка на выходе, так как результат работы map() (а это будет объект-генератор) явно преобразуется в список.
    В общем, выше правильно посоветовали - почитайте учебник, того же Марка Лутца, "Изучаем Питон", хотя бы 4е издание. По-крайней мере такие ошибки отпадут.
    Ответ написан
    Комментировать
  • Как написать логи для дискорд бота на pythone?

    Vindicar
    @Vindicar
    RTFM!
    Что значит логи в сервере? Выделить канал, где будет писать только бот?
    Ну тогда берешь ID этого канала, получаешь по нему объект канала (как - зависит от библиотеки, ты не написал которую используешь). Сохраняешь этот объект в глобальной переменной, при необходимости записать в лог - отправляешь сообщение в этот канал.
    Только это довольно непрактично - медленно, и при проблемах с соединением никакие логи не появятся.
    Ответ написан
    Комментировать