teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

9

修正

2021/08/14 14:20

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  play(voice_client, queue)
19
19
 
20
20
  def play(voice_client, queue):
21
- if not queue or voice_client.():
21
+ if not queue or voice_client.is_playing():
22
22
  return
23
23
  source = queue.popleft()
24
24
  voice_client.play(source, after=lambda e:play(voice_client, queue))

8

is_playing追加

2021/08/14 14:20

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  play(voice_client, queue)
19
19
 
20
20
  def play(voice_client, queue):
21
- if not queue:
21
+ if not queue or voice_client.():
22
22
  return
23
23
  source = queue.popleft()
24
24
  voice_client.play(source, after=lambda e:play(voice_client, queue))

7

修正

2021/08/14 14:20

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -21,7 +21,7 @@
21
21
  if not queue:
22
22
  return
23
23
  source = queue.popleft()
24
- voice_client.play(source, lambda e:play(voice_client, queue))
24
+ voice_client.play(source, after=lambda e:play(voice_client, queue))
25
25
  ```
26
26
 
27
27
  のような感じでしょうか。プログラムに合わせて適宜読み替えてください。

6

修正(pop->append)

2021/08/14 14:01

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  def enqueue(voice_client, guild, source):
15
15
  queue = queue_dict[guild.id]
16
- queue.push(source)
16
+ queue.append(source)
17
17
  if not voice_client.is_playing():
18
18
  play(voice_client, queue)
19
19
 

5

typo

2021/08/14 13:48

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  queue_dict = defaultdict(deque)
13
13
 
14
14
  def enqueue(voice_client, guild, source):
15
- queue = stack_dict[guild.id]
15
+ queue = queue_dict[guild.id]
16
16
  queue.push(source)
17
17
  if not voice_client.is_playing():
18
18
  play(voice_client, queue)

4

修正

2021/08/14 13:18

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  play(voice_client, queue)
19
19
 
20
20
  def play(voice_client, queue):
21
- if not stack:
21
+ if not queue:
22
22
  return
23
23
  source = queue.popleft()
24
24
  voice_client.play(source, lambda e:play(voice_client, queue))

3

修正

2021/08/13 20:49

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -1,7 +1,8 @@
1
1
  VioceClient.playは、引数afterに指定した関数を音声再生後かエラー発生時に実行することができます。
2
+ なのでキューが空になるまでafterで再帰すればいいです。
2
3
 
3
4
  また、キューはcollections.dequeを使うと良いと思います。
4
- 複数のサーバーで運用される場合、スタックはサーバーごとに持たないと音声が混ざってしまうのでdictなどに格納するといいでしょう。
5
+ 複数のサーバーで運用される場合、キューはサーバーごとに持たないと音声が混ざってしまうのでdictなどに格納するといいでしょう。
5
6
 
6
7
  ざっくりとですが、イメージとしては、
7
8
 
@@ -20,7 +21,7 @@
20
21
  if not stack:
21
22
  return
22
23
  source = queue.popleft()
23
- voice_client.play(source, lambda e:play(voice_client, queue)
24
+ voice_client.play(source, lambda e:play(voice_client, queue))
24
25
  ```
25
26
 
26
27
  のような感じでしょうか。プログラムに合わせて適宜読み替えてください。

2

修正

2021/08/13 20:48

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  VioceClient.playは、引数afterに指定した関数を音声再生後かエラー発生時に実行することができます。
2
2
 
3
- また、この場合適しているのはキュー(後ろに入れて後ろから出す)でなくスタック(後ろに入れて前から出す)なので、collections.dequeを使うと良いと思います。
3
+ また、キューはcollections.dequeを使うと良いと思います。
4
4
  複数のサーバーで運用される場合、スタックはサーバーごとに持たないと音声が混ざってしまうのでdictなどに格納するといいでしょう。
5
5
 
6
6
  ざっくりとですが、イメージとしては、
@@ -8,19 +8,19 @@
8
8
  ```py
9
9
  from collections import defaultdict, deque
10
10
 
11
- stack_dict = defaultdict(deque)
11
+ queue_dict = defaultdict(deque)
12
12
 
13
- def push(voice_client, guild, source):
13
+ def enqueue(voice_client, guild, source):
14
- stack = stack_dict[guild.id]
14
+ queue = stack_dict[guild.id]
15
- stack.push(source)
15
+ queue.push(source)
16
16
  if not voice_client.is_playing():
17
- play(voice_client, stack)
17
+ play(voice_client, queue)
18
18
 
19
- def play(voice_client, stack):
19
+ def play(voice_client, queue):
20
20
  if not stack:
21
21
  return
22
- source = stack.popleft()
22
+ source = queue.popleft()
23
- voice_client.play(source, lambda e:play(voice_client, stack)
23
+ voice_client.play(source, lambda e:play(voice_client, queue)
24
24
  ```
25
25
 
26
26
  のような感じでしょうか。プログラムに合わせて適宜読み替えてください。

1

修正

2021/08/13 20:46

投稿

kairi003
kairi003

スコア1332

answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  stack_dict = defaultdict(deque)
12
12
 
13
- def enqueue(voice_client, guild, source):
13
+ def push(voice_client, guild, source):
14
14
  stack = stack_dict[guild.id]
15
15
  stack.push(source)
16
16
  if not voice_client.is_playing():