この記事はdiscord.pyを使用したdiscordのbotの備忘録です。
実際に使用しているコードもサンプルコードとして掲載しています。
BOT作りの参考の一つになればいいなと思います。
目次
動機
discordくんには時間は書いてある。書いてあるけども!時間をぼっとくんに言わせたかった。ただそれだけが理由。
ぼっとくんが時間を教えてくれるように改造していきます。
\ 前回の記事 /
【discord.py bot 制作 】会話するBOT Part5 ~特定のチャンネルだけで返答するBOTを作ってみる~ | ろいル…
この記事はdiscord.pyを使用したdiscordのbotの備忘録です。 実際に使用しているコードもサンプルコードとして掲載しています。 BOT作りの参考の一つになればいいなと思い…
動作環境
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)
今回は時間を知らせるためのコードでした。参考になれば幸いです。
自分もまだまだ発展途上ですのでぼっとくんと共に成長していければなと思います。
間違っているところや、より良いコード等ありましたら教えていただけると嬉しいです。
コメント