2016-10-10 3 views
0

Я использую discord.py для создания чата-бота. На данный момент это всего лишь тест, и весь код находится в 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-функции, программа завершается. Когда вызывается тестовая функция, она ничего не делает. Он даже не печатает строку.

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), которые могут привести к бот замерзать. Вы можете узнать больше об этом в разделе "What is a coroutine?" документации discord.py.

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() 
Смежные вопросы