2016-10-10 154 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函數時,程序終止。當測試函數被調用時,它什麼都不做。它甚至不打印字符串。

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 from應改爲await。如果你不使用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()