Задать вопрос
  • Как создать task в __init__ asyncio?

    Vindicar
    @Vindicar
    RTFM!
    Тебе довольно прямо сказано: "AttributeError: loop attribute cannot be accessed in non-async contexts."
    Иными словами, атрибут Bot.loop (ссылку на рабочий цикл asyncio) можно читать, только если ты находишься внутри async def функции, прямо или косвенно.
    Причина простая - asyncio.run() или эквивалентная функция как раз создаёт и запускает рабочий цикл asyncio (обычно называемый event loop или просто loop). Если рабочий цикл ещё не создан, то что должен вернуть атрибут Bot.loop? На этот вопрос просто нет правильного ответа. Поэтому доступ к атрибуту блокируется.

    И насчёт решения тоже подсказано: "Consider using either an asynchronous main function and passing it to asyncio.run or using asynchronous initialisation hooks such as Client.setup_hook". Иными словами, тебе нужно сделать так, чтобы твой код, обращающийся к Bot.loop, выполнялся в асинхронной (async def) функции. Это можно сделать двумя способами.

    Первый: вынести твой код из конструктора (который не может быть асинхронным) в отдельный метод. Например, Bot (и его предок Client) позволяют вызвать асинхронный метод on_ready() при запуске бота. Тут есть много оговорок - в частности, on_ready() может быть вызван неоднократно, если есть проблемы с соединением. Это нужно иметь ввиду.

    Второй: завернуть вызов всего твоего конструктора в асинхронный метод. Упрощённо, вместо
    import discord
    from discord.ext import commands
    
    intents = discord.Intents.default()
    intents.members = True
    intents.message_content = True
    
    bot = commands.Bot(command_prefix='!', intents=intents)
    # ...
    bot.run('token')

    можешь попробовать что-то вроде
    import discord
    from discord.ext import commands
    
    
    async def main():
        # асинхронная функция может быть выполнена ТОЛЬКО внутри рабочего цикла
        # значит, рабочий цикл уже точно существует и выполняется
        intents = discord.Intents.default()
        intents.members = True
        intents.message_content = True
        # конструктор сам по себе не асинхронный, но он выполняется в асинхронном контексте
        bot = commands.Bot(command_prefix='!', intents=intents)  
        # ...
        # мы уже в асинхронной функции, поэтому используем await start() вместо run()
        await bot.start('token')  # main() не завершит работу, пока бот не завершит работу
    
    
    if __name__ == '__main__':
        asyncio.run(main())  # создаём рабочий цикл. он будет работать, пока main() не завершит работу


    Но я соглашусь с Everything_is_bad - сначала разберись, как работает asyncio. Строить сложные конструкции с несколькими долгоживущими корутинами методом проб и ошибок - это слишком муторно.

    Ну и очень большой вопрос от меня: ты, я вижу, мастеришь систему плагинов. Чем тебя не устроили коги?
    Ответ написан
    3 комментария
  • Как написать свой фреймворк?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Точно так же как и любое другое ПО:
    1. Формулируете вашу задачу в виде какого-то текстового/графического описания
    2. Формулируете ТЗ с конкретными требованиями, ограничениями и всем прочим
    3. На основе ТЗ разрабатываете ЧТЗ (Частное ТЗ) со всеми полными деталями, описаниями всех действий, событий, взаимодействий и прочее
    4. Используя ЧТЗ подготавливаете проект - архитектура, инструменты, системы, подсистемы и прочее с полным описанием, декомпозированными элементами вниз до самых простых и прочее
    5. Берёте проект и по шагам его реализовываете
    6. Profit

    Это примерно - у каждого проекта свой путь. Есть ещё аналитика, исследования, тесты, планирование и куча других организационных и подготовительных действий. В разработке фреймворка принципиальных отличий от разработки любого другого ПО нет.
    Ответ написан
  • Как написать свой фреймворк?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Фреймворк - это - работа в рамках. Тоесть ты должен навязать разработчику
    какую-то рамочную модель разработки. Это не всегда возможно. Разраб этого
    обычно не любит. Поэтому за созданием фреймворка обычно стоит более глубокая
    идея чем просто Фреймкорк
    Васи Пупкина.

    Например - многие фреймворки давят на шаблон Inversion of Control.
    Обычно это доверие главного control flow фреймворку. А программист
    уже вставляет свою логику в какие-то ключевые точки. Яркий пример
    - сервлеты. Фреймвор обеспечивает веб, балансировку, роутинг путей
    и поддержку сессий. А программист просто делает сервлет который обрабатывает
    request.


    Я тебе советую пойти к преподавателю и выстрясти идею из него. Потому что
    ты вряд-ли сможешь нечто подобное и ценное придумать .
    Ответ написан
  • Какой наилучший способ продлить жизнь Foreground Service в MAUI?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Увы, но андроид все больше скатывается в платформу для игрушек. Борьба за жизнь батарейки
    делает использование служб все более сложным.
    https://developer.android.com/develop/background-w...
    Сейчас это пермишен и декларация целей использования.
    Часть целей автоматом подтверждает робот (ИИ) смотрит, что у тебя еще например пермишины для работы с блютуз устройством и что программа действительно с ними работает (по описанию и наличию вызовов нужных методов).
    А вот прочие цели придется дополнительно декларировать в кабинете разработчика.

    В 13-м поменяли как служба может показать нотифи в шторке. Их теперь прячут от пользователей по умолчанию.

    До сих пор остается актуальным способ "Please don't kill me". Отправлять пользователя в раздел настроек системы для включения приложения в исключения энергосбережения.

    Единственное исключение "кто еще может более менее нормально работать в фоне" это медиапроигрователи, которые дублируют в нотифи кнопки управления.

    В общем, я плюнул и свою службу печати теперь стал просто биндить из активити (тема диалог с запретом гасить экран)
    Ответ написан
    3 комментария
  • Как добавить в дату, записанную в строке, нули перед месяцем и днём?

    shabelski89
    @shabelski89
    engineer
    Выше ответы работы со строками, а между строк "код, который при необходимости добавит нули к месяцу и дню" означает привести к ISO-8601
    from datetime import datetime
    
    dt_str = '2025-2-1'
    
    dt = datetime.strptime(dt_str, '%Y-%m-%d')
    iso_date = dt.strftime('%Y-%m-%d')
    
    print(iso_date)
    '2025-02-01'
    Ответ написан
    1 комментарий
  • Как добавить в дату, записанную в строке, нули перед месяцем и днём?

    без циклом мапов и лямбд

    a = '2021-1-2'
    '{}-{:>02}-{:>02}'.format(*a.split('-'))
    '2021-01-02'
    Ответ написан
    1 комментарий
  • Почему после переноса физического ПК в виртуальный (на гипервизор) перестали работать некоторые сайты?

    @rPman
    Сайты могут детектировать виртуальную машину через gpu, а точнее ее отсутствие. Так же в виртуальных машинах может не работать DRM (защита видео контента от кражи), что тоже сигнал.
    Ответ написан
    6 комментариев
  • Почему после переноса физического ПК в виртуальный (на гипервизор) перестали работать некоторые сайты?

    Куки в браузере почистьте, чистый/приватный профиль попробуйте...

    https://www.linux.org.ru/forum/talks/17453017/page1
    Ответ написан
    Комментировать
  • Сохраняется ли гарантия на технику при внесении изменений в ПО?

    @rPman
    пока вы не трогаете прошивку, к вам нет никаких претензий, т.е. сброс до заводских настроек все вернет назад.
    Но вот если вы меняете прошивку, делаете рут и т.п. вот тогда у сервис центра есть право отказать в ремонте.

    Но я помню случай, когда сервис бесплатно заменил прошивку на стоковую. Вполне допускаю это лично решение конкретного специалиста в сервисцентре, а не прописанное правило.

    p.s. обычно софт не может сломать оборудование а значит повлиять на бесплатное сервисное обслуживание, но бывают случаи, особенно если это сделано намеренно, когда это не так, и сервис центр может это знать и учитывать, приведу пример из мира PC, в биосе можно включить overclock и задать значения (вольтаж, настройки охлаждения, частоты) вне допустимых и повредить оборудование в прямом смысле.. там много защит, но они не панацея, и всегда остается шанс... так вот прямо в биосе указано что использование этих разделов МОЖЕТ лишить гарантии.
    Ответ написан
    3 комментария
  • Можно ли как-то посмотреть историю статей, какие я читал на хабре?

    @scooby_doe
    Наверное где-то на бэкенде и хранится инфа что ты читал, но нам её не показывают)

    Если хочешь не терять в будущем статьи которые тебе важны или нужны, юзай закладки именно на самом Хабре, а не в браузере, потом через профиль сможешь их найти.
    Ответ написан
    Комментировать
  • При запуске кода не отображается игра Pygame. Как исправить?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Должно быть внутри цикла:
    x1 += x1_change 
    y1 += y1_change
    dis.fill(white)
    
    pygame.draw.rect(dis, black, [x1, y1, 10, 10])
    pygame.display.update()
    clock.tick(30)

    Код:
    while not game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -10
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = 10
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -10
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = 10
                    x1_change = 0
    
        x1 += x1_change
        y1 += y1_change
        dis.fill(white)
    
        pygame.draw.rect(dis, black, [x1, y1, 10, 10])
        pygame.display.update()
        clock.tick(30)

    6812e9630a070616747689.png
    Ответ написан
    1 комментарий
  • На двух ссд был установлен виндовс 11, почему после снятия одного, на втором биос не видит установленный виндовс?

    Adler_lug
    @Adler_lug
    Очевидно же, что там загрузчик.
    По умолчанию загрузчик ставится на тот диск, где он уже есть. Хоть 10 Windows установи на разные диски, а загрузчик будет там, где он был установлен первым.
    Ответ написан
    Комментировать
  • Профориентация и выбор дальнейших путей развития?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    Еще один важный критерий который мне сильно отсеивает количество вакансий это только аккредитованные IT-организации.

    Кроилово ведет к попадалову Народная мудрость :) Я конечно не знаю, сколько у нас всего работодателей и сколько из них с аккредитацией (мы в свое время рассматривали вариант, но не прошли по требованиям), но думаю аккредитованных прям сильно меньше :)
    Еще заметил что очень мало стало джуниорских вакансий.

    Их когда-то было много? Их всегда было мало и на них ломились толпы народу, способные разве что hello, world написать :)
    Вообще сейчас по моему какой-то кризис в IT: вакансий мало, соискателей много, а требования повысились

    Это "сейчас" уже лет как десять продолжается :) Десять лет назад было то же самое :)
    Вдобавок начинает ИИ наступать нам на пятки, код генерируется и требуется меньше разработчиков для поддержки проектов

    Это тот самый типо-ИИ, который рисует девушку с тремя ногами, шестью пальцами и ступней в батарее? Тот самый который на запрос "бой у чудского озера" рисует группу бойцов, плывущих на лодке? Такой ооооочень долго будет на них наступать и никогда не догонит :)
    Я начинаю, мне вроде интересно, но потом интерес угасает, потому что мне то за это никто не платит.

    Я сейчас не так уж много и пишу и в основном на баше, но если начинаю, то пишу для себя - для решения своих задач - и мне за это отдельно уж точно не заплатят :DD Мне, знаете ли нравится программировать - причем нравится непрерывно аж с 1988 года :D (RSX-11M, Fortran)
    Ответ написан
    2 комментария
  • Профориентация и выбор дальнейших путей развития?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Еще один важный критерий который мне сильно отсеивает количество вакансий это только аккредитованные IT-организации.

    Чему вы удивляетесь, если сократили количество потенциальных нанимателей с семи миллионов до двухсот тысяч? К тому же, это сделали не только вы, поэтому в эти двести тысяч ИТ-компаний сейчас ломятся кучи таких же бедолаг, а счастливые обладатели аккредитации выбирают лучших из лучших.

    Еще заметил что очень мало стало джуниорских вакансий.

    Их даже в лучшие времена почти не было, а сейчас страна в санкциях по уши и ставка ЦБ огромная, компании считают каждую копейку и готовы нанимать только зрелых специалистов.

    Вообще сейчас по моему какой-то кризис в IT

    Нет, у крепких мидлов и тем более сеньоров всё замечательно.

    Вдобавок начинает ИИ наступать нам на пятки

    ИИ наступает на пятки только очень плохим специалистам. Надо быть тупым как дрова и заниматься очень примитивной деятельностью, чтобы ИИ хотя бы помогал, не говоря уж о замене.

    Я начинаю, мне вроде интересно, но потом интерес угасает, потому что мне то за это никто не платит.

    В нашей отрасли много тех, кто не программировать не может. Вы всегда будете проигрывать в конкуренции с ними.
    Ответ написан
  • Безопасно ли запускать Telegram Бота на компьютере?

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

    Создаете файл
    requirements.txt
    Со следующим содержимым
    blinker==1.9.0
    click==8.1.7
    Flask==3.1.0
    itsdangerous==2.2.0
    Jinja2==3.1.4


    БЕЗ КАВЫЧЕК

    pip install -r requirements.txt
    Ответ написан
    5 комментариев
  • Можно ли что нибудь оптимизировать в коде функции поиска?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Да, конечно можно - оптимизируйте, вам никто не запрещает. Оптимизировать можно вообще любой код. Оптимизация делается по конкретным критериям и под конкретную задачу. А ещё бывают противоположные критерии, когда оптимизация по одному критерию ухудшает другой. Поэтому для начала вам следует определиться с конкретными критериями оптимизации и что именно вы хотите оптимизировать в вашем коде. А так же какую именно задачу решить данной оптимизацией. И уже после этого проводить оптимизацию вашего кода.
    Ответ написан
    2 комментария
  • Что лучше выбрать для интерфейса программы?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Первый, что лучше на сегодняшний день, веб или desktop.

    Если в рамках соц.сети - смотрите на успешных конкурентов, а у них:
    1. Веб: SPA/SSR (React/Vue).
    2. Мобильное приложение (Kotlin/Swift или Flutter).
    И второй вопрос, про то, что выбрать для пользовательского интерфейса: flet, HTML/CSS/JS, QT.

    - Или React/Vue + SCSS + (Django + DRF или FastAPI).
    - Или (если нет знаний современного фронта) то vanilla JS + SCSS + все это рендерить на бэке (Django или FastAPI) и отдавать посетителю готовые страницы.
    Собираюсь разработать пет-проект

    Пет-проект с целью чего? Если найти работу, то QT/Flet/Desktop + Python = экзотика в мире заказчика (в вакансиях или на фрилансе) вообще, и экзотика*100 в мире заказчика в соц.сетях и подобных проектах.
    будет намного производительней

    Python не про производительность.
    Ответ написан
    Комментировать
  • Почему возникает ошибка в моем коде (баг f-строк)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Используйте версию питона >=3.12.
    До Python 3.12 обратные косые черты не допускались внутри поля замены f-строки. f-strings

    Или, если это невозможно, то так:
    things = ['Thing one','Thing two','Thing three']
    nl = '\n'
    print(f"I have a list of things:\n{nl.join(things)}")
    Ответ написан
    Комментировать
  • Можно ли сменить тему в редакторе Notepad++, чтобы он стал максимально похож на Akelpad?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    У вас разница между скриншотами в наличии Панели инструментов, которая прекрасно отключается в настройках.

    Или нажмите F11 и будут перед вами только вкладки и текст - с интерфейсом Notepad++ вообще не будете пересекаться.
    Ответ написан
    Комментировать