Задать вопрос
  • Как сделать мигающее уведомление во вкладке браузера?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, это два разных вопроса.
    По поводу мигания вам уже написали.
    А вот по поводу получения уведомления есть разные способы, все они потребуют фоновых запросов, чтобы не блокировать вкладку.
    Простейший пример - polling. Каждые несколько секунд шлем запрос на сервер "а есть ли новые сообщения?", на что сервер отвечает либо "нету" либо отдаёт список новых сообщений. Просто, но грузит сеть, жрёт батарейку, грузит сервер.
    Чуть сложнее - long polling. Мы шлём запрос "есть ли новые сообщения?" на сервер с длинным таймаутом, скажем, несколько минут. Если сообщений нет, сервер молчит, но запрос не прерывает. Он только у себя время от времени проверяет их наличие. Как только сообщение появилось, сервер шлёт ответ и закрывает соединение.
    Когда клиент получил ответ или когда случился таймаут, клиент запускает новое соединение и снова ждёт ответа.
    Ну или использовать web sockets - ЕМНИП, когда соединение установлено, сервер может уже послать что-то по своей инициативе. Но это нужно изучать.
    Ответ написан
    1 комментарий
  • Как сделать что бы бот реагировал на сообщение 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!
    Нет. Спойлер - это исключительно форматирование, клиент уже знает содержимое под спойлером и просто его не показывает до нажатия.
    Ответ написан
    1 комментарий
  • Как удаленно получить время сервера Debian?

    Vindicar
    @Vindicar
    RTFM!
    Запустить на нем крошечный веб-сервер, который отвечает на запрос текущим системным временем?
    Ответ написан
  • Как перебрать и добавить в список все экземпляры класса?

    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() - он позволяет аккуратно представить выполнение потока как обычную асинхронную задачу.
    Ответ написан
    Комментировать
  • Решил создать своего дискорд бота, выдает ошибку импортирования модуля discord, что делать?

    Vindicar
    @Vindicar
    RTFM!
    mshslv19, сколько интерпретаторов питона в системе? Используешь ли venv? Среда PyCharm любит создавать новое виртуальное окружение (отдельный интерпретатор питона со своими пакетами) под каждый проект.
    Вообще симптомы похожи на путаницу в интепретаторах, когда ставишь пакеты в общесистемный, а запускаешь скрипт в локальном.
    Ответ написан
    Комментировать
  • Что из себя представляет интернет соединение?

    Vindicar
    @Vindicar
    RTFM!
    Поток (в смысле поток байт) - это не более чем удобная абстракция.
    На уровне IP протокола данные маршрутизируются (передаются от узла к узлу) отдельными пакетами, независимо друг от друга.
    Протокол UDP оставляет это как есть - каждая датаграмма будет отдельным пакетом. Как следствие, есть ненулевая вероятность, что какие-то датаграммы могут потеряться, или дойти не в том же порядке, в каком были отправлены.
    Протокол TCP реализует абстракцию "поток байт". Грубо говоря, помимо передаваемых данных, он вставляет в каждый пакет контрольную сумму и номер. Таким образом получатель может проверить целостность пакета, и собрать пакеты в правильном порядке. Если какого-то пакета нет или он повреждён, получатель может запросить повторную отправку этого пакета. Всё это происходит "под капотом" протокола TCP, так что приложение, которое с ним работает, не обязано об этом думать. С его точки зрения, отправленные другой стороной данные приходят к нему в том же порядке, в котором они были отправлены - либо оно получает явное оповещение об ошибке передачи.
    Установка соединения требуется только для того, чтобы "договориться" о нумерации пакетов и других деталях передачи, т.е. задать начальное состояние.
    Ответ написан
    Комментировать
  • BS4 не видит полный код страницы?

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

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

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

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

    Vindicar
    @Vindicar
    RTFM!
    Два способа.
    1. Если сайт не борется с парсерами, выясни какая цепочка ajax-запросов требуется для получения нужных данных, и делай их сам. Это утомительно поначалу, но реализация будет менее требовательна к ресурсам.

    2. Если борется, используй безголовый (или не очень безголовый) браузер, который умеет выполнять JS.
    Для питона есть selenium, для других языков есть наверняка свои аналоги.
    Ответ написан
    Комментировать
  • Не работает 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е издание. По-крайней мере такие ошибки отпадут.
    Ответ написан
    Комментировать