この記事はdiscord.pyを使用したdiscordのbotの備忘録です。
実際に使用しているコードもサンプルコードとして掲載しています。
BOT作りの参考の一つになればいいなと思います。
目次
動機
サーバーを兼任するぼっとくんにそのサーバー毎のチャンネルIDを入力してコードを書いていくと同じ条件がいくつもできて美しくない!
チャンネル名でチャンネルを指定できたらコードがきれいになると思ったので改良していきます。
\ 関連の記事 /
【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
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
for channel in client.get_all_channels():
if "チャンネル名" in channel.name.lower():
channel_ID = channel.id
if message.channel.id == channel_ID:
if message.content == "こんにちは":
await message.channel.send("こんにちは!")
@client.event
async def on_ready():
print(f'{client.user} が起動しました。')
TOKEN = "botのTOKENを入力する"
client.run(TOKEN)
上記のコードでチャンネル名の特定が可能になりました。
コードの解説
for channel in client.get_all_channels():
if "チャンネル名" in channel.name.lower():
channel_ID = channel.id
1つ目の段でBOTが加入しているサーバーのチャンネルをすべて取得します。
2つ目の段で指定したチャンネル名が含まれているチャンネルを探します。
3つ目の段でチャンネル名が一致したチャンネルのIDをこの先の動作で使用するチャンネルIDと定義しすることでチャンネル名前からチャンネルIDの取得が可能になりました。
問題のあったコード
補足
@client.event
async def on_message(message):
if message.content == "こんにちは":
for channel in client.get_all_channels():
if "チャンネル名" in channel.name.lower():
channel_ID = channel.id
if message.channel.id == channel_ID:
await message.channel.send("こんにちは!")
サンプルコード
#取得
import discord
import random
#定義
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
for channel in client.get_all_channels():
if "チャンネル名" in channel.name.lower(): #チャンネル名を変更する
channel_ID = channel.id
if message.channel.id == channel_ID:
#返答 完全一致
if message.content == "あ":
await message.channel.send("正常に動いてるよ!")
#条件選択式
word_list = ["できた" , "やった" ]
for choice_word in word_list:
if choice_word in message.content.lower():
await message.channel.send("おめでとう!\nよくがんばったね!")
#基本動作
@client.event
async def on_ready():
print(f'3. 2. 1. ぽかん !!{client.user} が 起動 した !!')
TOKEN = "botのTOKENを入力する" #コピペを行う際はここを変更する
client.run(TOKEN)
今回はチャンネル名からチャンネルIDを取得するためのコードでした。参考になれば幸いです。
自分もまだまだ発展途上ですのでぼっとくんと共に成長していければなと思います。
間違っているところや、より良いコード等ありましたら教えていただけると嬉しいです。
コメント