#python #python-3.x
#python #python-3.x
Вопрос:
Я использую discord.py создать чат-бота. На данный момент это всего лишь тест, и весь код находится в 1 файле.
Бот подключается к серверу и прослушивает сообщения, начинающиеся с восклицательного знака «!».
В зависимости от команды затем вызывается одна из 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)
И вот тут это становится странным. При вызове завершающей функции программа завершается. Когда вызывается тестовая функция, она ничего не делает. Он даже не печатает строку.
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, я предлагаю перейти на него. Надеюсь, это должно сработать.
Комментарии:
1. OMG всего наилучшего вам. Я не разбираюсь в python, но я пытался использовать более старый бот github, написанный ранее discord.py предполагаемая переписка. Это исправило мои ошибки командной строки и позволило запустить бота. Еще раз большое вам спасибо!!!
Ответ №2:
Я заставил ваш скрипт функционировать, сделав некоторые функции асинхронными, а send_message — совместной процедурой. Конечно, я использую python 3.5, поэтому, если вы используете python 3.4, вам, возможно, придется сделать что-то немного другое.
Я думаю, что причина, по которой ваше сообщение не было отправлено, заключалась в том, что ни одна из ваших программ не блокировала различные функции (не используя await), что может привести к зависанию вашего бота. Вы можете прочитать больше об этом в разделе «Что такое сопрограмма?»раздел 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()