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

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

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

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

JavaScript

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

Q&A

解決済

3回答

3890閲覧

Discord.jsにおいて、リアクションを順番通りにつける方法がわかりません・・・

Yukissshii

総合スコア1

Discord

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

JavaScript

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

0グッド

1クリップ

投稿2020/05/08 16:31

編集2020/05/12 10:36

前提・実現したいこと

動画等のファイルがチャンネルに投稿されると自動的にリアクションをつけるようなBOTを作りたいのですが、
以下の構文だと毎回リアクションの順番がバラバラになってしまいます。
この順番をできれば☑️????????????????⏸の順でつけたいです。
ご回答いただけると幸いです・・・

追記、質問者はかなりの初心者です。

こちら現在も未だ解決しておりません…
回答をお待ちしております。

該当のソースコード

JavaScript

1 client.on('message', message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 return message.react('☑️') 7 8 }) 9 10 client.on('message', message => { 11 const file = message.attachments.first() 12 13 if (!file) return 14 15 return message.react('????') 16 17 }) 18 19 20 client.on('message', message => { 21 const file = message.attachments.first() 22 23 if (!file) return 24 25 return message.react('????') 26 27 }) 28 29 30 client.on('message', message => { 31 const file = message.attachments.first() 32 33 if (!file) return 34 35 return message.react('????') 36 37 }) 38 39 40 client.on('message', message => { 41 const file = message.attachments.first() 42 43 if (!file) return 44 45 return message.react('????') 46 47 }) 48 49 50 client.on('message', message => { 51 const file = message.attachments.first() 52 53 if (!file) return 54 55 return message.react('⏸') 56 57 }) 58 59 60

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

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

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

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

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

guest

回答3

0

ベストアンサー

まず最初に本質とは関係ないのですが、client.on('message', ...)を複数に分けて書くのはあまりよくないので、1つにまとめたほうがいいです。特に今回の場合だと処理の多くが共通しているのでまとめたほうが分かりやすいはずです

js

1client.on('message', message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 message.react('☑️') 7 message.react('????') 8 message.react('????') 9 message.react('????') 10 message.react('????') 11 message.react('⏸') 12}) 13

そうするとこのようなコードになるのですが、重要なのがmessage.react('☑️')ではあくまでリアクションすることを要求しているにすぎないことです。そして要求というのは様々な要因で必ずしも順番通りに完了しないことがあります

そらならうしたらよいかというと、順番通りに処理されてほしいときは要求が完了してから、新たな要求を出すという処理を書くことです。詳しいことには触れませんが、Promiseという仕組みでこれができます

js

1client.on('message', message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 message.react('☑️') 7 .then(() => message.react('????')) 8 .then(() => message.react('????')) 9 .then(() => message.react('????')) 10 .then(() => message.react('????')) 11 .then(() => message.react('⏸')) 12}) 13

そしてasync/awaitを使うと、もう少しシンプルになります

js

1client.on('message', async message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 await message.react('☑️') 7 await message.react('????') 8 await message.react('????') 9 await message.react('????') 10 await message.react('????') 11 await message.react('⏸') 12})

ただしそれぞれの要求を待っているので、全体的に完了するまでの時間が若干長くなることがあります

投稿2020/05/22 15:59

編集2020/05/29 06:11
yuta0801

総合スコア270

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

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

Yukissshii

2020/05/26 15:58

awaitが自分のツールだと使えなかったので、 promiseの方でやってみたところできました! これからちゃんと中身がわかるよう、勉強にはげみます・・・!
yuta0801

2020/05/29 06:11

すいません よく見たらasyncが抜けてました message => の前にasyncを書けば動くはずです(修正しておきました)
guest

0

絵文字を配列にしてあげて、forEachで回してあげると順番につくと思います。

js

1client.on('message', message => { 2 3 const file = message.attachments.first() 4 5 const emojis = ['☑️','????','????','????','????','⏸']; 6 if (!file) return 7 8 emojis.slice(0, 6).forEach(emoji => message.react(emoji)) 9})

投稿2020/05/21 01:10

yutarou12

総合スコア155

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

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

Yukissshii

2020/05/21 15:40

ご返信ありがとうございます! でうが、どうもこれでも毎回変わってしましますね・・・ Emoji自体に謎の要素があるみたいです・・・
yutarou12

2020/05/22 00:41

自分の環境では順番にリアクションはついたんですけどね........
Yukissshii

2020/05/22 11:09

なるほど・・・ もし差し支えなければ、ツール等使っていらっしゃるものを教えていただけると幸いです。。。!
yutarou12

2020/05/22 11:38

discord.js v12.2.0 npm v6.13.7 エディタ Visual Studio Code OS windows10 他に知りたい情報があれば教えてください!
Yukissshii

2020/05/26 15:52

ありがとうございます!! 参考にしつつ頑張ってみます・・・! 別の方の回答で解決しますいたので、ひとまずは今のツールでやってみます!
guest

0

JavaScript

1 client.on('message', message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 return message.react('☑️') 7 8 }) 9 10 client.on('message', message => { 11 const file = message.attachments.first() 12 13 if (!file) return 14 15 return message.react('????') 16 17 }) 18 19 20 client.on('message', message => { 21 const file = message.attachments.first() 22 23 if (!file) return 24 25 return message.react('????') 26 27 }) 28 29 30 client.on('message', message => { 31 const file = message.attachments.first() 32 33 if (!file) return 34 35 return message.react('????') 36 37 }) 38 39 40 client.on('message', message => { 41 const file = message.attachments.first() 42 43 if (!file) return 44 45 return message.react('????') 46 47 }) 48 49 50 client.on('message', message => { 51 const file = message.attachments.first() 52 53 if (!file) return 54 55 return message.react('⏸') 56 57 })

毎回発火しているからでは?
なのでこれを修正するには、

JavaScript

1 client.on('message', message => { 2 const file = message.attachments.first() 3 4 if (!file) return 5 6 message.react('☑️') 7 message.react('????') 8 message.react('????') 9 message.react('????') 10 message.react('????') 11 message.react('⏸') 12 })

投稿2020/05/08 16:42

kyoya0819

総合スコア10429

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

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

Yukissshii

2020/05/08 23:19

ご返信ありがとうございます。 お教えいただいた方法で試してみたんですが、やはりばらばらになってしまいます・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問