É possível sim. Você precisa de alguma SDK, para criar a conexão entre o seu app (bot) e o servidor MTA.
Aqui estão algumas SDKs feitas pelos próprios administradores/staff do MTA:
https://github.com/botder/mtasa-discord-bot - por botder
https://github.com/4O4/node-mtasa - por 4O4
Você precisa ter um pouco de conhecimento em relação aos módulos/pacotes do Node.js. Está tudo explicado em ambos links. Particularmente, eu acho os dois muito bons, apesar de que o primeiro, feito pelo botder, possa ser um pouco mais complicado configurar, porém é o mais completo.
Irei explicar sobre a SDK feita pelo 4O4.
Ao abrir o link, você irá se deparar com esta página: https://prnt.sc/xpky0k - deixei em formato de link, pois a imagem é grande.
Desça um pouco a página, terá as instruções sobre como usar. Lembrando que o seu app (bot) deve ser em JavaScript, utilizando o framework Discord.js.
Este é o comando que você irá utilizar para adicionar o pacote ao seu projeto:
Aqui, é onde você irá carregar o pacote e logo em seguida instanciar a classe Client:
Feito isso, agora você deve configurar o IP do seu servidor, porta (HTTP), nome de usuário e senha - lembrando que eles, nome de usuário e senha, devem possuir acesso admin ao servidor. Sugiro criar uma conta dentro do seu servidor só para esse propósito. Insira uma senha forte.
Você fará o procedimento acima desta forma: - a ordem dos parâmetros é a mesma que eu citei acima. IP, Porta (HTTP), usuário e senha.
Finalmente, você está apto para criar uma comunicação com o seu servidor MTA através de comandos do seu app (bot). A imagem abaixo mostra duas opções de implementação. (lembrando que o código deve estar dentro de um bloco de comando, não irei me estender muito, mas você pode voltar aqui para retirar suas dúvidas. ?)
A primeira implementação é feita baseada em Async/Await, ou seja, de forma bem resumida, o seu código será assíncrono. O app (bot) irá esperar uma resposta do servidor para continuar a execução do código por completo, uma vez que o await é chamado para alguma função.
Já a segunda, é um pouco mais antiga, feita através de Promises.
Sobre o código mostrado acima, vou explicar um pouco mais sobre ele. Uma vez que a conexão está aberta (no caso, armazenada na variável mta), nós podemos obter os resources do servidor, através da propriedade resources, como mostrado no código abaixo - leve em consideração, a partir daqui, o segundo método, sem async/await.
mta.resources
Quando nós obtemos os resources, é possível buscar algum em específico, da mesma forma, usando a notação ponto. Em nosso caso, o código está buscando pelo resource nomeado de test_resource. Finalmente, quando buscamos por ele, você pode usar qualquer função que esteja dentro dele - a função deve ser exportada, com o atributo http definido como true. Então, vamos criar um exemplo de código, usado no MTA.
Arquivo discord.lua onde ficará suas funções que farão alguma ação dentro do jogo:
Arquivo meta.xml, no qual você exportará as funções do arquivo acima:
Sobre o arquivo discord.lua: tudo o que está retornando, aparecerá como um feedback em result, aqui:
Recomendo fortemente que você retorne qualquer feedback, para facilitar a sua visualização, se um comando foi efetuado ou não com sucesso dentro do servidor.