前提・実現したいこと
Discordに緊急地震速報を送るBotを作りたく、毎秒リクエスト可能な緊急地震速報のAPIをDiscord.pyで毎秒リクエストし、変化があった場合にDiscordのテキストチャンネルに送信したいと思っています。
そのために、Discord.pyで一定時間おきに、実行させ発言させるプログラムを作ろうと思っています。
初めて質問します。何か不備があればよろしくお願いします。
発生している問題
エラーは発生しませんが、Discordでは一度しか発言されません。
※画像は編集しています。
該当のソースコード
Python
1import discord 2import asyncio 3 4client = discord.Client() 5 6token = "DiscordBotのトークン" 7 8@client.event 9async def on_ready(): 10 asyncio.ensure_future(greeting_gm()) 11 12async def greeting_gm(): 13 channel = client.get_channel('チャンネルID') 14 await client.send_message(channel, 'おはよう') 15 await asyncio.sleep(10) 16 17client.run(token)
試したこと
ソースコード
Python
1@client.event 2async def on_ready(): 3 loop = asyncio.get_event_loop() 4 loop.run_until_complete(greeting_gm()) 5 6async def greeting_gm(): 7 channel = client.get_channel('チャンネルID') 8 await client.send_message(channel, 'おはよう') 9 await asyncio.sleep(10)
発生している問題・エラーメッセージ
Ignoring exception in on_ready Traceback (most recent call last): File "/*/python3.5/site-packages/discord/client.py", line 307, in _run_event yield from getattr(self, event)(*args, **kwargs) File "testbot.py", line 12, in on_ready loop.run_until_complete(greeting_gm()) File "/*/python3.5/asyncio/base_events.py", line 325, in run_until_complete self.run_forever() File "/*/python3.5/asyncio/base_events.py", line 290, in run_forever raise RuntimeError('Event loop is running.') RuntimeError: Event loop is running. Task exception was never retrieved future: <Task finished coro=<greeting_gm() done, defined at testbot.py:14> exception=InvalidArgument('Destination must be Channel, PrivateChannel, User, or Object. Received NoneType',)> Traceback (most recent call last): File "/*/python3.5/asyncio/tasks.py", line 239, in _step result = coro.send(None) File "testbot.py", line 17, in greeting_gm await client.send_message(channel, 'おはよう') File "/*/python3.5/site-packages/discord/client.py", line 1145, in send_message channel_id, guild_id = yield from self._resolve_destination(destination) File "/*/python3.5/site-packages/discord/client.py", line 289, in _resolve_destination raise InvalidArgument(fmt.format(destination)) discord.errors.InvalidArgument: Destination must be Channel, PrivateChannel, User, or Object. Received NoneType Traceback (most recent call last): File "testbot.py", line 20, in <module> client.run(token) File "/*/python3.5/site-packages/discord/client.py", line 519, in run self.loop.run_until_complete(self.start(*args, **kwargs)) File "/*/python3.5/asyncio/base_events.py", line 335, in run_until_complete raise RuntimeError('Event loop stopped before Future completed.') RuntimeError: Event loop stopped before Future completed.
おそらくですが、asyncioのループとdiscord.pyのループが重複していることが原因だと思います。
補足情報(FW/ツールのバージョンなど)
- Python 3.5.1
- discord.py==0.16.12(async版)
可能であれば、Pythonの最新バージョンを使用し、最新のdiscord.py(rewrite版)を使用したいのですが、アップロードする予定のサーバーが、Python2.7.12とPython3.5.1しか対応していないため仕方なくバージョンを下げています。
ソースコードはこちらのサイトのものを使用させていただいています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/30 10:46