質問編集履歴
2
文法の修正
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 =
|
16
|
+
ROLE_ID = 123456789
|
18
|
-
CHANNEL_ID =
|
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
|
-
|
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
修正
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 =
|
17
|
+
ROLE_ID = 123456
|
23
|
-
CHANNEL_ID =
|
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
|
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 == '
|
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
|
プログラミング初心者ですが、お手柔らかにご教授していただけると嬉しいです!!
|