Как работают декораторы в aiogram?
По сути, это через декораторы aiogram(не единственная библиотека, которая так делает) регистрирует обработчик команд.
Пример такой реализации:
class Bot:
  def __init__(self):
    self.handlers = dict()
    self.on_message = None
  
  def on(self, command):
    def decorator(func):
      self.handlers[command] = func
      return func
    return decorator

  def handle(self, event)
    if event["object"]["message"]["text"] in self.handlers:
      self.handlers[event["object"]["message"]["text"]](event["object"])
    elif self.on_message is not None:
      self.on_message(event["object"])


bot = Bot()

@bot.on("привет")
def hello_handler(msg):
  print(f"Hello: {msg}")
  # Для ответа можете реализовать отдельную функцию, которая обращается к vk_api

def on_message(msg):
  print(msg)
Здесь надо реализовать ещё инициализацию бота, основной цикл и запуск.
Решение простое: не используй vk_api. Даже его разработчик советует использовать более продвинутые аналоги с поддержкой асинхронности, такие как vkbottle.

Да и после aiogram тебе будет легко пересесть.
https://github.com/timoniq/vkbottle