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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

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

JavaScript

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

Q&A

解決済

1回答

250閲覧

discord.js v14  postされた値を他jsに渡したい

hatbam

総合スコア1

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

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

JavaScript

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

0グッド

0クリップ

投稿2023/02/21 16:06

実現したいこと

glitchサーバーのdiscord.js v14において、node.jsを使って受け取った値を別のjsに渡したい

・postを受け取る->"server.js"
・受け取った値によってイロイロ処理をわける->"code.js"

やりたいこととしては
discord -> glitch -> GAS -> スプレッドシート参照
________________________________________↓
discord <- glitch <- GAS <- スプレッドシート集計

みたいなことがしたいです。

前提

「Discord.js Japan User Group」の「Glitchで開発を始める人のためのテンプレート」
を参考にしました。
ありがたいことにテンプレートが用意されていたので真似てみたのですが、
server.jsで受け取った値を利用する方法がわかりませんでした。

server.js

server.js

1const http = require("http"); 2const querystring = require("node:querystring"); 3 4//GASでwakeさせること。 5 6http 7 .createServer(function(req, res) { 8 if (req.method == "POST") { 9 var data = ""; 10 req.on("data", function(chunk) { 11 data += chunk; 12 }); 13 req.on("end", function() { 14 if (!data) { 15 res.end("No post data"); 16 return; 17 } 18 var dataObject = querystring.parse(data); 19 console.log("post:" + dataObject.type); 20 21 if (dataObject.type == 'test') { 22 //--> たとえばdataObjectをそのままcode.jsに渡したい 23 } 24 25 26 if (dataObject.type == "wake") { 27 console.log("Woke up in post"); 28 res.end(); 29 return; 30 } 31 res.end(); 32 }); 33 } else if (req.method == "GET") { 34 res.writeHead(200, { "Content-Type": "text/plain" }); 35 res.end("Discord Bot is Oprateing!"); 36 } 37 }) 38 .listen(3000); 39 40if (process.env.DISCORD_BOT_TOKEN == undefined || process.env.DISCORD_BOT_TOKEN == "") { 41 console.log("DISCORD_BOT_TOKENを設定してください。"); 42 process.exit(0); 43} 44 45require("./code.js")

code.js

code.js

1const {Client, GatewayIntentBits} = require("discord.js"); 2const client = new Client({ 3 intents: [ 4 GatewayIntentBits.Guilds, 5 GatewayIntentBits.GuildMembers, 6 GatewayIntentBits.GuildMessages, 7 GatewayIntentBits.MessageContent 8 ] 9}); 10 11client.on("ready", () => { 12 console.log("Bot準備完了!"); 13}); 14 15//ここから 16 17client.on("messageCreate", message =>{ 18 if (message.content === "hello."){ 19 message.channel.send(`hello! ${message.author}`) 20 } 21 22 // server.jsから受け取った値をもとにイロイロ処理したい 23 if (message.content.match(/んちゃ/)) { 24 const reply = await message.channel.send('ほよよ?') 25 await setTimeout(500); 26 await reply.delete() 27 } 28 29 30}) 31 32//ここまで 33 34client.login(process.env.DISCORD_BOT_TOKEN);

試したこと

知ってる方からすると当然かもですが
server.jsの末尾において
module.exports.content='test';
require("./code.js")
では値を渡せませんでした。

補足情報(FW/ツールのバージョンなど)

テンプレを参考にglitchでサーバーを立て、GASでwakeしてます。
別途スプレッドシートをデータベースみたいに使って、値をGAS->glitchに渡してdiscordへ渡して
botとして発言させたい、という狙いです。

js不慣れなのでツッコミ所多いかもですが、何卒アドバイスお願いいたしますm(_ _)m

"dependencies": {
"discord.js": "^14.7.0",
"querystring": "^0.2.1",
},
"engines": {
"node": "16.x"
},

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

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

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

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

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

guest

回答1

0

ベストアンサー

方法はいくつかあるのですが主に上げるのであれば

  1. code.js側でもrequireする

code.js側でもrequireすることでserver.jsのmodule.exportに入れた値をcode.jsで使うことができます。
2. code.jsで定義された関数をserver.jsに渡す
code.jsで定義した関数でもrequireでserver.jsに渡しておけばその関数を通してcode.js側に値を渡すことはできます
3. EventEmitterを使用する
code.jsで定義したemitterをserver.jsに渡しておくことでcode.jsに任意のデータを送ることができます

使い方次第ではありますがserver.jsで値を受け取るのとcode.jsで処理するのが別タイミングなのであれば1または2
受け取ったら何かしらの処理をするなら2または3の方法が利用できるかと思います
もちろんどのやり方でもできなくはないです

投稿2023/02/27 00:24

kinji2532

総合スコア57

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

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

hatbam

2023/03/03 09:37

ご回答ありがとうございます! いただいたヒントを元に2.の方法でなんとか実現できました。 大変助かりました。ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問