Ошибка `Task exception was never retrieved` в вашем коде может возникать, когда в асинхронной функции возникает исключение, и оно не обрабатывается. Давайте разберемся, как можно улучшить вашу структуру кода и решить эту проблему.
### Основные изменения
1. **Обработка исключений:** Добавьте обработку исключений в ваши асинхронные функции, чтобы иметь возможность видеть ошибки, если они возникают.
2. **Правильное использование `asyncio`:** Вместо того, чтобы использовать `self.loop.run_until_complete()`, будет лучше вызвать `await self.start()` внутри асинхронного метода. Переименуем метод `run` в `start` и вызовем его в основной функции.
### Исправленный код
**bot.py:**
```python
from test import Test
token = ""
redis_url = "redis://"
mongo_url = "mongodb://"
bot = Test(redis_url=redis_url, mongo_url=mongo_url)
# Запуск бота
if __name__ == "__main__":
try:
# Запускаем бота асинхронно
bot.run(token)
except Exception as e:
print(f"Error: {e}")
```
**test.py:**
```python
import discord
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')
async def on_ready(self):
print('Bot is online!')
```
Теперь напрямую вызываем `bot.run(token)` для запуска бота, и это будет правильно обрабатывать оба запуска и события, такие как `on_ready`.
### Дополнительные рекомендации
- Убедитесь, что вы используете актуальную версию `discord.py`, поддерживающую вашу версию Python.
- Убедитесь, что ваши `token`, `redis_url`, и `mongo_url` корректны и надежны.
- Вы можете также включить обработку исключений в методах `on_ready` и других асинхронных методах для лучшего отслеживания ошибок.
### Еще одно замечание
Если у вас включен `-W error` в интерпретаторе Python, это может приводить к исключениям, которые игнорируются. Убедитесь, что вы тестируете в среде, где обработка исключений настроена правильно, чтобы видеть все ключевые ошибки, которые могут возникнуть.
Надеюсь, это поможет вам! Если возникнут дополнительные вопросы, не стесняйтесь спрашивать.