つれづれなるままに日々の色々なことを綴ります

【Discord.py】タイムゾーンを考慮して、指定した時間にBotに発言してもらう

はじめに

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時半にずっと届いてました。