MENU

【discord.py bot 制作 】会話するBOT Part6 ~時間を教えてくれるBOTを作ってみる~

この記事はdiscord.pyを使用したdiscordのbotの備忘録です。

実際に使用しているコードもサンプルコードとして掲載しています。

BOT作りの参考の一つになればいいなと思います。

目次

動機

discordくんには時間は書いてある。書いてあるけども!時間をぼっとくんに言わせたかった。ただそれだけが理由。

ぼっとくんが時間を教えてくれるように改造していきます。

\ 前回の記事 /

動作環境

windows11

discord.py Version: 2.1.0

python 3.10

Visual Studio Code

動作コードの例

import discord
import datetime 
import pytz

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

@client.event+
async def on_message(message):
    if message.author.bot:
        return
    now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
    time = now.strftime('%Y年%m月%d日 %X')
    if "じかん" in message.content.lower():
        await message.channel.send("今は"+time+"だよ")

@client.event
async def on_ready():
    print(f'{client.user} が起動しました。')
TOKEN = "botのTOKENを入力する"
client.run(TOKEN)

discord の画面では下記のように表示されます。

コードの解説

import datetime 
import pytz

上段でプログラム内で時間を取り扱うことを教えてあげましょう。

下段は数ある国の中からどこの国の時間を取得するための準備をしてもらいます。

    now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
    time = now.strftime('%Y年%m月%d日 %X')
    if "じかん" in message.content.lower():
        await message.channel.send("今は"+time+"だよ")

1段目でnowが日本時間であることを定義します。

2段目で時間の表示形式を設定します。今回は 0000年0月0日 00:00:00 という形式での表示になります。

4段目えメッセージを送ります。今回はメッセージと定義が混ざった文章を送信したいので、+ を使用して1つの文としてくっつけてあげましょう。

問題のあったコード

×時間の設定を@client.eventの外に定義する

now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
time = now.strftime('%Y年%m月%d日 %X')

@client.event
async def on_message(message):
    if message.author.bot:
        return
    if "じかん" in message.content.lower():
        await message.channel.send("今は"+time+"だよ")

→BOTが起動した時間を取得してしまう

時間の取得は動作を行うときに取得するようにしよう!

サンプルコード

#取得
import discord
import datetime
import pytz

#定義
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

#-----------------------
#on_message(message)
#-----------------------
@client.event
async def on_message(message):
    if message.author.bot:
        return
#返答 完全一致
    if message.content == "あ":
        await message.channel.send("正常に動いてるよ!")
#返答 部分一致
    now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
    time = now.strftime('%Y年%m月%d日 %X')
    if "じかん" in message.content.lower():
        await message.channel.send("今は"+time+"だよ")

#基本動作 
@client.event
async def on_ready():
    print(f'3. 2. 1. ぽかん !!{client.user} が 起動 した !!')
TOKEN = "botのTOKENを入力する" #コピペを行う際はここを変更する
client.run(TOKEN)

今回は時間を知らせるためのコードでした。参考になれば幸いです。

自分もまだまだ発展途上ですのでぼっとくんと共に成長していければなと思います。

間違っているところや、より良いコード等ありましたら教えていただけると嬉しいです。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次