Discord on message and command at the same time

I have a discord bot that I'm working on that uses both the @bot.event; async def on_message(message) and @bot.command(pass_context=True)

bot = commands.Bot(command_prefix='~')

@bot.event
async def on_ready():
    print (bot.user.name)

@bot.event
async def on_message(message):
    if message.content.upper().startswith('!PING'):
        userID = message.author.id
        await bot.send_message(message.channel, "<@%s> Pong!" % (userID))
    if message.content.upper().startswith('!SAY'):
        args = message.content.split(" ")
        await bot.send_message(message.channel, "%s" % (" ".join(args[1:])))

@bot.command(pass_context=True)
async def echo(ctx):
    """REPEATS WHATEVER THE USER SAYS"""
    mesg=ctx.message.content.split("~echo ")
    repeat=" ".join(mesg[1:])
    await bot.say(repeat)
bot.run("token")

So when I run this code only my on_message(message) code runs and my @bot.command code just doesn't work. Is there a reason why this is happening or am I just doing something wrong for it not to work?