質問編集履歴
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -118,4 +118,82 @@
|
|
118
118
|
### 試したこと
|
119
119
|
エラーを吐く前はメールを送るとBotが起動し,正常な処理を行います.エラーを吐いてからメールを送ると起動せず,既読もつかなかったため,MailCheck()自体が動いてないようです.
|
120
120
|
### 環境
|
121
|
-
MacBook AirにBootCampで導入したWindows10 HomeにおいてPython 3.8.2をコマンドプロンプトからstart /b cmd /c ImapMail.pyにより実行しています.
|
121
|
+
MacBook AirにBootCampで導入したWindows10 HomeにおいてPython 3.8.2をコマンドプロンプトからstart /b cmd /c ImapMail.pyにより実行しています.
|
122
|
+
|
123
|
+
### 追記
|
124
|
+
御意見を受けまして,コードに修正を加えてみました.エラーが出てこないかどうかを確認するため現在試験的に実行し,放置しています.
|
125
|
+
1.再帰的に呼び出されないよう,TakagisanBot.py側にチェック処理を入れ,チェックの結果を基にTakagisanBot.pyがTakagisan()を実行するという形にしました.
|
126
|
+
2.ログインが重複しないよう,TakagisanBot.pyからimportさせることでログイン処理を一回のみの実行にしています.
|
127
|
+
3.5秒のループが短いのではということですが,このプログラムの目的がメールでサクッとbotを起動させることなのでなるべく短い間隔でチェックを行いたいため,現段階では5秒で保持しています.
|
128
|
+
これはマズイなど,修正したことで問題が発生していましたらご指摘いただければと思います.
|
129
|
+
```python
|
130
|
+
#TakagisanBot.py
|
131
|
+
import discord
|
132
|
+
import random
|
133
|
+
import Dice #自作
|
134
|
+
import ResDice #自作
|
135
|
+
import re
|
136
|
+
import jaconv
|
137
|
+
import sys
|
138
|
+
import ImapMail #自作
|
139
|
+
import time
|
140
|
+
from datetime import datetime
|
141
|
+
|
142
|
+
client = discord.Client()
|
143
|
+
|
144
|
+
def NOW():
|
145
|
+
print(datetime.now())
|
146
|
+
|
147
|
+
def Takagisan():#bot起動&それ以降の処理
|
148
|
+
@client.event
|
149
|
+
async def on_ready():
|
150
|
+
NOW()
|
151
|
+
print("準備おっけー!")
|
152
|
+
print(client.user.name)
|
153
|
+
print(client.user.id)
|
154
|
+
print("で入るよ~.")
|
155
|
+
|
156
|
+
sidlist=[]
|
157
|
+
|
158
|
+
@client.event
|
159
|
+
async def on_message(message):
|
160
|
+
#bot処理
|
161
|
+
client.run('')#bot起動
|
162
|
+
while True:#チェック処理ループです
|
163
|
+
if ImapMail.Check():
|
164
|
+
Takagisan()
|
165
|
+
elif ImapMail.Check() is None:
|
166
|
+
pass
|
167
|
+
else:
|
168
|
+
ImapMail.Check()
|
169
|
+
time.sleep(5)
|
170
|
+
```
|
171
|
+
|
172
|
+
```python
|
173
|
+
#ImapMail.py
|
174
|
+
import imaplib,psutil
|
175
|
+
|
176
|
+
user = ''
|
177
|
+
password = ''
|
178
|
+
gmail = imaplib.IMAP4_SSL('imap.gmail.com')
|
179
|
+
gmail.login(user, password)
|
180
|
+
print('Run')
|
181
|
+
|
182
|
+
def MailCheck():
|
183
|
+
gmail.select('inbox')
|
184
|
+
action, [data] = gmail.search(None, 'UNSEEN')
|
185
|
+
for num in data.split():
|
186
|
+
gmail.store(num, '+FLAGS', r'\SEEN')
|
187
|
+
return True
|
188
|
+
|
189
|
+
def ProcessCheck(Program):
|
190
|
+
return Program in (p.name() for p in psutil.process_iter())
|
191
|
+
|
192
|
+
def Check():
|
193
|
+
if ProcessCheck('TakagisanBot.py'):
|
194
|
+
return None
|
195
|
+
elif MailCheck():
|
196
|
+
return True
|
197
|
+
else:
|
198
|
+
return False
|
199
|
+
```
|