はじめまして。かなりの初心者です。。
前提・実現したいこと
前提
discordのbotを作りたくてpythonをいろいろなサイトからのコピペでつなぎ合わせて使っています。
不足している情報、分かりにくい点等ございましたら教えてください。
よろしくお願いいたします。
実現したいこと
①サーバ内のどこかのチャンネルでbot以外が発言した場合に特定チャンネル(ch_id)に投稿が合ったことを通知したい。
②『〇〇チャンネルでユーザーID_ユーザー名さんが発言しました』という内容で通知したい。
発生している問題・エラーメッセージ
①特定チャンネルに通知ができなく下記エラーメッセージが表示されます。
Ignoring exception in on_message Traceback (most recent call last): File "ファイルパス", line 343, in _run_event await coro(*args, **kwargs) File "ファイルパス", line 25, in on_message await channel.send(msg) AttributeError: 'NoneType' object has no attribute 'send'
②〇〇チャンネルに当たる「投稿があったチャンネル名又はチャンネルID」を取得することができず、下記エラーメッセージが表示されました。
Ignoring exception in on_message Traceback (most recent call last): File "ファイルパス", line 343, in _run_event await coro(*args, **kwargs) File "ファイルパス", line 24, in on_message msg = f'{channel.id}で{message.author.id}_{client.user}さんが発言しました' AttributeError: 'NoneType' object has no attribute 'id'
該当のソースコード
python
1import discord 2import re 3 4TOKEN = "トークンコード" 5client = discord.Client() 6ch_id = 000000000000000000 7channel = client.get_channel(ch_id) 8 9@client.event 10async def on_ready(): 11 # 起動したらターミナルにログイン通知が表示される 12 print('ログインしました') 13 14# メッセージ受信時に動作する処理 15@client.event 16async def on_message(message): 17 # メッセージ送信者がBotだった場合は無視する 18 if message.author.bot: 19 return 20 #どこかのチャンネルでコメント投稿された場合に特定のチャンネルに通知する 21 if re.match(r".*", message.content): 22 msg = f'{channel.id}で{message.author.id}_{client.user}さんが発言しました' 23 await channel.send(msg) 24 25# Botの起動とDiscordサーバーへの接続 26client.run(TOKEN)
試したこと
①
await channel.send(msg)
の部分を
await message.channel.send(msg)
にすると投稿者と同じチャンネルにmsgの内容を投稿することができたのですが、message.がないと上記のエラーが表示されました。
②※message.channel.send(msg)の状態で試しました。
「{channel.id}で」の部分を消すと投稿者と同じチャンネルにですがちゃんと内容が表示されました。
補足情報(FW/ツールのバージョンなど)
win10
python 3.8
pycharm Version 2020.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。