回答編集履歴
7
情報を追記
test
CHANGED
@@ -120,7 +120,15 @@
|
|
120
120
|
|
121
121
|
|
122
122
|
|
123
|
+
【追記】
|
124
|
+
|
125
|
+
hinanonさんによると「await member.voice.kick().catch(console.error)にしたら動きました」とのことです。
|
126
|
+
|
127
|
+
以下のコードもその情報に合わせて修正しました。
|
128
|
+
|
129
|
+
|
130
|
+
|
123
|
-
`member.voice.disconnect('理由')`は`Promise`を返す **非同期関数** なので、`await`で処理が終わるまで以降のコードの実行を中断します。
|
131
|
+
`member.voice.disconnect('理由')`や`member.voice.kick()`は`Promise`を返す **非同期関数** なので、`await`で処理が終わるまで以降のコードの実行を中断します。
|
124
132
|
|
125
133
|
`await`を使うにはそのコードが含まれる関数を`async`にしなければいけないので、そこも修正します。
|
126
134
|
|
@@ -150,7 +158,7 @@
|
|
150
158
|
|
151
159
|
// kick()を使う方法
|
152
160
|
|
153
|
-
member.voice.kick()
|
161
|
+
await member.voice.kick().catch(console.error)
|
154
162
|
|
155
163
|
|
156
164
|
|
6
説明を修正
test
CHANGED
@@ -92,12 +92,32 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
+
## ユーザを`VoiceChannel`から退出させる方法
|
96
|
+
|
97
|
+
|
98
|
+
|
95
|
-
|
99
|
+
いくつか方法があり、その中でもバージョンによって動くものと動かないものがあるようです。
|
100
|
+
|
101
|
+
|
102
|
+
|
96
|
-
|
103
|
+
- [ボイスチャットからユーザーを蹴る - Discord.js Japan User Group](https://scrapbox.io/discordjs-japan/ボイスチャットからユーザーを蹴る)
|
97
|
-
|
98
104
|
|
99
105
|
- [VoiceState.disconnect() - discord.js Documentation](https://discord.js.org/#/docs/main/stable/class/VoiceState?scrollTo=disconnect)
|
100
106
|
|
107
|
+
- [javascript - How do I disconnect a user from a voice channel in discord.js? - Stack Overflow](https://stackoverflow.com/questions/57650739/how-do-i-disconnect-a-user-from-a-voice-channel-in-discord-js)
|
108
|
+
|
109
|
+
- [javascript - Discord.Js disconnect members voice channel - Stack Overflow](https://stackoverflow.com/questions/64008957/discord-js-disconnect-members-voice-channel)
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
`member.voice.setChannel(null)`や`member.setVoiceChannel(null)`はメンバーのチャンネル情報を`null`に設定することにより、ボイスチャンネルから退出させるというものです。
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
一方、`member.voice.disconnect()`や`member.voice.kick()`は文字通りメンバーをボイスチャンネルから退出させるために用意された関数です。
|
118
|
+
|
119
|
+
バージョンによって`disconnect()`が使える・使えない分かれるようですが、どのバージョンから使えるのかは残念ながらわかりません。`kick()`は公式ドキュメントから見つけることすらできませんでしたが、ユーザ発の情報では割とありましたので、昔からある方法なのかもしれません(この辺は伝聞になってしまいますが申し訳ない)。
|
120
|
+
|
101
121
|
|
102
122
|
|
103
123
|
`member.voice.disconnect('理由')`は`Promise`を返す **非同期関数** なので、`await`で処理が終わるまで以降のコードの実行を中断します。
|
@@ -122,8 +142,18 @@
|
|
122
142
|
|
123
143
|
if (member) {
|
124
144
|
|
145
|
+
// disconnect()を使う方法
|
146
|
+
|
125
147
|
await member.voice.disconnect(`2時になったのでボイスチャットからキックしました(*'▽')`).catch(console.error)
|
126
148
|
|
149
|
+
|
150
|
+
|
151
|
+
// kick()を使う方法
|
152
|
+
|
153
|
+
member.voice.kick()
|
154
|
+
|
155
|
+
|
156
|
+
|
127
157
|
console.log(member.id)
|
128
158
|
|
129
159
|
}
|
5
コード修正
test
CHANGED
@@ -84,7 +84,7 @@
|
|
84
84
|
|
85
85
|
vchannels.each(vchannel =>
|
86
86
|
|
87
|
-
vchannel.members.
|
87
|
+
vchannel.members.each(/* ... */)
|
88
88
|
|
89
89
|
)
|
90
90
|
|
4
コード修正
test
CHANGED
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
|
75
|
-
そのため、各チャンネルの`members`プロパティを取得するには`
|
75
|
+
そのため、各チャンネルの`members`プロパティを取得するには`Collection.each()`しましょう。
|
76
76
|
|
77
77
|
|
78
78
|
|
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
vchannels.
|
85
|
+
vchannels.each(vchannel =>
|
86
86
|
|
87
87
|
vchannel.members.forEach(/* ... */)
|
88
88
|
|
@@ -112,9 +112,13 @@
|
|
112
112
|
|
113
113
|
|
114
114
|
|
115
|
+
`vchannel.members`も`Collection`なので、`forEach()`ではなく`each()`を使っています。
|
116
|
+
|
117
|
+
|
118
|
+
|
115
119
|
```js
|
116
120
|
|
117
|
-
vchannel.members.
|
121
|
+
vchannel.members.each(async member => {
|
118
122
|
|
119
123
|
if (member) {
|
120
124
|
|
3
コード修正
test
CHANGED
@@ -150,9 +150,11 @@
|
|
150
150
|
|
151
151
|
await member.voice.disconnect(`2時になったのでボイスチャットからキックしました(*'▽')`).catch(console.error)
|
152
152
|
|
153
|
+
|
154
|
+
|
155
|
+
/* 処理待ちは必要ない */
|
156
|
+
|
153
157
|
await channel.send(`2時になったのでボイスチャットからキックしました(*'▽')`).catch(console.error)
|
154
|
-
|
155
|
-
})
|
156
158
|
|
157
159
|
```
|
158
160
|
|
2
注意点が分かりやすいように修正
test
CHANGED
@@ -158,6 +158,10 @@
|
|
158
158
|
|
159
159
|
|
160
160
|
|
161
|
+
---
|
162
|
+
|
163
|
+
|
164
|
+
|
161
165
|
こんな感じでしょうか。
|
162
166
|
|
163
167
|
一応、`guild`, `vchannels`, `channel`が`null`や`undefined`, `[]`だった場合のエラー処理をしていませんのでご注意ください。
|
1
説明を追記
test
CHANGED
@@ -160,4 +160,6 @@
|
|
160
160
|
|
161
161
|
こんな感じでしょうか。
|
162
162
|
|
163
|
+
一応、`guild`, `vchannels`, `channel`が`null`や`undefined`, `[]`だった場合のエラー処理をしていませんのでご注意ください。
|
164
|
+
|
163
165
|
ご参考まで。
|