Pour une raison quelconque, send_message ne fonctionne pas correctement sur mon bot Discord et je ne parviens pas à le résoudre.
import asyncio
import discord
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)
async def test(author, message):
print('in test function')
await client.send_message(message.channel, 'Hi %s, i heard you.' % author)
client.run("key")
on_message !test
in test function
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\indit\AppData\Roaming\Python\Python36\site-packages\discord\client.py", line 223, in _run_event
yield from coro(*args, **kwargs)
File "bot.py", line 15, in on_message
await test(author, message)
File "bot.py", line 21, in test
await client.send_message(message.channel, 'Hi %s, i heard you.' % author)
AttributeError: 'Client' object has no attribute 'send_message'
Vous utilisez probablement la version de réécriture de discord.py, car le discord.Client
l'objet n'a pas de send_message
méthode.
Pour résoudre votre problème, vous pouvez simplement l'avoir comme:
async def test(author, message):
await message.channel.send('I heard you! {0.name}'.format(author))
mais pour ce que je vous vois faire, je recommande d'utiliser extension de commandes
Cela rend la création d'un bot et de commandes pour le bot beaucoup plus simple, par exemple voici un code qui fait exactement la même chose que le vôtre
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
@bot.command()
async def test(ctx):
await ctx.send('I heard you! {0}'.format(ctx.author))
bot.run('token')