🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

7241閲覧

discord botで特定チャンネルに投稿通知をしたいです

pen0147

総合スコア9

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2021/02/06 21:03

編集2021/02/08 06:05

はじめまして。かなりの初心者です。。

前提・実現したいこと

前提
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

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'{message.channel.id}{message.author.id}_{message.author.name}さんが発言しました' 23 await client.get_channel(ch_id).send(msg) 24 25# Botの起動とDiscordサーバーへの接続 26client.run(TOKEN)

await channel.send(msg)

await client.get_channel(ch_id).send(msg)
に変更。

msg = f'{channel.id}で

msg = f'{message.channel.id}
に変更で解決しました。

また、
{client.user}
これだと投稿したbotの名前が表示されていたので
{message.author.name}
に変更しました。

投稿2021/02/09 12:17

pen0147

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問