出于某种原因,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")
答案 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
被发送到Channel
(abc.Messageable
的子类)和不是 Client
本身。
从这个意义上说,有一个相当大的迁移列表;你可以全部找到here
在 Models are Stateful
部分下。