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

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

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

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

Q&A

解決済

1回答

3664閲覧

discord.jsを利用したbotで特定期間内のメッセージを取得したい

Bokota

総合スコア5

JavaScript

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

0グッド

1クリップ

投稿2019/10/27 06:36

前提・実現したいこと

使用言語;JavaScript
ライブラリ:discord.js
discordのbotでbotが参加している特定サーバー内の特定期間内のメッセージを全取得しようとしています。

fetchMessages関数では
https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=fetchMessages
100件までしか取得できないため、beforeとafterの条件を併せて利用し期間をずらしながら繰り返し取得しようとしています。

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

beforeの条件を指定するとafterの条件が無効になってしまうようです。

該当のソースコード

Javascript

1client.on('message', message => 2{ 3 if (message.content.match(/^test$/)) { 4 let channel = message.channel; 5 channel.fetchMessages({ limit: 100,before:discord.SnowflakeUtil.generate(new Date( 2019, 5, 2, 0, 0, 0 )),after:discord.SnowflakeUtil.generate(new Date( 2019, 5, 1, 0, 0, 0 ))}) 6 .then(messages => console.log(`Received ${messages.size} messages`)) 7 .catch(console.error); 8}

※まだfetchMessagesのテスト段階のコードなので期間はずらしていません

試したこと

beforeを指定しなければafterの条件は有効になり、指定した日時以降のメッセージが取得できることはわかりました。
beforeとafterの順番を入れ替えてみても、beforeのみ有効で、afterの条件は無効でした。

最初は検索
https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=search
を使おうとしましたがbotアカウントでは使えないようで...。

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

discord.js 11.5.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

ドキュメントに書いてあるようにbeforeとafterは同時に使えません

このような事を行うならbeforeを使ってメッセージを取得し、その最後のメッセージからbeforeで取得と繰り返すことで実装できると考えれます

投稿2019/11/15 09:59

mouse_484

総合スコア759

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

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

Bokota

2019/11/23 10:19

ありがとうございます。解決しました。 古い順ではなく、新しい順に取得するんですね。 また、beforeとafterは同時に使えるという思い込みのせいか、”around, before and after are mutually exclusive.”を"aroundと(beforeまたはafter)は同時に使えない"という意味だと誤読してしまっていたようです...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問