Advertisements
I am trying to create a discord bot in the new version of discord.py (latest version). I have been following an old tutorial for how to use cogs, but then used the discord.py API in order to update it with intents, etc. I cannot seem to shake the error in my code once it starts up. The error is
File "C:\Users\MyUsername\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\bot.py", line 946, in _load_from_module_spec
await setup(self)
TypeError: object NoneType can't be used in 'await' expression
Here is the code for my main.py file:
import discord
import os
from discord.ext import commands
# Create bot
client = commands.Bot(command_prefix=">", intents=discord.Intents.all())
# Load commands
@client.command()
async def load(ctx, extension):
await client.load_extension(f"Cogs.{extension}")
# Unload commands
@client.command()
async def unload(ctx, extension):
await client.unload_extension(f"Cogs.{extension}")
# On start
@client.event
async def on_ready():
# Import all commands on start
for filename in os.listdir("./Cogs"):
if filename.endswith(".py"):
await client.load_extension(f"Cogs.{filename[:-3]}")
Client.run() excluded for obvious reasons, it is at the end though.
The only cog I have is this (Ping.py):
import discord
from discord.ext import commands
import time
class Ping(commands.Cog):
def __init__(self, client):
self.client = client
@commands.Cog.listener()
async def on_ready(self):
print("Bot is online")
await self.client.change_presence(
status=discord.Status.online,
activity=discord.Game('SuperBot, >help for help')
)
@commands.command()
async def ping(self, ctx):
embed = discord.Embed(
title="Pong!",
description=f"I'm up! The bot latency is {self.client.latency}",
color=discord.Colour.random()
)
embed.set_footer(
text=time.strftime("%a : %H : %M")
)
await ctx.channel.send(embed=embed)
def setup(client):
client.add_cog(Ping(client))
I have tried moving loading the cogs in the main file out of the on_ready func but that errors too. How can I resolve this error?
>Solution :
setup
is async now.
Change it to this:
async def setup(client):
await client.add_cog(Ping(client))
Read the changelog: https://discordpy.readthedocs.io/en/latest/migrating.html#migrating-2-0-commands-extension-cog-async