2016-10-10 5 views
0

나는 discord.py를 사용하여 chat-bot을 만듭니다. 지금은 테스트 일 뿐이며 모든 코드는 1 파일에 있습니다.(discord.py) Client.send_message()가 메시지를 보내지 않습니다.

봇은 서버에 연결하고 느낌표 '!'로 시작하는 메시지를 수신합니다.

명령에 따라 두 가지 기능 중 하나를 호출합니다. 지금까지는 봇이 의도 한대로 작동합니다.

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

나는이 정확한 문제가 있었는데,이 문제를 해결 한 것처럼 보였다. 당신은 파이썬 3.5을 사용하는 경우 :

@client.async_event 
def on_message(message): 

이 변경되어야합니다

@client.event 
async def on_message(message): 

yield fromawait로 변경해야합니다. 파이썬 3.5를 사용하지 않는다면, 파이썬 3.5로 업그레이드하는 것이 좋습니다. 바라기를 이것은 잘 움직여야한다.

0

나는 함수의 일부를 비동기로 만들고 send_message를 공동 루틴으로 사용하여 스크립트를 만들었습니다. 물론 파이썬 3.5를 사용하고 있습니다. 파이썬 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() 
관련 문제