🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Discord

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

JavaScript

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

Q&A

2回答

4262閲覧

Discord botでメッセージIDから一致するメッセージの取得

Yux

総合スコア30

Discord

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

JavaScript

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

0グッド

1クリップ

投稿2020/12/06 09:49

編集2020/12/06 09:53

前提・実現したいこと

かなり初歩的な質問で申し訳ないのですが、Discord botでメッセージIDから一致するメッセージの取得方法がわかりません。
実現したいことはユーザーがメッセージを送信した際、999999999999999999のIDと一致するメッセージを送信するです。

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

処理が失敗し、エラーメッセージが表示されます。

/app/main.js:64 message.channel.messages.fetch(messageId).then(targetMessage => ^ TypeError: message.channel.messages.fetch is not a function at Client.client.on.message (/app/main.js:64:30) at Client.emit (events.js:189:13) at MessageCreateHandler.handle (/app/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34) at WebSocketPacketManager.handle (/app/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65) at WebSocketConnection.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:333:35) at WebSocketConnection.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:296:17) at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:120:16) at WebSocket.emit (events.js:189:13) at Receiver._receiver.onmessage (/app/node_modules/ws/lib/websocket.js:137:47) at Receiver.dataMessage (/app/node_modules/ws/lib/receiver.js:409:14)

該当のソースコード

JavaScript

1 2const discord = require('discord.js'); 3const client = new discord.Client(); 4 5// メッセージ入力 6client.on('message', message => 7{ 8 9 // 固定ID'999999999999999999'定義 10 const messageId = '999999999999999999'; 11 12 // メッセージからチャンネル情報を取得して、取得したチャンネルからメッセージIDが一致するものを抽出 13 message.channel.messages.fetch(messageId).then(targetMessage => message.channel.send(targetMessage)); 14 return; 15 16}); 17

試したこと

以下のサイトを確認しながら進めています。
https://discord.js.org/#/docs/main/stable/general/welcome

メッセージの取得には.fetch()を使うのではと考えていました。
https://discord.js.org/#/docs/main/stable/class/MessageManager?scrollTo=fetch

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

Glitchで開発しています。
メッセージの取得方法が知りたいため、関係ないと思われるコードはかなり割愛しています。
そのためエラーが解消されるとループしてしまうのですが、対応済みなので気にしないでください。
不備や必要な情報があればお願いします。随時更新します。

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

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

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

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

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

guest

回答2

0

こちらの環境では

js

1const discord = require('discord.js'); 2const client = new discord.Client(); 3 4// メッセージ入力 5client.on('message', message => 6{ 7 8 // 固定ID'999999999999999999'定義 9 const messageId = '999999999999999999'; 10 11 // メッセージからチャンネル情報を取得して、取得したチャンネルからメッセージIDが一致するものを抽出 12 message.channel.messages.fetch(messageId).then(targetMessage => message.channel.send(targetMessage.content)); 13 return; 14 15});

でできた(targetMessageをtargetMessage.contentにした)ので、message.channel.typeの値を教えてくれると解決につながるかもしれません。

投稿2021/07/22 00:00

Waki285

総合スコア2014

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

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

0

js

1message.channel.messages.fetch(messageId) 2.then(targetMessage => 3 message.channel.send(targetMessage) 4);

message.channel.send(targetMessage)のtargetMessageがエラーを吐いているのではないでしょうか?
targetMessageは見る限りMessageクラスが返されるのでそのまま入れると
Invalid From Body(discord api error)が出てしまうのでtargetMessage.contentにしてみたらどうでしょう?

追記:
そのエラーはmessage.channel.messages.fetchが関数ではないことを意味するのでチャンネルのタイプを確認してみてください

投稿2021/03/21 00:41

編集2021/03/21 00:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問