@PVasily

Почему Discord бот перестает отвечать?

Я пытаюсь запустить бота на pycord вместе с FastAPI. Но я заметил, что после ~10 минут работы - бот перестает отвечать. С чем это может быть связано?

При этом в консоль он выводит, что успешно переподключился, а перед тем как перестать отвечать он пишет: "bot is ready and online!".

Вот пример кода, который воспроизводит эту ошибку:
import asyncio
from contextlib import asynccontextmanager

import discord
import uvicorn
from fastapi import FastAPI


TOKEN = ""


bot = discord.Bot()


@bot.event
async def on_ready():
    print(f"{bot.user} is ready and online!")


@bot.event
async def on_resumed():
    print(f"{bot.user} is resumed")


@bot.slash_command(name="ping")
async def ping(ctx):
    await ctx.respond("Pong!")


@asynccontextmanager
async def lifespan(application: FastAPI):
    asyncio.create_task(bot.start(TOKEN))
    yield
    await bot.close()

app = FastAPI(lifespan=lifespan)
uvicorn.run(app)
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Может, уже неакутально, но отвечу.

asyncio.create_task(bot.start(TOKEN))
Созданный объект-таск может быть тут же собран garbage collector'ом, так как ты не хранишь ссылку на него. Разумеется, при этом сам таск (в твоём случае бот) прибьётся.
Сохрани возвращаемый create_task() объект хотя бы в локальную переменную.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы