This is an advanced function that is not needed in everyday Python programming, …

Так же помните, что get_user получает данные из кэша бота, и для его заполнения нужны intents
Для учета регистра нужно там же использовать содержимое сообщения в нижнем регистре message.content.lower()
str.casefold(): https://docs.python.org/3/library/stdtypes.html#st...
__dict__ есть далеко не у всех объектов/классов. Для получения списка аттрибутов существует функция dir(obj): https://docs.python.org/3/library/functions.html#dir. __dict__ существует vars(obj)
client.get_channel(ID)/client.get_guild(ID).get_channel(ID), либо передавать контекст в функцию task'а через start():@tasks.loop(seconds=5.0)
async def printer(ctx):
await ctx.send("5 seconds has passed")
printer.start(ctx)
on_message выполняется bot.process_commands. Вызывать bot.process_commands вручную необходимо лишь тогда, когда вы перезаписываете исходный listener, например через bot.event или в дочернем классе (во втором варианте, впрочем, можно также вызывать on_command из родительского класса через super()).
node --version