質問編集履歴

1

追記

2020/05/11 09:14

投稿

zzzTKG
zzzTKG

スコア7

test CHANGED
File without changes
test CHANGED
@@ -239,3 +239,159 @@
239
239
  ### 環境
240
240
 
241
241
  MacBook AirにBootCampで導入したWindows10 HomeにおいてPython 3.8.2をコマンドプロンプトからstart /b cmd /c ImapMail.pyにより実行しています.
242
+
243
+
244
+
245
+ ### 追記
246
+
247
+ 御意見を受けまして,コードに修正を加えてみました.エラーが出てこないかどうかを確認するため現在試験的に実行し,放置しています.
248
+
249
+ 1.再帰的に呼び出されないよう,TakagisanBot.py側にチェック処理を入れ,チェックの結果を基にTakagisanBot.pyがTakagisan()を実行するという形にしました.
250
+
251
+ 2.ログインが重複しないよう,TakagisanBot.pyからimportさせることでログイン処理を一回のみの実行にしています.
252
+
253
+ 3.5秒のループが短いのではということですが,このプログラムの目的がメールでサクッとbotを起動させることなのでなるべく短い間隔でチェックを行いたいため,現段階では5秒で保持しています.
254
+
255
+ これはマズイなど,修正したことで問題が発生していましたらご指摘いただければと思います.
256
+
257
+ ```python
258
+
259
+ #TakagisanBot.py
260
+
261
+ import discord
262
+
263
+ import random
264
+
265
+ import Dice #自作
266
+
267
+ import ResDice #自作
268
+
269
+ import re
270
+
271
+ import jaconv
272
+
273
+ import sys
274
+
275
+ import ImapMail #自作
276
+
277
+ import time
278
+
279
+ from datetime import datetime
280
+
281
+
282
+
283
+ client = discord.Client()
284
+
285
+
286
+
287
+ def NOW():
288
+
289
+ print(datetime.now())
290
+
291
+
292
+
293
+ def Takagisan():#bot起動&それ以降の処理
294
+
295
+ @client.event
296
+
297
+ async def on_ready():
298
+
299
+ NOW()
300
+
301
+ print("準備おっけー!")
302
+
303
+ print(client.user.name)
304
+
305
+ print(client.user.id)
306
+
307
+ print("で入るよ~.")
308
+
309
+
310
+
311
+ sidlist=[]
312
+
313
+
314
+
315
+ @client.event
316
+
317
+ async def on_message(message):
318
+
319
+ #bot処理
320
+
321
+ client.run('')#bot起動
322
+
323
+ while True:#チェック処理ループです
324
+
325
+ if ImapMail.Check():
326
+
327
+ Takagisan()
328
+
329
+ elif ImapMail.Check() is None:
330
+
331
+ pass
332
+
333
+ else:
334
+
335
+ ImapMail.Check()
336
+
337
+ time.sleep(5)
338
+
339
+ ```
340
+
341
+
342
+
343
+ ```python
344
+
345
+ #ImapMail.py
346
+
347
+ import imaplib,psutil
348
+
349
+
350
+
351
+ user = ''
352
+
353
+ password = ''
354
+
355
+ gmail = imaplib.IMAP4_SSL('imap.gmail.com')
356
+
357
+ gmail.login(user, password)
358
+
359
+ print('Run')
360
+
361
+
362
+
363
+ def MailCheck():
364
+
365
+ gmail.select('inbox')
366
+
367
+ action, [data] = gmail.search(None, 'UNSEEN')
368
+
369
+ for num in data.split():
370
+
371
+ gmail.store(num, '+FLAGS', r'\SEEN')
372
+
373
+ return True
374
+
375
+
376
+
377
+ def ProcessCheck(Program):
378
+
379
+ return Program in (p.name() for p in psutil.process_iter())
380
+
381
+
382
+
383
+ def Check():
384
+
385
+ if ProcessCheck('TakagisanBot.py'):
386
+
387
+ return None
388
+
389
+ elif MailCheck():
390
+
391
+ return True
392
+
393
+ else:
394
+
395
+ return False
396
+
397
+ ```