質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

728閲覧

指定したチャンネルに地震情報を流したい

Blockgrass

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/31 11:22

編集2018/08/01 01:08

前提・実現したいこと

指定したチャンネルに地震情報を流したい

該当のソースコード

python

1import discord 2import json 3import requests 4 5client = discord.Client() 6 7@client.event 8async def on_ready(): 9 print('Logged in as') 10 print(client.user.name) 11 print(client.user.id) 12 print('------') 13 14@client.event 15async def on_message(message): 16 if channel.name == 'eew': 17 r = requests.get('http://svir.jp/eew/data.json') 18 eew = r.json() 19 embed=discord.Embed() 20 set = embed.add_field(name="地震情報", value=eew['Head']['Title'], inline=False) 21 embed.add_field(name="発表時刻", value=eew['Body']['Earthquake']['OriginTime'], inline=False) 22 embed.add_field(name="震源地", value=eew['Body']['Earthquake']['Hypocenter']['Name'], inline=False) 23 embed.add_field(name="マグニチュード", value=eew['Body']['Earthquake']['Magnitude'], inline=False) 24 embed.add_field(name="深さ", value=eew['Body']['Earthquake']['Hypocenter']['Depth'] + "km" , inline=False) 25 embed.add_field(name="予想震度[震源地付近の推定です]", value=eew['Body']['Intensity']['TextInt'], inline=False) 26 await client.send_message(message.channel, embed=embed) 27 28@client.event 29async def on_message(message): 30 if message.content.startswith('/quake-info'): 31 r = requests.get('https://api.p2pquake.net/v1/human-readable') 32 eew = r.json() 33 embed = discord.Embed() 34 embed.add_field(name="発生時刻: " , value=eew[0]['earthquake']['time'], inline=False) 35 embed.add_field(name="震源地: " , value=eew[0]['earthquake']['hypocenter']['name'], inline=True) 36 embed.add_field(name="深さ: " , value=eew[0]['earthquake']['hypocenter']['depth'], inline=False) 37 embed.add_field(name="マグニチュード:" , value=eew[0]['earthquake']['hypocenter']['magnitude'], inline=False) 38 embed.add_field(name="その他: " , value=eew[0]['earthquake']['domesticTsunami'], inline=True) 39 await client.send_message(message.channel, embed=embed) 40 41 if message.content.startswith('/eew'): 42 r = requests.get('http://svir.jp/eew/data.json') 43 eew = r.json() 44 embed=discord.Embed() 45 embed.add_field(name="地震情報", value=eew['Head']['Title'], inline=False) 46 embed.add_field(name="発表時刻", value=eew['Body']['Earthquake']['OriginTime'], inline=False) 47 embed.add_field(name="震源地", value=eew['Body']['Earthquake']['Hypocenter']['Name'], inline=False) 48 embed.add_field(name="マグニチュード", value=eew['Body']['Earthquake']['Magnitude'], inline=False) 49 embed.add_field(name="深さ", value=eew['Body']['Earthquake']['Hypocenter']['Depth'] + "km" , inline=False) 50 embed.add_field(name="予想震度[震源地付近の推定です]", value=eew['Body']['Intensity']['TextInt'], inline=False) 51 await client.send_message(message.channel, embed=embed) 52 53 if message.content.startswith('/zishin-set'): 54 if 'eew' in message.channel.name: 55 eew = True 56 await client.send_message(message.channel, "設定しました") 57 58client.run(token)

結果

/eew-set でやったが...

Blockgrass bot 今日 午前9時38分 設定しました <class 'set'>

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

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

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

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

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

crimnut

2018/07/31 11:34

コードは省略せずすべて掲載してください、また現在どこでどのようなエラーが出ているのか、期待する結果とどのように異なるのかを書いてくださると回答しやすいです。
CHERRY

2018/08/01 01:16

どのような点が問題なのでしょうか? 問題点を具体的に記載していただけないでしょうか?
guest

回答2

0

まず、追記修正依頼にもあるように、ちょっと質問する側として不親切ですね。
普通はこれだけじゃわからないです。

では、本題に入りますね。
とはいえ、どこが問題なのか全くわからない上に、どういった実装をしたいのかもわからないので、修正すべきところを指摘だけしていきます。
少なくとも間違っていると言えるところですね。

まず、on_message()は一つにまとめてください。
さもなければ、最初に書いた方のon_message()は絶対に実行されません。

また、

py

1if message.content.startswith('/eew'):

のところのインデントがずれています。

さらに最初のon_messageでchannelからnameを取得する命令がありますが、まずチャンネルを取得していないのでNoneTypeにはnameなんていうのはないよ、という旨のエラーが発生します。

加えて、Pythonにはset型というものが存在するので変数名としてsetを用いるのは適切ではありません。

それと、discord.pyでは requestsモジュールの利用は推奨されていません。
APIリファレンスにもあるように aiohttp の使用が推奨されています。

あと、最後の

py

1eew = True

は使われていないので、あるだけ無駄です。

投稿2018/08/02 22:15

Lazialize

総合スコア58

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

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

0

ベストアンサー

どうぞ流してください。

投稿2018/07/31 13:53

y_waiwai

総合スコア87747

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問