AttributeError:'客户'对象没有属性' send_message' (Discord Bot)

时间:2018-01-05 15:43:58

标签: python python-3.x discord discord.py

出于某种原因,send_message在我的Discord机器人上运行不正常,但无论如何都找不到它。

<script>

  Dropzone.options.dropzone = {
        acceptedFiles:'image/*'       
    };


</script>  
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")

3 个答案:

答案 0 :(得分:6)

您可能正在运行discord.py的重写版本,因为discord.Client对象没有send_message方法。

要解决您的问题,您可以将其设为:

async def test(author, message):
    await message.channel.send('I heard you! {0.name}'.format(author))

但是对于我看到你做的事情,我推荐使用commands extension

这使得为机器人创建机器人和命令变得更加简单,例如,这里的代码与您的代码完全相同

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

答案 1 :(得分:0)

我认为 discord.py 不能再用于 send_message() 函数了。但这并不意味着我们不能发送消息。确实存在另一种向频道发送消息的方式。

您可以使用:

await message.channel.send("")

为了这个目的。

现在让我们将其应用到您的代码中。

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 message.channel.send(F'Hi {author}, I heard you.')

client.run("key")

现在这将解决您的问题,您将能够使用机器人轻松发送消息。

谢谢! :D

答案 2 :(得分:0)

根据 discord.py 文档,迁移到 v1.0 给 API 带来了许多重大变化,包括许多功能被discord.Client 移出并放入他们各自的模型

例如在您的具体情况下: Client.send_message(abc.Messageable) --> abc.Messageable.send()

因此您的代码将从此重新设计:

await client.send_message(message.channel, 'I heard you! {0}'.format(message.author))

为此:

await message.channel.send('I heard you! {0}'.format(message.author))

这使得代码在描述实际不和谐实体时更加一致和准确,即不和谐Message被发送到Channelabc.Messageable的子类)和不是 Client 本身。

从这个意义上说,有一个相当大的迁移列表;你可以全部找到hereModels are Stateful 部分下。