He ate shell and everything. They are suppose to eat snails the size of there eyeball at least once a week because puffers have beaks that grow and don't stop so they et hard things to keep them trimmed. This one time he ate one the size of him and was acting funny afterwords.
I'm not sure where you got the information that they would eat snails the size of their eyeballs. Puffers routinely eat snails MUCH larger than that. The beak is trimmed when the puffer takes 'bites' out of the shell as it eats the snail. The snail's shell scrapes the puffers beak in the process, which helps keep it from overgrowing. I've always fed my puffers a variety of foods, but snails only once or twice a month. If the tank had more snails than that, they were always free to hunt/eat whatever they could find. I've had GSPs eat snails 2 or 3x their size with no problems (often playing tug-of-war over the snail, each breaking off chunks of its shell).
I have changed it once a month or so ago. He is in a 20gallon tank with a heater and a filter in it.
Changed WHAT once a month or so ago? Very confusing. Some part of your maintainance is disrupting your biological filtration. We're asking questions to try to help you, but the answers are either not provided, or not understood clearly.
Good luck with your fish!