'Commands don't run in discord.py 2.0 - no errors, but run in discord.py 1.7.3

I'm trying to understand how migrating from Discord.py version 1.7.3 to 2.0 works. In particular, this is test code I'm using:

from discord.ext import commands

with open('token.txt', 'r') as f: TOKEN = f.read()

bot = commands.Bot(command_prefix='$',  help_command=None)

@bot.event
async def on_ready():
    print('bot is ready')

@bot.command()
async def test1(ctx):
    print('test command')

bot.run(TOKEN)

In Discord.py 1.7.3, the bot prints 'bot is ready' and I can do the command $test1$.

In Discord.py 2.0, the bot prints 'bot is ready', but I can't do the command, and there is no error message in the console when I'm trying to do the command.

Why does this occur, and how can I restore the behaviour of version 1.7.3 in my bot?



Solution 1:[1]

Use Intents with discord.py 2.0

  1. Enable Intents

  1. Add your intents to the bot

Let's add the message_content Intent now.

import discord
from discord.ext import commands

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

bot = commands.Bot(command_prefix='$', intents=intents, help_command=None)

  1. Put it together

The code should look like this now.

import discord
from discord.ext import commands

with open('token.txt', 'r') as f: TOKEN = f.read()

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

bot = commands.Bot(command_prefix='$', intents=intents, help_command=None)

@bot.event
async def on_ready():
    print('bot is ready')

# Make sure you have set the name parameter here
@bot.command(name="test1$", aliases=["test1"])
async def test1(ctx):
    print('test command')

bot.run(TOKEN)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1