Как сделать выполнение команды раз в сутки. discord.py
Пытаюсь реализовать обновление статистики по решению задач на сервере раз в неделю, но loop не реагирует либо дает ошибку.
import asyncio
import discord
from discord.ext import commands, tasks
import config
import controls
import logging
logger = logging.getLogger('discord')
logger.setLevel(logging.INFO)
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='/', intents=intents)
@bot.event
async def on_ready():
await bot.tree.sync()
print('We have logged in as {0.user}'.format(bot))
@tasks.loop(seconds=10)
async def test1():
chanel = bot.get_channel(config.CHANNEL_NEWS_ID)
await chanel.send('Тест')
@test1.before_loop
async def test2():
await bot.wait_until_ready()
test1.start()
bot.run(config.TOKEN, log_handler=handler)
Получаю ошибку
Traceback (most recent call last):
File "C:\Users\vavil\PycharmProjects\Work\Разное\discord_bot_2\main.py", line 439, in <module>
test1.start()
File "C:\Users\vavil\PycharmProjects\Work\virtialpy\lib\site-packages\discord\ext\tasks\__init__.py", line 398, in start
self._task = asyncio.create_task(self._loop(*args, **kwargs))
File "C:\Users\vavil\AppData\Local\Programs\Python\Python39\lib\asyncio\tasks.py", line 360, in create_task
loop = events.get_running_loop()
RuntimeError: no running event loop
sys:1: RuntimeWarning: coroutine 'Loop._loop' was never awaited
Ответы (1 шт):
Автор решения: nyekitka
→ Ссылка
Ошибка возникает потому что вы пытаетесь вызвать асинхронную функцию test1.start() вне цикла событий. Если вы хотите, чтобы каждые 10 секунд вызывалась функция test1, запустите её во время запуска бота:
@bot.event
async def on_ready():
await bot.tree.sync()
print('We have logged in as {0.user}'.format(bot))
test1.start()