• Как запустить uvicorn не блокируя основной поток?

    @Tiubert Автор вопроса
    Я добился того же результата. По прежнему ошибка RuntimeError: Timeout context manager should be used inside a task одна использую startup ивент от FastAPI.

    В main.py убрал запуск бота и добавил это
    if __name__ == "__main__":
        dashboard = Dashboard()
        dashboard.run_host(bot, asyncio.get_event_loop())

    on_ready естественно почистил

    Это рабочий вариант
    class Dashboard:
        def __init__(self):
            self.client = None
            self.app = FastAPI()
            self.templates = Jinja2Templates(directory="templates")
    
            @self.app.get("/")
            async def read_root(request: Request):
                info = asyncio.run_coroutine_threadsafe(self.client.application_info(), self.loop).result()
    
                return self.templates.TemplateResponse("index.html", {
                    "request": request,
                    "name": info.name,
                })
    
            @self.app.on_event("startup")
            async def on_startup():
                Thread(target=self.client.run, args=("token",)).start()

    Ну а так уже не будет работать и будет ошибка
    - info = asyncio.run_coroutine_threadsafe(self.client.application_info(), self.loop).result()
    + info = self.client.application_info() # если заменить одну строчку


    В общем мы ничего не добились и ничего от этого не поменялось, хотя может быть я не туда копаю.
    Написано
  • Как запустить uvicorn не блокируя основной поток?

    @Tiubert Автор вопроса
    Тяжело будет такое реализовать когда сервер является модулем для бота, ну посмотрим что выйдет.
    Написано
  • Как изменять данные в отдельном Scriptable Object?

    @Tiubert Автор вопроса
    freeExec, я наверное не до конца описал что я придумал с этим.
    Я могу создать класс, как и раньше, он будет иметь переменную с ItemScriptableObject, где будут хранится, к примеру, характеристики. Если мне нужно будет для отдельного экземпляра изменить какой-то параметр через скрипт, я просто создам переменную в уже созданном классе MonoBehaviour которая, к примеру, изначально будет иметь значение из Scriptable Object и её я смогу спокойно изменять и получать для отдельного экземпляра уже класса MonoBehaviour
    Написано
  • Как изменять данные в отдельном Scriptable Object?

    @Tiubert Автор вопроса
    А что насчет просто изменения данных у отдельно взятого экземпляра ScriptableObject'а? Я иду в верном направлении?
    Я уже придумал решение хранить "изменяемые" значения в экземпляре класса который хранит в себе класс объекта
    Написано
  • Как вывести значок профиля в команде userinfo на библиотеке disnake?

    @Tiubert
    Я посоветовался с еще одним человеком, думаем что Discord просто не возвращает именно эти 2 значка что у меня есть.
    Написано
  • Как вывести значок профиля в команде userinfo на библиотеке disnake?

    @Tiubert
    fenrir, я во втором способе описал подобное. Там всеравно возвращается только один значок
    Написано
  • Как вывести значок профиля в команде userinfo на библиотеке disnake?

    @Tiubert
    Я извиняюсь, может это баг?
    User.public_flags возвращает только один или определенный значок. Я пытался разными методами получать и обрабатывать их но в итоге только один...
    Вот 3 мои попытки
    @commands.command()
        async def tests(self, ctx):
            # Попытка 1
            print(requests.get(
                url=f"https://discord.com/api/v9/users/{ctx.author.id}",
                headers={"Authorization": "myusertoken"})
                  .json())
            # Попытка 2
            userFlags = ctx.author.public_flags.all()
            for flag in userFlags:
                print(flag.name)
    
            # Попытка 3
            # Remove unnecessary characters
            user = ctx.author
            flags_class = str(user.public_flags.all()).replace('[<UserFlags.', '').replace('>]', '').replace('_',
                                                                                                                ' ').replace(
                ':', '').title()
    
            # Remove digits from string
            flags_class = ''.join([i for i in flags_class if not i.isdigit()])
    
            # Output
            test = discord.Embed(title=f"User's Badges", description=f"{flags_class}", color=0xff0000)
            await ctx.channel.send(embed=test)

    Возможно я не до конца правильно объяснил, но суть в том что возвращается только 1 значок
    664496089aa18759876897.png
    Первый способ (простой запрос к api) возвращает
    это

    {'id': 'myid', 'username': 'myname', 'avatar': 'myavatar', 'discriminator': '0', 'public_flags': 256, 'flags': 256, ... }

    Второй выводит "hypesquad_balance"
    Третий тоже самое - только один значок
    6644992d891ba125444598.png

    И получается единственный способ остается просто тупо проверять напрямую какие значки есть?
    user.public_flags.staff > False
    user.public_flags.partner > False
    hypesquad > True....
    Написано
  • В Visual Studio Code иногда вылезает ошибка при запуске python файла - can't open file errno 2 no such file or directory?

    @Tiubert
    Через "некоторое время" чего? Простого AFK или работы с кодом, например выключаете/включаете консоль?
    Если вы обратите внимание, при запуске термина в VS Code с начало пишется путь из которого запущен файл, а потом уже происходит запуск файла. Возможно вам нужно прописать cd в нужную директорию чтобы запустить файл(это при условии если у вас второй способ "некоторого времени")
    Написано
  • Как вычесть из множества все элементы не являющиеся навыками?

    @Tiubert
    Insukuro, у программистов есть так называемая проф. деформация - усложнять легкое действие кодом. Например, вместо того чтобы просто ручками почистить так называемые "навыки" и потратить на это, ну, минут 10, вы хотите написать код который это сделает за вас. Если готового ассета с навыками нету, то смысла создавать его в принципе тоже нету - потому что по любому вы пройдетесь по всему списку.
    Так что остается 2 варианта: первым будет просто ручками, а второй - поменять тот принцип от куда вы берете такие данные.
    Написано
  • Как вычесть из множества все элементы не являющиеся навыками?

    @Tiubert
    Если есть просто список с дата-сетами в виде текста, то вот формула:
    user_data = {"тот словарь",  "что вы скинули"} # кстати, его можно сделать тоже массивом, судя из вашего примера
    data_assets = ["массив", "с какимито", "навыками которые не допустимы"]
    sorted_user_data = [i for i in user_data if i not in data_assets]

    Тут это всё сделано через генератор, но можно и через обычный цикл.
    Написано
  • Как вычесть из множества все элементы не являющиеся навыками?

    @Tiubert
    Insukuro, можно пример того как выглядит датасет (ну например какого он типа, название переменной)..
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Так, ну из замечаний могу отметить что по умолчанию все файлы сортируются как в проводнике начиная от директории заканчивая самой вложенной папкой
    Пример1

    find_pdfs("C:/Dir1")
    C:/Dir1/file1
    C:/Dir1/file2
    C:/Dir1/dir2/file1
    C:/Dir1/dir2/file2
    ...
    C:/Dir1/dir4/file3
    C:/Dir1/dir4/file4

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

    find_pdfs("C:/Dir1")
    C:/Dir1/file2
    C:/Dir1/file3
    C:/Dir1/dir2/file4
    C:/Dir1/dir2/file5
    ...
    C:/Dir1/dir4/file1
    C:/Dir1/dir4/file6

    ^ конкретно в этом примере файл C:/Dir1/dir4/file1 должен был располагаться в самом начале, но из-за того что его папка последняя - это не так (эти примеры не относятся к тому коду что написал я).

    Финальным вопросом будет: когда юзер выбирает папку, нужно ли брать файлы из вложенных папок в директории? Потому что если не учитывать этот параметр, то сортировка работает так как вам нужно, а если учитывать, то оно работает так как нужно - это факт. Можете попробовать перебросить файлы из вложенной папки в верхнюю директорию и сравнить результат с кодом.
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, хорошо, я постараюсь найти способ отсортировать список файлов точно также как в проводнике.
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, насколько важно именно в таком порядке сортировать файлы? как будет выглядеть порядок файлов без какой либо сортировки?
    def find_pdfs(directory):
        pdf_files = []
        for root_dir, _, files in os.walk(directory):
            for file in files:
                if file.lower().endswith('.pdf'):
                    pdf_files.append(os.path.join(file, root_dir))
        return pdf_files

    А если взять только одну какую-то папку и сравнить её с тем что выдаст код?
    def find_pdfs(directory):
        pdf_files = []
        for root_dir, _, files in os.walk(directory):
            for file in files:
                if file.lower().endswith('.pdf'):
                    pdf_files.append(os.path.join(file, root_dir))
            break
        return pdf_files
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Tiubert, возможно стоит изменить строку
    return list(map(lambda x: os.path.join(x[1], x[0]), sorted(pdf_files)))

    на
    return list(map(lambda x: os.path.join(x[1], x[0]), sorted(pdf_files, key=str.lower)))
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, так, давайте немного пообсуждаем.
    Я не просил вас мне подробно описать что и как сортируется, а на примере.
    Пример

    1. Афайл1
    2. Бфайл1
    3. Афайл3
    4. Бфайл2
    5. Сфайл4
    6. Бфайл0

    1. Афайл1
    2. Афайл3
    3. Бфайл0
    4. Бфайл1
    5. Бфайл2
    6. Сфайл4



    Ну судя из вашего объяснения "не все файлы могут иметь подобные имена"(которые начинаются с буквенной части) можно попробовать определить таковые или написать список таких имен или пойти дальше и создать в "приложении" "категории" файлов по ихниму началу - но это уже фантазии.
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, можете дать пример как должно отсортироваться? Наглядно.
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Tiubert, по поводу производительности: на моей машине 15270 файлов без проверки на pdf обрабатываются за 1.2 секунды в среднем. Если поставить проверку, то в той же директории 660 обрабатываются за ~0.25
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, да, стало понятнее, в принципе я так и думал, но не додумал(
    Написал вот такое "чудо" инженерии - должно работать, но над производительностью подобных вычислений еще стоит поработать
    def find_pdfs(directory):
        pdf_files = tuple()
        for root_dir, _, files in os.walk(directory):
            for file in files:
                if file.lower().endswith('.pdf'):
                    pdf_files = (*pdf_files, (file, root_dir))
        return list(map(lambda x: os.path.join(x[1], x[0]), sorted(pdf_files)))

    На выходе мы получаем список, но уже отсортированный.
    В чем суть? Вместо списка мы создаем tuple с кортежами внутри. Каждый кортеж отдельно от имени файла содержит его директорию чтобы она не участвовало в сортировке. То есть вид каждого кортежа выглядит так: ("имя файла", "директория"). После создания такого кортежа с кортежами мы просто используем функцию sorted которая по первому значению в каждом кортеже его сортирует, а после мы к каждому списку в кортеже применяем os.path.join и на выходе т.к. функция map обернута в list получаем отсортированный уже массив с путями к файлам.
    Написано
  • Как настроить сортировку в программе на Python?

    @Tiubert
    Олег, вот у вас конкретно поиск pdf файлов в директории
    def find_pdfs(directory):
        pdf_files = []
        for root_dir, _, files in os.walk(directory):
            for file in files:
                if file.lower().endswith('.pdf'):
                    pdf_files.append(os.path.join(root_dir, file))
        return pdf_files

    Тут у вас и список есть и файлы которые в этом списке. Если я правильно понимаю, то на выходе будет список файлов с путями, и вам нужно его отсортировать по имени. Верно или требует дополнительных условий?
    Написано