Sometimes I come across a sentence like:
おかあさんはわたしにチョコレートをかいました。
This sentence is grammatically correct, but it is NOT appropriate. IF a native speaker says this, the speaker is publicly announcing that he/she is ungrateful about her mother buying some chocolate for her and that doesn’t sound very nice. In most occasions this sentence should be:
おかあさんは(わたしに)チョコレートをかってくれました。
The reason for わたしは being in brackets is that くれました implies you are the receiver, so you don’t really have to say it any more.
Basically, てform + あげます、くれます、もらいます is about giving and receiving of "favours" and being able to use them correctly can be a key factor to interact with others smoothly.
Please have a look at these examples:
A: おかあさんはチョコレートをかいました。
B: おかあさんはチョコレートをかってあげました。
C: おかあさんはチョコレートをかってくれました。
D: おかあさんはチョコレートをかってもらいました。
Sentences A, B and C all describe the same action, "Mum bought some chocolate."
The action itself is exactly the same but the question is "who ate the chocolate."
A is the most neutral sentence, so probably Mum bought it and she ate it. Or the writer is just describing the fact, not knowing what happened to the chocolate.
B has あげました so Mum bought chocolate for someone other than the writer.
C says くれました and this implies that you are at the receiving end. When you are at the receiving end and if you fail to use くれました, that can give some "rude" and/or "arrogant" impression.
Now, D is completely different. もらいました means "received", so Mother is at the receiving end. Somebody other than you bought some chocolate for Mother.
However, if I change one letter of D and say おかあさんにチョコレートをかってもらいました。then that means the same as C.
I have many exercise questions how to use ~てあげます、くれます、もらいます structure in my Canvas "HSC Preparation" course. If you are interested, please visit my homepage: EasyJapaneseE.com