質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2604閲覧

Minecraft統合版とGlitchサーバをwebsocketで通信したい

CodeMan

総合スコア0

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/02/09 07:18

前提・実現したいこと

Discord.jsとWebSocketを用いて、Minecraft統合版サーバのオンラインプレイヤーのリストを定期的にログ出力するDiscord Botを開発しようと考えています。
オンラインエディタのGlitchでWebSocketサーバを記述し、Minecraftの/connectコマンドでWebSocketサーバと接続することで実現します。

発生している問題・エラーメッセージ

/connectコマンドで接続を試みると"Connection closed"と表示され、Glitchのログには接続が完了した旨の出力がされません。

○コマンド(Minecraft)

Minecraft

1/connect https://"Glitchプロジェクト名".glitch.me:19132

○出力(Minecraft)

Minecraft

1Connection closed

○出力(Glitch)

Glitch

1listening on *:19132

○期待する出力(Glitch)

Glitch

1listening on *:19132 2user connected

該当のソースコード

Javascript

1const http = require("http"); 2const querystring = require("querystring"); 3const discord = require("discord.js"); 4const client = new discord.Client(); 5 6const WebSocket = require("ws"); 7const app = require("express")(); 8const server = require("http").Server(app); 9const { v4: uuidv4 } = require("uuid"); 10const util = require("util"); 11 12const wss = new WebSocket.Server({ server }); 13 14http 15 .createServer(function(req, res) { 16 if (req.method == "POST") { 17 var data = ""; 18 req.on("data", function(chunk) { 19 data += chunk; 20 }); 21 req.on("end", function() { 22 if (!data) { 23 res.end("No post data"); 24 return; 25 } 26 var dataObject = querystring.parse(data); 27 console.log("post:" + dataObject.type); 28 if (dataObject.type == "wake") { 29 console.log("Woke up in post"); 30 res.end(); 31 return; 32 } 33 res.end(); 34 }); 35 } else if (req.method == "GET") { 36 res.writeHead(200, { "Content-Type": "text/plain" }); 37 res.end("Discord Bot is active now\n"); 38 } 39 }) 40 .listen(3000); 41 42wss.on("connection", socket => { 43 console.log("user connected"); 44}); 45 46server.listen(19132, () => { 47 console.log("listening on *:19132"); 48}); 49 50if (process.env.DISCORD_BOT_TOKEN == undefined) { 51 console.log("DISCORD_BOT_TOKENが設定されていません。"); 52 process.exit(0); 53} 54 55client.login(process.env.DISCORD_BOT_TOKEN);

試したこと

接続するport番号を変えたり、複数のサイトを参考にWebSocketサーバの記述方法を変えてみましたが、変わりませんでした。

解決法をご存じでしたら、お教えいただきますよう何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

どうやらglitchとマインクラフトは相性が悪く(glitchとWebSocketが相性悪いのかもしれません)
素直にPCでサーバを記述したら実現できました。
また、スマートフォンでもサーバ化できましたので、今後はバックグラウンドでWebSocketサーバを動かしながらプレイしようと思います。

投稿2021/02/12 01:32

CodeMan

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問