Проблема с discord.py зацикливание фоновой задачи

#python #discord.py

#python #discord.py

Вопрос:

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

Обратная трассировка (последний последний вызов): Файл «/home/jupe/.local/lib/python3.8/site-packages/discord/ext/commands/bot.py «, строка 607, в файле _load_from_module_spec spec.loader.exec_module(lib) «», строка 779, в файле exec_module «», строка 916, в файле get_code «», строка 846, в файле source_to_code «», строка 219в файле _call_with_frames_removed «/home/jupe/bot/modules/task.py «, строка 25 def setup(bot): ^ SyntaxError: недопустимый синтаксис Приведенное выше исключение было прямой причиной следующего исключения: Трассировка (последний последний вызов): Файл «main.py «, строка 12, в файле bot.load_extension(f’modules.{имя файла[:-3]}’) File «/home/jupe/.local/lib/python3.8/site-packages/discord/ext/commands/bot.py «, строка 664, в файле load_extension self._load_from_module_spec(спецификация, имя) «/home/jupe/.local/lib/python3.8/site-packages/discord/ext/commands/bot.py «, строка 610, в _load_from_module_spec вызывает ошибки.Сбой расширения (ключ, e) из e discord.ext.commands.errors.Сбой расширения: расширение ‘modules.task’ выдало ошибку: ошибка синтаксиса: недопустимый синтаксис (task.py , строка 25)

эта ошибка возникает в этом коде, который должен работать идеально

 import discord
from discord.ext import commands
import asyncio
import os

class CogBackground(commands.Cog):
    
    def __init__(self, bot):
        self.bot = bot
    
    async def scan(path):
        for file in os.listdir(path):
            x=os.stat(file)
            Result=(time.time()-x.st_mtime) 
            print("The age of the given file is: ",Result)

    async def task(self, ctx):
        self.scan("imgs/")
        await asyncio.sleep(15)

    @commands.Cog.listener()
    async def on_ready(self, ctx):
        self.bot.loop.create_task(self.task(ctx)

def setup(bot):
    bot.add_cog(CogBackground(bot))
 

Комментарии:

1. Вы не закрыли скобку в функции on_ready . Кроме того, я не могу найти ничего о функции «create_task» нигде в документах, поэтому я не думаю, что она должна работать идеально. discordpy.readthedocs.io/en/latest/search.html?q=create_task

2. это все еще как-то работало, прежде чем я переместил его в Cog, но я закрою скобку, спасибо

Ответ №1:

У вас есть синтаксическая ошибка в первой строке кода on_ready события, также scan функция является сопрограммой, поэтому вам нужно ее дождаться.

 await self.scan('./imgs')
 

Лучшей альтернативой этому является использование встроенного discord.ext.tasks расширения, это просто лучшая альтернатива

 from discord.ext import tasks

# In the cog 
@tasks.loop(seconds=15.0)
async def task(self):
    await self.scan('./imgs')

@commands.Cog.listener()
async def on_ready(self):
    self.task.start()