web-dev-qa-db-fra.com

AttributeError: l'objet 'Client' n'a pas d'attribut 'send_message' (Discord Bot)

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'
9
cute

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')
10
mental