Cr0wLey Posted January 27, 2021 Share Posted January 27, 2021 (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, 2021 by Cr0wLey errei várias letras Link to comment
Other Languages Moderators androksi Posted January 27, 2021 Other Languages Moderators Share Posted January 27, 2021 (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, 2021 by andreisrw @EDIT - #1: Corrigido dois erros no código do arquivo discord.lua 1 2 Link to comment
Boechat Posted January 27, 2021 Share Posted January 27, 2021 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 comment
Other Languages Moderators androksi Posted January 27, 2021 Other Languages Moderators Share Posted January 27, 2021 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 comment
Boechat Posted January 27, 2021 Share Posted January 27, 2021 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 comment
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