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

質問編集履歴

2

文法の修正

2022/01/11 00:12

投稿

poketatsu
poketatsu

スコア19

title CHANGED
File without changes
body CHANGED
@@ -7,15 +7,14 @@
7
7
 
8
8
  ```ここに言語を入力
9
9
  # coding:UTF-8
10
- import discord
11
10
  from datetime import datetime
12
11
  from discord.ext import tasks
13
12
  import random
14
13
  import asyncio
14
+ import discord
15
15
 
16
-
17
- ROLE_ID = 123456
16
+ ROLE_ID = 123456789
18
- CHANNEL_ID = 123456
17
+ CHANNEL_ID = 123456789
19
18
  # 接続に必要なオブジェクトを生成
20
19
  client = discord.Client()
21
20
 
@@ -23,31 +22,33 @@
23
22
  # 起動時に動作する処理
24
23
  @client.event
25
24
  async def on_ready():
25
+ loops.start()
26
26
  print('ready')
27
27
 
28
28
 
29
29
  # 60秒に一回ループ
30
30
  @tasks.loop(seconds=60)
31
31
  async def loops():
32
+
32
33
  # 現在の時刻
33
34
  now = datetime.now().strftime('%H:%M')
34
- print("lunchtime")
35
35
  channel_sent = client.get_channel(CHANNEL_ID)
36
36
  # ROLE_ID のロールを取得
37
37
  lunch_role = channel_sent.guild.get_role(ROLE_ID)
38
-
39
38
  tmp = list(set(channel_sent.members) & set(lunch_role.members))
40
39
  # 特定のチャンネル内にいる、お昼ご飯を注文したい人のリスト。積集合を取っています
41
40
 
42
41
  online_members = [member for member in tmp if member.status == discord.Status.online]
43
42
  # 先のリストから、ステータスがオンラインのメンバーのみのリストを作成。
43
+ if now == '09:02':
44
+ await channel_sent.send(f"今日のお昼ご飯当番は {random.choice(online_members).mention} さんです!!")
44
45
 
45
- if now == '16:44':
46
+
46
- await channel_sent.send(f"今日のお昼ご飯当番は {random.choice(online_members).mention} さんです!!")
47
47
  # Botの起動とDiscordサーバーへの接続
48
48
  client.run("Botのトークン")
49
49
 
50
50
 
51
+
51
52
  ```
52
53
  ###最後に
53
54
  プログラミング初心者ですが、お手柔らかにご教授していただけると嬉しいです!!

1

修正

2022/01/11 00:11

投稿

poketatsu
poketatsu

スコア19

title CHANGED
File without changes
body CHANGED
@@ -2,25 +2,20 @@
2
2
  特定のロールを付けた人かつオンラインの代表者にランチを決めてもらう
3
3
 
4
4
  ###発生している問題
5
+ エラーコードはでず、起動はするのですが、
6
+ 指定した時間に発言してくれません。
7
+
5
8
  ```ここに言語を入力
6
- Unhandled exception in internal background task 'loop'.
7
- Traceback (most recent call last):
8
- File "C:\Users\hopef\PycharmProjects\discordbot\venv\lib\site-packages\discord\ext\tasks\__init__.py", line 101, in _loop
9
- await self.coro(*args, **kwargs)
10
- File "C:/Users/hopef/PycharmProjects/discordbot/bot.py", line 28, in loop
11
- lunch_role = channel_sent.guild.get_role(ROLE_ID)
12
- AttributeError: 'NoneType' object has no attribute 'guild'
13
- ```
14
- ```ここに言語を入力
15
9
  # coding:UTF-8
10
+ import discord
16
11
  from datetime import datetime
17
12
  from discord.ext import tasks
18
13
  import random
19
14
  import asyncio
20
- import discord
21
15
 
16
+
22
- ROLE_ID = 12345645466
17
+ ROLE_ID = 123456
23
- CHANNEL_ID = 12345645466
18
+ CHANNEL_ID = 123456
24
19
  # 接続に必要なオブジェクトを生成
25
20
  client = discord.Client()
26
21
 
@@ -33,25 +28,26 @@
33
28
 
34
29
  # 60秒に一回ループ
35
30
  @tasks.loop(seconds=60)
36
- async def loop():
31
+ async def loops():
37
-
38
32
  # 現在の時刻
39
33
  now = datetime.now().strftime('%H:%M')
34
+ print("lunchtime")
40
35
  channel_sent = client.get_channel(CHANNEL_ID)
41
36
  # ROLE_ID のロールを取得
42
37
  lunch_role = channel_sent.guild.get_role(ROLE_ID)
38
+
43
39
  tmp = list(set(channel_sent.members) & set(lunch_role.members))
44
40
  # 特定のチャンネル内にいる、お昼ご飯を注文したい人のリスト。積集合を取っています
45
41
 
46
42
  online_members = [member for member in tmp if member.status == discord.Status.online]
47
43
  # 先のリストから、ステータスがオンラインのメンバーのみのリストを作成。
44
+
48
- if now == '18:36':
45
+ if now == '16:44':
49
46
  await channel_sent.send(f"今日のお昼ご飯当番は {random.choice(online_members).mention} さんです!!")
50
- loop.start()
51
-
52
47
  # Botの起動とDiscordサーバーへの接続
53
48
  client.run("Botのトークン")
54
49
 
50
+
55
51
  ```
56
52
  ###最後に
57
53
  プログラミング初心者ですが、お手柔らかにご教授していただけると嬉しいです!!