discord.py не удается выполнить задачи.команда цикла

#python #discord.py

#python #discord.py

Вопрос:

Я пытаюсь написать discord-бота, который сканирует веб-сайт друга и объявляет, когда было опубликовано новое сообщение. Поисковый робот работает просто отлично, но проблема возникает, когда я хочу объявить, что новое сообщение было опубликовано на определенном канале. Я попытался объявить сообщение в определенном канале с помощью следующей команды:

 @bot.command()
async def test(ctx):
    channel = bot.get_channel(my_channel_id_here)
    await channel.send('hello')
  

Когда я запускаю команду, сообщение выполняется успешно.
Я хочу, чтобы скрипт выполнял цикл каждые несколько минут, чтобы проверить, было ли опубликовано что-то новое, и поэтому хочу вставить этот код в @tasks.loop(seconds=45.0) раздел кода. Я попытался выполнить следующее:

 import discord
from discord.ext import tasks, commands
from discord.ext.commands import Bot
import time
import asyncio

bot = commands.Bot(command_prefix='>')

@bot.command()
async def test(ctx):
    channel = bot.get_channel(my_channel_id_here)
    await channel.send('hello')

@tasks.loop(seconds=45.0)
async def website(bot):
    
    print("started")
        
    channel = bot.get_channel(my_channel_id_here)
    await channel.send('hello')

@website.after_loop
async def after_website():
    print('Error has caused the loop to stop!')

website.start(bot)

bot.run('')
  

Когда я запускаю это, консоль выводит «Начато» правильно, но затем переходит прямо к «Ошибка привела к остановке цикла!».
Что я делаю не так?

Ответ №1:

Проверьте, готов ли ваш бот перед запуском цикла:

 import discord
from discord.ext import tasks, commands
from discord.ext.commands import Bot
import time
import asyncio

bot = commands.Bot(command_prefix='>')


@bot.command()
async def test(ctx):
    channel = bot.get_channel(my_channel_id)
    await channel.send('hello')


@tasks.loop(seconds=45.0)
async def website():
    print("started")
    channel = bot.get_channel(my_channel_id)
    await channel.send('hello')


@website.before_loop
async def before_website():
    await bot.wait_until_ready()


@website.after_loop
async def after_website():
    print('Error has caused the loop to stop!')


website.start()
bot.run("")
  

Документация