Jump to content

Comando por discord.


Recommended Posts

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 by Cr0wLey
errei várias letras
Link to comment
  • Other Languages Moderators

É 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:

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: spacer.png

Aqui, é onde você irá carregar o pacote e logo em seguida instanciar a classe Clientspacer.png

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: spacer.png - 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

spacer.png

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: N16oSN8.png

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 by andreisrw
@EDIT - #1: Corrigido dois erros no código do arquivo discord.lua
  • Like 1
  • Thanks 2
Link to comment
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:

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: spacer.png

Aqui, é onde você irá carregar o pacote e logo em seguida instanciar a classe Clientspacer.png

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: spacer.png - 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

spacer.png

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: N16oSN8.png

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

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.

  • Thanks 1
Link to comment
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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...