Cr0wLey 3 Posted January 27 Share Posted January 27 (edited) Tem como fazer algum sistema de comando pelo discord e ir pro MTA? EXEMPLO: eu escrevo no chat do discord /giveM 3000 1 e dar 3000 de dinheiro para o ID 1 se tiver como, por favor fala qual é as funções para usar esse sistema. Edited January 27 by Cr0wLey errei várias letras Link to post
andr0xy 204 Posted January 27 Share Posted January 27 (edited) É 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. ) Spoiler 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: Spoiler function discordGiveMoney(playerId, value) local thePlayer = getPlayerFromID(playerId) if not thePlayer then return "Erro: não foi possível localizar um(a) jogador(a) com o ID especificado." end if value <= 0 then return "Erro: o valor deve ser maior que 0." end givePlayerMoney(thePlayer, value) return "Sucesso: " .. getPlayerName(thePlayer) .. " recebeu R$" .. value .. "!" end function getPlayerFromID(id) for k, v in pairs(getElementsByType("player")) do local pId = tonumber(getElementData(v, "player.id")) if pId == id then return v end end return false end Arquivo meta.xml, no qual você exportará as funções do arquivo acima: Spoiler <meta> <info author="andr0xy" type="script" name="Discord App - Commands/Functions" version="1.0.0" /> <script src="discord.lua" type="server" /> <export function="discordGiveMoney" type="server" http="true" /> </meta> 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. Edited January 27 by andreisrw @EDIT - #1: Corrigido dois erros no código do arquivo discord.lua 1 2 Link to post
Boechat 41 Posted January 27 Share Posted January 27 1 hour ago, andreisrw said: É 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. ) Reveal hidden contents 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: Reveal hidden contents function discordGiveMoney(playerId, value) local thePlayer = getPlayerFromID(playerId) if not thePlayer then return "Erro: não foi possível localizar um(a) jogador(a) com o ID especificado." end if value <= 0 then return "Erro: o valor deve ser maior que 0." end givePlayerMoney(thePlayer, value) return "Sucesso: " .. getPlayerName(thePlayer) .. " recebeu R$" .. value .. "!" end function getPlayerFromID(id) for k, v in pairs(getElementsByType("player")) do local pId = tonumber(getElementData(v, "player.id")) if pId == id then return v end end return false end Arquivo meta.xml, no qual você exportará as funções do arquivo acima: Reveal hidden contents <meta> <info author="andr0xy" type="script" name="Discord App - Commands/Functions" version="1.0.0" /> <script src="discord.lua" type="server" /> <export function="discordGiveMoney" type="server" http="true" /> </meta> 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. Muito bom, parabéns!!! Eu fiquei com uma dúvida, aonde você coloca o nome da função que você deseja usar no discord? O nome da função de exemplo é discordGiveMoney (), imagino que seja no lugar do testeProcedure(), certo? E outra, só uma recomendação mesmo, você poderia postar isso em Tutoriais em Geral para que mais pessoas possam ter acesso a essa informação... Caso você não queira, posso eu mesmo postar dando os devidos créditos? Link to post
andr0xy 204 Posted January 27 Share Posted January 27 Obrigado. Exatamente. O nome da função no código do 4O4 é testProcedure, no qual estou substituindo por discordGiveMoney. Você pode encontrar a função em questão dentro do arquivo discord.lua. Essas funções devem ser exportadas, server-side, como mostrei no código do arquivo meta.xml. Sobre a sua recomendação, eu mesmo irei criar um tutorial, com mais informações e mais código. Mas não por agora. 1 Link to post
Boechat 41 Posted January 27 Share Posted January 27 4 minutes ago, andreisrw said: Obrigado. Exatamente. O nome da função no código do 4O4 é testProcedure, no qual estou substituindo por discordGiveMoney. Você pode encontrar a função em questão dentro do arquivo discord.lua. Essas funções devem ser exportadas, server-side, como mostrei no código do arquivo meta.xml. Sobre a sua recomendação, eu mesmo irei criar um tutorial, com mais informações e mais código. Mas não por agora. Entendi, valeeu! Crie sim, vai ser de muita utilidade para a comunidade Link to post
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now