Задать вопрос
@kefirich

Как можно запустить бота на discord py и asyncio?

Доброго дня! Я хочу асинхронно запустить бота. Подскажите пожалуйста. Как можно исправить?
Task exception was never retrieved

bot.py
from test import Test

token = ""
redis_url = "redis://"
mongo_url = "mongodb://"

bot = Test(redis_url=redis_url, mongo_url=mongo_url)
bot.run(token)


test.py
import discord
from database import Db
import asyncio

class Test(discord.Client):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs, intents=discord.Intents.all())
        self.redis_url = kwargs.get('redis_url')
        self.mongo_url = kwargs.get('mongo_url')
        self.loop = asyncio.get_event_loop()

    def run(self, *args):
        self.loop.run_until_complete(self.start(*args))

    async def on_ready(self):
        print('hello!')


Также, будьте добры, объясните пожалуйста как и что нужно исправить?
Спасибо!
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой 11 комментариев
Решения вопроса 1
fenrir1121
@fenrir1121 Куратор тега discord.py
Начни с документации
Как можно запустить бота на discord py и asyncio
Так, как описано в документации библиотеки. Внутри функции run уже есть логика инициализации цикла событий
import discord

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)
client.run('your token here')


Если вы хотите самостоятельно им управлять есть функция start(), но в вашем варианте вы не получаете вообще никаких преимуществ, следовательно, все это не нужно. Обычно так делают если хотят вызывать бота в уже существующем цикле событий (и потом страдать). Для этого нужен asyncio.create_task(bot.start(token=token)

Подробно с комментариями бот в виде кастомного класса описан тут.

Task exception was never retrieved

Цикл событий завершается с исключением, которое вы не обрабатываете. А исключение вызывается, потому что start не принимает то, что вы пытаетесь в него передать *args

P.S. лучше описывать какую проблему вы решаете, а не что пытаетесь сделать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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