2016-10-10 6 views
0

Ich benutze discord.py, um einen Chat-Bot zu erstellen. Bis jetzt ist es nur ein Test und der gesamte Code ist in einer Datei.(discord.py) Client.send_message() sendet keine Nachricht

Der Bot verbindet sich mit dem Server und wartet auf Nachrichten, die mit einem Ausrufezeichen '!' Beginnen.

Abhängig vom Befehl ruft er dann eine von 2 Funktionen auf. Bis zu diesem Punkt funktioniert der Bot wie beabsichtigt.

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) 

Und das ist, wo es komisch wird. Wenn die Funktion quit aufgerufen wird, wird das Programm beendet. Wenn die Testfunktion aufgerufen wird, geschieht nichts. Es druckt nicht einmal die Zeichenkette.

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() 

Was fehlt mir? Jede Hilfe wird geschätzt.

Antwort

1

Ich hatte dieses genaue Problem, und das schien es zu beheben. Wenn Sie mit Python 3.5:

@client.async_event 
def on_message(message): 

sollte geändert werden:

@client.event 
async def on_message(message): 

und yield from sollte await geändert werden. Wenn Sie Python 3.5 nicht verwenden, empfehle ich, auf das Programm zu aktualisieren. Hoffentlich sollte das funktionieren.

0

Ich habe Ihr Skript zu funktionieren, indem Sie einige der Funktionen asynchron und die Nachricht send_message eine Co-Routine. Natürlich benutze ich Python 3.5. Wenn Sie Python 3.4 verwenden, müssen Sie vielleicht etwas anderes machen.

I denken, dass der Grund, warum Sie Nachricht sind nicht gesendet wurde, weil keiner Ihres Programm wurde für verschiedene Funktionen blockiert (nicht await mit), die der Bot einzufrieren verursachen kann. Sie können mehr darüber im Abschnitt "What is a coroutine?" der Discord.py-Dokumentation lesen.

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() 
Verwandte Themen