The 41-year-old musician has claimed he decided to clean up his act and quit drinking after the 'Hotline Bling' rapper's milestone birthday two years ago, because following a string of hangovers, he realised he didn't want to squander any of his career potential.
Speaking to Complex magazine, he said: ''I have the most amazing last-night-of-my-life-drinking story. It was Drake's 30th birthday party, and I made quite a fool of myself. It took me weeks to stop doing this every morning I woke up. And then I had a conversation with myself. I remember where I was. I was in my sixth day of the hangover. That's how big the hangover was.
''I looked out the window and I went, 'OK, John, what percentage of your potential would you like to have? Because if you say you'd like 60, and you'd like to spend the other 40 having fun, that's fine. But what percentage of what is available to you would you like to make happen? There's no wrong answer. What is it?' I went, '100.'''
The 'Your Body Is A Wonderland' hitmaker's decision to put down the bottle comes as he recently insisted he hasn't ''been a d**k in many years''.
John - who has been known for his bad boy reputation and often rude persona - said: ''Some people still say, 'That guy's a d**k.' And I go, 'Well, any of that data you're working off of is really old.' I mean, I can tell you for sure that I haven't been a d**k in many years. That's a really outdated take.''
The reputation of the 'New Light' singer largely came from comments he made about his sex life - including calling ex Jessica Simpson ''sexual napalm'' - and he now admits his ruder tendencies were brought on by his belief that he was untouchable.
He added: ''I probably had a run in my life where I wasn't aware that there was anything I couldn't have. And it made a monster out of me. And there's something very freeing about you can't. And that's about the right age in your life where you go, 'Yeah, you can't.'''
It's time for a riot grrrl revolution.
Audiences may be divided over whether this comedy crosses the line as it looks for...