2016-10-10 35 views
0

私はdiscord.pyを使用してチャットボットを作成しています。今のところ、それは単なるテストであり、すべてのコードは1つのファイルにあります。(discord.py)Client.send_message()はメッセージを送信しません

ボットはサーバーに接続し、感嘆符「!」で始まるメッセージを待ち受けます。

コマンドに応じて、2つの機能のいずれかを呼び出します。これまでは、意図したとおりに動作します。

client = discord.Client() 

@client.async_event 
def on_message(message): 
    author = message.author 
    if message.content.startswith('!test'): 
     print('on_message !test') 
     test(author, message) 
    if message.content.startswith('!quit'): 
     print('on_message !quit') 
     quit(author, message) 

これは奇妙なところです。 quit-functionが呼び出されると、プログラムは終了します。テスト関数が呼ばれると、何もしません。文字列も印刷されません。

def test(author, message): 
    print('in test function') 
    yield from client.send_message(message.channel, 'Hi %s, i heard you.' % author) 

def quit(author, message): 
    sys.exit() 

何が欠けていますか?どんな助けもありがとうございます。

答えて

1

私はこの正確な問題を抱えていましたが、これが修正されたようです。あなたのpython 3.5を使用している場合:

@client.async_event 
def on_message(message): 

は次のように変更します。

@client.event 
async def on_message(message): 

yield fromawaitに変更する必要があります。あなたがPython 3.5を使用していない場合、私はそれにアップグレードすることをお勧めします。うまくいけば、これは動作するはずです。

0

私は、関数の一部を非同期にし、send_messageをコルーチンにすることによってスクリプトを機能させました。もちろん、私はPython 3.5を使用しています。もしあなたがPython 3.4を使用しているなら、少し違うことをしなければならないかもしれません。

私はは、あなたのプログラムのどれもあなたのボットがフリーズすることがあります(のawaitを使用していない)様々な機能のために、ブロッキングなかったので、あなたがメッセージだ理由はして送信されていなかったこと。を考えますdiscord.pyのドキュメントの"What is a coroutine?"セクションで詳細を読むことができます。

client = discord.Client() 

@client.async_event 
async def on_message(message): 
    author = message.author 
    if message.content.startswith('!test'): 
     print('on_message !test') 
     await test(author, message) 
    if message.content.startswith('!quit'): 
     print('on_message !quit') 
     quit(author, message) 
async def test(author, message): 
    print('in test function') 
    await client.send_message(message.channel, 'Hi %s, i heard you.' % author) 

def quit(author, message): 
    sys.exit() 
関連する問題