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

回答編集履歴

2

クラス修正

2019/07/01 06:05

投稿

退会済みユーザー
answer CHANGED
@@ -6,18 +6,20 @@
6
6
  3.その時間が来たとき、周期は一定して(例)24時間なので、またsleepを使う
7
7
 
8
8
  ```python
9
- async def timer():
9
+ async def timer(message):
10
10
  待機時間 = 指定の時間 - 現在時刻
11
11
  await asyncio.sleep(待機時間)
12
+ await message.channel.send("Test1")
12
13
  while True:
13
- message.channel.send("Test")
14
+ await message.channel.send("Test2")
14
15
  await asyncio.sleep(一定の周期)
15
16
  ```
16
17
 
17
18
  直打ちで見づらくてすみません
18
19
  また、discord.py(rewrite)はライブラリ側で指定されている(クラス名.run)にて既に非同期処理が実行されているため、
19
20
  ```Python
21
+ if message.content.startswith("test"):
20
- client.loop.create_task(timer())
22
+ client.loop.create_task(timer(message))
21
23
  ```
22
24
  のようにタスクを作成することができます
23
25
  詳しくは、asyncioの[リファレンス](https://docs.python.org/ja/3/library/asyncio.html)を参照してください

1

詳細

2019/07/01 06:05

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- Pythonではasyncioというライブラリを使うことによって非同期処理を行うことができます
1
+ Pythonではasyncioというライブラリを使うことによって非同期処理(例えば、これで待機する処理が行われていも、他の処理がそれ待機するなどの影響がない)を行うことができます
2
2
  wanwannyaan様の作成したい処理を作る場合、具体的には以下のような処理の流れになります
3
3
 
4
4
  1.スタートコマンドで非同期な関数を作り、現在時刻を取得、指定の時刻との差を計算し、いずれかの変数に代入
@@ -14,4 +14,10 @@
14
14
  await asyncio.sleep(一定の周期)
15
15
  ```
16
16
 
17
- 直打ちで見づらくてすみません
17
+ 直打ちで見づらくてすみません
18
+ また、discord.py(rewrite)はライブラリ側で指定されている(クラス名.run)にて既に非同期処理が実行されているため、
19
+ ```Python
20
+ client.loop.create_task(timer())
21
+ ```
22
+ のようにタスクを作成することができます
23
+ 詳しくは、asyncioの[リファレンス](https://docs.python.org/ja/3/library/asyncio.html)を参照してください