回答編集履歴

2

補足を追加

2020/04/19 22:20

投稿

yuta0801
yuta0801

スコア270

test CHANGED
@@ -59,3 +59,47 @@
59
59
  })
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+ ---
66
+
67
+
68
+
69
+ そして質問の内容とは直接関係ないことですが、他に2箇所改善することができます
70
+
71
+
72
+
73
+ 1つ目はメッセージを受信するたびに、メッセージの取得処理を実行していることになっていますが、`c.fetch`というコマンドが送信された場合にしか使用しないのであれば、if文の中に移したほうが良いです
74
+
75
+
76
+
77
+ 2つ目はチャンネルIDを指定して結果のメッセージを送信していますが、コマンドが送信されたチャンネルに送信するということであれば前出の`message.channel`とすることができます(意図的にID指定している場合は別です)
78
+
79
+
80
+
81
+ 最後にこれらもまとめるとこのようなコードになります
82
+
83
+
84
+
85
+ ```js
86
+
87
+ client.on('message', async message => {
88
+
89
+ if (message.content === `c.fetch`){
90
+
91
+ const messages = await message.channel.messages.fetch({ limit: 100 })
92
+
93
+ message.channel.send(`
94
+
95
+ fetchしたメッセージはこれらの通りです:
96
+
97
+ ${messages.map(m => m.content).join('\n')}
98
+
99
+ `)
100
+
101
+ }
102
+
103
+ })
104
+
105
+ ```

1

書いている途中で誤って回答を投稿してしまったため編集で追加

2020/04/19 22:19

投稿

yuta0801
yuta0801

スコア270

test CHANGED
@@ -1,4 +1,4 @@
1
- このコードから見受けられる問題としてはつあり、まず2行目の`channel`が定されてないことです
1
+ このコードから見受けられる問題としてはつあり、まず2行目の`channel`が定されてないことです
2
2
 
3
3
 
4
4
 
@@ -6,8 +6,56 @@
6
6
 
7
7
 
8
8
 
9
- なのでメッセージを取得するチャンネルを指定するのですが、
9
+ なのでメッセージを取得するチャンネルを指定するのですが、指定する方法はいくつもあるので、詳しくは[指定したチャンネルにメッセージを送信する方法まとめ](https://scrapbox.io/discordjs-japan/%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%BE%E3%81%A8%E3%82%81)を参照してください。(メッセージを送信する例にはなっていますがチャンネル指定部分に関しては同じなので、応用することができます)
10
10
 
11
11
 
12
12
 
13
- https://scrapbox.io/discordjs-japan/指定したチャンネルメッセ送信る方法まとめ
13
+ ここでは、その中の一つとして、メッセージ(コマンド)が送信されたチャンネルを指定するすると、`message.channel`のようなります(つまり今のコドに`message.`付け足だけですね)
14
+
15
+
16
+
17
+ 次に2つ目の問題点として、3行目で`msg`という変数を使っていますが、`msg`は定義(用意)されていないため、アクセスできません
18
+
19
+
20
+
21
+ この処理だと`message`のことだと思われるので、`msg`を`message`に修正すると解決すると思います
22
+
23
+
24
+
25
+ そして3つ目の問題点として、取得した`messages`を送信するメッセージに埋め込んでいる部分です
26
+
27
+
28
+
29
+ これはDiscord.jsにあるCollectionというもの([詳細](https://scrapbox.io/discordjs-japan/%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3))で、そのままでは文字の中に埋め込むことが出来ません
30
+
31
+
32
+
33
+ ここれではCollectionを埋め込める形にすればよいのですが、複雑なので結論から言うと`messages.map(m => m.content).join('\n')`とすると、各メッセージの内容を改行区切りで埋め込むことが出来ます。この処理の詳細については[こちら](https://scrapbox.io/discordjs-japan/Collection%E3%81%AE%E4%B8%BB%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9)が参考になると思います
34
+
35
+
36
+
37
+ これらをまとめるとコードはこのようになります(Discord.jsの読み込むなどの処理は省略されているものとして書いていますが、実際には必要です)
38
+
39
+
40
+
41
+ ```js
42
+
43
+ client.on('message', async message => {
44
+
45
+ const messages = await message.channel.messages.fetch({ limit: 100 })
46
+
47
+ if (message.content === `c.fetch`){
48
+
49
+ client.channels.cache.get('出力先のチャンネルID').send(`
50
+
51
+ fetchしたメッセージはこれらの通りです:
52
+
53
+ ${messages.map(m => m.content).join('\n')}
54
+
55
+ `)
56
+
57
+ }
58
+
59
+ })
60
+
61
+ ```