Other Languages Moderators Popular Post androksi Posted January 28, 2021 Other Languages Moderators Popular Post Share Posted January 28, 2021 (edited) Introdução O conteúdo deste tópico será separado por seções, ensinando passo-a-passo cada detalhe - desde criar um BOT no site do Discord Developers, até finalmente ligá-lo e executar os comandos, que serão enviados para o seu servidor MTA. Siga todos os passos para que tudo dê certo. Configurando o ambiente Bom, para que nós possamos iniciar, é necessário instalar duas coisas no seu computador: Node.js e Visual Studio Code. Só um adendo: não é estritamente necessário usar o VSCode, estou apenas sugerindo-o, e também é a IDE que irei utilizar neste tutorial. Após instalá-los, seguiremos a próxima seção. Como criar um BOT no Discord Developers Acesse este link: https://discord.com/developers/applications - se você não estiver com uma sessão do Discord aberta no navegador, faça o login para que você possa acessar as funcionalidades desse site. Provavelmente, após entrar numa sessão, uma página como esta irá surgir: Ignore as minhas aplicações. O seu estará vazio - eu acho. Para iniciarmos a criação de uma nova aplicação, clique no botão que está no canto superior direito: Escolha o nome que desejar, isso não importa muito para este tutorial. Uma vez criada, uma outra página aparecerá, com mais informações. Primeiramente, vá até a aba Bot. O botão fica ao lado esquerdo: Agora, para que criemos de fato o BOT, clique no botão ao lado direito: Um pop-up irá aparecer, basta clicar em Yes, do it! Mais uma vez, irá carregar, na mesma aba, mais informações, agora sobre o seu BOT. Não compartilhe nada do que estiver escrito na página, com ênfase no seu token, que faz o seu BOT ficar online. Agora, voltemos para a aba principal: Nessa aba, você possui o Client ID da sua aplicação. Esse ID não é o token, você não precisa se preocupar caso compartilhe com alguém: Copie-o e acesse este link para que possamos dar continuidade: https://discordapi.com/permissions.html. Nesse site, nós podemos gerar o link de convite, no qual você irá precisar para adicionar o BOT no seu servidor do Discord. Cole o ID que você copiou neste campo: Também, selecione a permissão de administrador, que fica logo acima: Feito todos os passos, copie o link, abra uma nova aba no seu navegador e acesse o link gerado. Ele é parecido com este: Assim que você acessar, selecione o servidor no qual você quer adicionar o BOT e confirme tudo o que é pedido. Caso você tenha feito corretamente, o seu BOT já está no seu servidor. Vamos a próxima seção. Clonando o repositório do BOT Optei por criar um repositório no GitHub para que fique mais fácil este tutorial. Se você não sabe o que é clonar, apenas clique no botão de baixar, ao invés de clonar. Ele é assim: Clique em Download ZIP. Uma vez que temos o repositório no computador, descompacte-o na área de trabalho mesmo. Feito isso, uma pasta será criada. Agora, abriremos o VSCode. Siga estas instruções: Você irá selecionar a sub-pasta, que está dentro do pasta descompactada. Preste atenção ao selecionar. Há uma outra pasta dentro daquela que extraímos, abra a pasta correta. O resultado deve ser este: Ignore os ícones, fonte, cor de fundo. São extensões que eu uso. Vamos a próxima seção. Como instalar os pacotes da aplicação Ainda no VSCode, pressione CTRL + ' (aspas simples). O terminal irá abrir. Com ele aberto, digite o comando npm install. Os pacotes serão instalados - uma nova pasta e arquivo serão gerados. Não se preocupe com isso, não faz parte deste tutorial. Próxima seção! Como habilitar o Modo Desenvolvedor no Discord Para que nós possamos avançar a próxima seção, nós precisamos habilitar o modo desenvolvedor, para obter os IDs de canais, servidor, usuário, cargos e outros. É simples. Acesse as configurações da sua conta, clique na aba Aparência, desça tudo e irá se deparar com isto: O meu já está ativado. Caso o seu não esteja, ative-o. Next... Configurando as variáveis do BOT Agora que nós já podemos copiar o ID de alguns elementos do Discord, iremos configurar os arquivos que estão dentro da pasta config, abra-a. Os arquivos são estes: Primeiramente, crie um canal no seu servidor do Discord e copie o ID dele. Basta clicar com o botão direito em cima e copiá-lo. Abra o arquivo channel.js e apenas altere o valor que está lá. Salve o arquivo e abra o próximo, guild.js. Para eu não me estender muito, você fará os mesmos passos acima, copiando o ID e substituindo. Para copiar o ID do seu servidor, basta clicar com o botão direito em cima do nome dele. Já no arquivo mta.js, você deve alterar as informações de acordo com o seu servidor. Veja a explicação abaixo. ip - do seu servidor. httpPort - a porta HTTP do seu servidor, você pode consultá-la aqui neste site. username - crie um usuário no seu servidor e dê permissões administrativas para ele. password - a senha que você colocou no usuário. ATENÇÃO: USE UM USUÁRIO E SENHA QUE NÃO SEJA FÁCIL DE DESCOBRIR, LOGO NÃO COMPARTILHE COM NINGUÉM. Em relação ao outro arquivo, prefix.js, é apenas o prefixo que você usará nos comandos, altere se quiser. O arquivo token.js fala por si só, você irá pegar o token de acesso do seu BOT, lá no site do Discord Developers e substituir dentro do arquivo. Acompanhe na imagem abaixo. Bom, já disse na seção passada que você não deve compartilhar o token. Seguiremos a próxima. Clonando o repositório do resource Assim como no repositório do BOT, o resource também está no GitHub. Baixe-o, da mesma forma do BOT, mas agora adicione no seu servidor MTA, na pasta resources. Lembrando que deve-se extrair e colocar a pasta correta, verifique bem a sub-pasta. Uma vez adicionado no seu servidor, use o comando refresh para atualizar a lista de resources e inicie-o. Ah, e também dê permissões administrativas para ele! Pronto. Já podemos prosseguir. Iniciando o BOT Estamos quase ao ponto de executar os comandos. Vamos iniciar o BOT. Agora no VSCode, naquele mesmo terminal, use o comando npm start. Se tudo foi feito corretamente, ele irá se iniciar sem erros e uma mensagem dizendo que o BOT foi ligado deve aparecer. Testando os comandos Lembra que nós criamos um canal para executar os comandos? Pois é agora que iremos utilizá-lo. Lembre-se: o seu servidor deve estar ligado - entre nele também para que você possa ver as mensagens no chat. Alguns comandos que eu fiz, apenas para exemplificar. Você pode adicionar mais comandos se quiser. Se você não alterou o prefixo, aqui estão os comandos que fiz. (Você deve ser ADMINISTRADOR do seu servidor para executá-los) $settime <hora> <minuto> - $settime 12 00 | Irá alterar o clima no servidor. $text <mensagem> - $text opa, jogadores, tudo bem? | A mensagem será enviada no chat do servidor. $status | Mostrará algumas informações do servidor no chat do Discord. $mute <jogador> - $mute andr0xy | O jogador ficará mutado até se reconectar. $givemoney <jogador> <quantia> - $givemoney andr0xy 15000 | Dá dinheiro ao jogador. $cgroup <nome> - $cgroup VIP | Cria um grupo na ACL. Apenas uma observação: é possível sim, nos comandos que envolvem jogadores, executá-los pelo ID. Basta você editar o resource - não irei explicar como faz isso, pois não tem relação ao tutorial. Agradecimento & Informações Muito obrigado por seguir o tutorial. Fiz com o ❤ para toda a comunidade. Espero que vocês evoluam ambos códigos e que isso se torne muito maior dentro do servidor de vocês. Lembre-se que tudo é possível no MTA, contribuam sempre de alguma forma para que outros também possam evoluir. A união é importante nessa área. Busquem conhecimento! Crédito ao autor da SDK, o que faz ser possível conectar-se ao servidor MTA. 4O4 - GitHub Edições neste tutorial 28.01.2021 - AVISO: renomeie o resource para discordapp. 29.01.2021 - CORREÇÃO: texto confuso na seção Clonando o repositório do BOT. 29.01.2021 - AVISO: código do resource refatorado, sendo mais fácil adicionar novos comandos. Edited February 5, 2021 by andreisrw 7 3 Link to comment
Boechat Posted January 29, 2021 Share Posted January 29, 2021 Parabéns, ótimo tutorial, muito útil e bem explicado! Muito obrigado pela contribuição pra comunidade!!! Link to comment
AlvesMTA Posted April 7, 2021 Share Posted April 7, 2021 Opa pode me ajudar pois o download nao vem com a pasta config e etc assim nao conseguindo seguir o tutorial que fica muito confuso faltando essa pasta Link to comment
Other Languages Moderators androksi Posted April 15, 2021 Author Other Languages Moderators Share Posted April 15, 2021 E aí. Você fala da pasta config do BOT? Ela consta sim no download. Link to comment
Boechat Posted June 29, 2021 Share Posted June 29, 2021 (edited) O comando npm install não está funcionando pra mim, alguém consegue me ajudar por favor? Aparece esse erro no terminal: Spoiler npm : O termo 'npm' não é reconhecido como nome de cmdlet, função, arquivo de script ou programa operável. Verifique a grafia do nome ou, se um caminho tiver sido incluído, veja se o caminho está correto e tente novamente. No linha:1 caractere:1 + npm install + ~~~ + FullyQualifiedErrorId : CommandNotFoundException Edited June 29, 2021 by Boechat Link to comment
Other Languages Moderators androksi Posted July 11, 2021 Author Other Languages Moderators Share Posted July 11, 2021 Opa, foi mal a demora @Boechat. Você precisa instalar o Node.js na sua máquina (ou seja lá onde você irá hospedar). 1 Link to comment
Renato Luiz Posted July 30, 2021 Share Posted July 30, 2021 aalguem pode me ajudar, ta aparecendo pra mim que um erro ocorrreu ao tentar executar o comando. Verefique o console da sua aplicação. nao sei o que fazer..... Link to comment
Other Languages Moderators androksi Posted August 3, 2021 Author Other Languages Moderators Share Posted August 3, 2021 Olá! Desculpa o atraso. Acredito que o erro esteja vindo do seu servidor MTA. Poderia dar detalhes sobre como está o nome do recurso (resource) e como está configurado as credenciais? Fique à vontade para me mandar mensagem privada aqui no fórum, caso seja necessário. Link to comment
Renato Luiz Posted August 5, 2021 Share Posted August 5, 2021 entao, chamei o resource de discord e pelo debug esta tudo certo nao entendo o porque ele ta dando este erro de console, ele nao se comunica de maneira nenhuma..... Link to comment
Fonseca_ Posted August 19, 2021 Share Posted August 19, 2021 Estou com o mesmo problema, . Link to comment
Other Languages Moderators androksi Posted August 25, 2021 Author Other Languages Moderators Share Posted August 25, 2021 @Renato Luiz, @Fonseca_, desculpe a demora. O nome do recurso dentro do servidor deve ser discordapp e ele precisa ter permissões administrativas. Link to comment
Ludy Posted October 27, 2022 Share Posted October 27, 2022 (edited) Fiz tudo de acordo com o post mais sempre que dou start da esse erro aqui "error 404" Codigo: Spoiler => O BOT está funcionando. StatusCodeError: 404 - "<html>\r\n<head><title>404 Not Found</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx/1.14.0 (Ubuntu)</center>\r\n</body>\r\n</html>\r\n" at new StatusCodeError (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request-promise-core\lib\errors.js:32:15) at Request.plumbing.callback (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request-promise-core\lib\plumbing.js:104:33) at Request.RP$callback [as _callback] (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request-promise-core\lib\plumbing.js:46:31) at Request.self.callback (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request\request.js:185:22) at Request.emit (node:events:513:28) at Request.<anonymous> (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request\request.js:1161:10) at Request.emit (node:events:513:28) at IncomingMessage.<anonymous> (C:\Users\Ludy\Desktop\tutorial-discordbot-main\node_modules\request\request.js:1083:12) at Object.onceWrapper (node:events:627:28) at IncomingMessage.emit (node:events:525:35) at endReadableNT (node:internal/streams/readable:1358:12) at processTicksAndRejections (node:internal/process/task_queues:83:21) { statusCode: 404, error: '<html>\r\n' + '<head><title>404 Not Found</title></head>\r\n' + '<body bgcolor="white">\r\n' + '<center><h1>404 Not Found</h1></center>\r\n' + '<hr><center>nginx/1.14.0 (Ubuntu)</center>\r\n' + '</body>\r\n' + '</html>\r\n', options: { uri: 'http://177.54.146.12:22212/discordapp/call/discordRequest', auth: { user: 'legal', password: '123', pass: '123' }, headers: { 'Content-type': 'application/json', 'User-Agent': 'MTA:SA WEB client on Node.js v16.17.1 (node-mtasa)' }, json: true, body: [ 'uuu', 'Console', 1, '2R47gfTZhp', 'Cidade Virtual' ], method: 'POST', callback: [Function: RP$callback], transform: undefined, simple: true, resolveWithFullResponse: false, transform2xxOnly: false }, response: <ref *1> IncomingMessage { _readableState: ReadableState { objectMode: false, highWaterMark: 16384, buffer: BufferList { head: null, tail: null, length: 0 }, length: 0, pipes: [], flowing: true, ended: true, endEmitted: true, reading: false, constructed: true, sync: true, needReadable: false, emittedReadable: false, readableListening: false, resumeScheduled: false, errorEmitted: false, emitClose: true, autoDestroy: true, destroyed: true, errored: null, closed: true, closeEmitted: true, defaultEncoding: 'utf8', awaitDrainWriters: null, multiAwaitDrain: false, readingMore: true, dataEmitted: true, decoder: null, encoding: null, [Symbol(kPaused)]: false }, _events: [Object: null prototype] { end: [Array], close: [Array], data: [Function (anonymous)], error: [Function (anonymous)] }, _eventsCount: 4, _maxListeners: undefined, socket: Socket { connecting: false, _hadError: false, _parent: null, _host: null, _readableState: [ReadableState], _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, _writableState: [WritableState], allowHalfOpen: false, _sockname: null, _pendingData: null, _pendingEncoding: '', server: null, _server: null, parser: null, _httpMessage: [ClientRequest], [Symbol(async_id_symbol)]: 185, [Symbol(kHandle)]: [TCP], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: null, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: false, [Symbol(kSetKeepAlive)]: false, [Symbol(kSetKeepAliveInitialDelay)]: 0, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0, [Symbol(RequestTimeout)]: undefined }, httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [ 'Server', 'nginx/1.14.0 (Ubuntu)', 'Date', 'Thu, 27 Oct 2022 23:02:51 GMT', 'Content-Type', 'text/html', 'Content-Length', '178', 'Connection', 'close' ], rawTrailers: [], aborted: false, upgrade: false, url: '', method: null, statusCode: 404, statusMessage: 'Not Found', client: Socket { connecting: false, _hadError: false, _parent: null, _host: null, _readableState: [ReadableState], _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, _writableState: [WritableState], allowHalfOpen: false, _sockname: null, _pendingData: null, _pendingEncoding: '', server: null, _server: null, parser: null, _httpMessage: [ClientRequest], [Symbol(async_id_symbol)]: 185, [Symbol(kHandle)]: [TCP], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: null, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: false, [Symbol(kSetKeepAlive)]: false, [Symbol(kSetKeepAliveInitialDelay)]: 0, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0, [Symbol(RequestTimeout)]: undefined }, _consuming: false, _dumped: false, req: ClientRequest { _events: [Object: null prototype], _eventsCount: 5, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: true, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, _contentLength: null, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [Socket], _header: 'POST /discordapp/call/discordRequest HTTP/1.1\r\n' + 'Content-type: application/json\r\n' + 'User-Agent: MTA:SA WEB client on Node.js v16.17.1 (node-mtasa)\r\n' + 'host: 177.54.146.12:22212\r\n' + 'authorization: Basic U3RhZmYxMjpjdnJwMTIzeg==\r\n' + 'accept: application/json\r\n' + 'content-length: 49\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'POST', maxHeaderSize: undefined, insecureHTTPParser: undefined, path: '/discordapp/call/discordRequest', _ended: true, res: [Circular *1], aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: '177.54.146.12', protocol: 'http:', [Symbol(kCapture)]: false, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(kUniqueHeaders)]: null }, request: Request { _events: [Object: null prototype], _eventsCount: 5, _maxListeners: undefined, uri: [Url], headers: [Object], body: '["uuu","Console",1,"2R47gfTZhp","Cidade Virtual"]', method: 'POST', readable: true, writable: true, explicitMethod: true, _qs: [Querystring], _auth: [Auth], _oauth: [OAuth], _multipart: [Multipart], _redirect: [Redirect], _tunnel: [Tunnel], _rp_resolve: [Function (anonymous)], _rp_reject: [Function (anonymous)], _rp_promise: [Promise [Object]], _rp_callbackOrig: undefined, callback: [Function (anonymous)], _rp_options: [Object], setHeader: [Function (anonymous)], hasHeader: [Function (anonymous)], getHeader: [Function (anonymous)], removeHeader: [Function (anonymous)], localAddress: undefined, pool: {}, dests: [], __isRequestRequest: true, _callback: [Function: RP$callback], proxy: null, tunnel: false, setHost: true, originalCookieHeader: undefined, _disableCookies: true, _jar: undefined, port: '22212', host: '177.54.146.12', path: '/discordapp/call/discordRequest', _json: true, httpModule: [Object], agentClass: [Function], agent: [Agent], _started: true, href: 'http://177.54.146.12:22212/discordapp/call/discordRequest', req: [ClientRequest], ntick: true, response: [Circular *1], originalHost: '177.54.146.12:22212', originalHostHeaderName: 'host', responseContent: [Circular *1], _destdata: true, _ended: true, _callbackCalled: true, [Symbol(kCapture)]: false }, toJSON: [Function: responseToJSON], caseless: Caseless { dict: [Object] }, body: '<html>\r\n' + '<head><title>404 Not Found</title></head>\r\n' + '<body bgcolor="white">\r\n' + '<center><h1>404 Not Found</h1></center>\r\n' + '<hr><center>nginx/1.14.0 (Ubuntu)</center>\r\n' + '</body>\r\n' + '</html>\r\n', [Symbol(kCapture)]: false, [Symbol(kHeaders)]: { server: 'nginx/1.14.0 (Ubuntu)', date: 'Thu, 27 Oct 2022 23:02:51 GMT', 'content-type': 'text/html', 'content-length': '178', connection: 'close' }, [Symbol(kHeadersCount)]: 10, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0, [Symbol(RequestTimeout)]: undefined } } Edited October 28, 2022 by Lord Henry Código grande demais, colocado dentro de um spoiler. 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