Pythonを使用して不協和音ボットを作成しようとしていますが、このボットを見つけてまとめました。
import discord
import asyncio
import random
client = discord.Client()
inEmail = input("Email:")
inPassword = input("Passwd:")
async def background_loop():
await client.wait_until_ready()
while not client.is_closed:
channel = client.get_channel("************")
messages = ["Hello!", "How are you doing?", "Testing!!"]
await client.send_message(channel, random.choice(messages))
await asyncio.sleep(120)
client.loop.create_task(background_loop())
client.run(inEmail, inPassword)
それでも、それを実行しようとしたときに、SyntaxError
を受け取りました。
File "1.py", line 7
async def background_loop():
^
SyntaxError: invalid syntax
何故ですか?私はそれをテストする前にそれを受け取ったことがありません。
v3.3でPythonに非同期要求が導入されました 、v3.3より前(v2.Xを含む)Pythonを実行している場合、新しいバージョンのPythonをインストールする必要があります。
のみ Python 3.3を実行している場合:asyncio
はstdlibの一部ではありません pypiから手動でインストールする必要があります :
pip install asyncio
async
およびawait
キーワードは、Python 3.5以降で有効のみです。 Python 3.3または3.4を使用している場合、コードに次の変更を加える必要があります。
async
ステートメントの代わりに@asyncio.coroutine
デコレーターを使用します。async def func():
pass
# replace to:
@asyncio.coroutine
def func():
pass
await
の代わりにyield from
を使用します。await coroutine()
# replace to:
yield from coroutine()
次に、関数を変更する必要があるものの例を示します(3.3-3.4を使用している場合)。
import asyncio
@asyncio.coroutine
def background_loop():
yield from client.wait_until_ready()
while not client.is_closed:
channel = client.get_channel("************")
messages = ["Hello!", "How are you doing?", "Testing!!"]
yield from client.send_message(channel, random.choice(messages))
yield from asyncio.sleep(120)
前述の構文はPython 3の新しいバージョンでも引き続きサポートされますが、Pythonをサポートする必要がない場合はawait
およびasync
を使用することをお勧めします3.3-3.4。あなたはこれを参照することができます documentation 、ここに短いスニペットがあります:
async def
タイプのコルーチンはPython 3.5で追加され、古いPythonバージョンをサポートする必要がない場合に推奨されます。
discord.py は現在3.4.2-3.6.6をサポートしています(2019年1月の時点で3.3-3.4.1、3.7はサポートしていません)。
Discord.pyで開発するには、discord.py書き換えブランチを使用することをお勧めします。
discord.py-rewrite は3.5.3-3.7をサポートします。
Githubから更新されたPyMCをインストールすることで解決しました(Python 3.7で発生するバグを修正しました):
pip install git+https://github.com/pymc-devs/pymc.git