Se você realmente quiser que seja totalmente separado, você pode usar uma combinação de webhooks para entregar eventos ao seu bot e a API de requisições HTTP para que seu bot faça alterações no Discourse.
Como @merefield alude, é possível criar plugins que não substituem a funcionalidade principal, sendo notificados para eventos e interagindo com as APIs principais, que são mais fáceis de manter e menos propensos a ter efeitos colaterais indesejados.
Seguir a rota de webhooks/API também requer a configuração de uma stack para executar seu bot e garantir que ele esteja sempre disponível enquanto o Discourse estiver disponível, ambos os quais vêm gratuitamente com um plugin carregado no Discourse.
Escrever um plugin exigiria aprender Ruby e obter alguma familiaridade com as classes do Discourse, mas se você já é capaz de escrever e manter um bot em outra linguagem, tenho certeza de que você poderia aprender o necessário rapidamente.