この記事ははてなブログからの移転記事です。自動的に移動するようになっています。
はじめに
Discord.py を使用して、Discord Botを制作しています。
以前、「指定した時間にBotにメッセージを送信してもらう」という機能を制作しましたが、Railwayにてデプロイした際、日本時間ではなくサーバーのローカルの時間で送信が実行されてしまうということがおきました。
それを修正していきたいと思います。
なお、プログラミング初心者につき、間違いありましたらコメントにお知らせください…。
開発環境
- discord.py 2.1.0
- python3 3.8.10
やりたいこと
- タイムゾーンを考慮しつつ、指定した時間にBotにメッセージを発言してもらう
やったこと
pytzの導入
Pythonにてタイムゾーンを利用するときに便利なライブラリ「pypz」を導入しました。
インストールは以下より。
$ pip install pytz
日付の取得時にタイムゾーンを取得する
datetime.now
で日付等を指定するときにタイムゾーンを指定します。
now = datetime.now(timezone('Asia/Tokyo'))
時間でメッセージを送信するようにする
上記で修正した分を含めて、メッセージを送信するようになおしていきます。
import discord from discord.ext import tasks from datetime import datetime from pytz import timezone # 毎日19時半にゴミ出しを促すメッセージを送信する @tasks.loop(seconds=60) async def loop(): # 現在の時刻 now = datetime.now(timezone('Asia/Tokyo')) if now.hour == 19 and now.minute == 30: channel = client.get_channel(CHANNEL_ID) await channel.send('ゴミ出しに行こうね!')
おわり
時差のことをすっかり忘れていて、19時半に設定したメッセージがしばらく朝の4時半にずっと届いてました。
コメント