#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("")