所以我正在用discord.py编写一个机器人,并且在编写嵌入式ping命令时遇到了一些奇怪的错误,但我没有发现在线复制。
我的进口商品:
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import asyncio
import time
这部分有问题:
embed = discord.Embed(colour="0xff9999")
@client.event
async def on_message(message):
channel = message.channel
authorID = message.author.id
if message.content.upper().startswith("T.PING"):
t1 = time.perf_counter()
await client.send_typing(channel)
t2 = time.perf_counter()
embed.add_field(name="Ping", value=":ping_pong: | <@" + authorID + "> Ponged in {}ms!".format(round((t2-t1)*1000)), inline=True)
embed.set_author(name=client.user.name, icon=Embed.Empty, icon_url=client.user.avatar_url)
await client.send_message(channel, embed=embed)
执行t.ping时,我在控制台中收到此NameError:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\Robin Riezebos\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
File "C:\Storage\Desktop\Tapebox.py\Tapebox.py", line 32, in on_message
embed.set_author(name=client.user.name, icon=Embed.Empty, icon_url=client.user.avatar_url)
NameError: name 'Embed' is not defined
我希望能获得一些帮助以及如何解决此问题的示例...
我不是使用@ client.command化妆,而是使用我的命令的client.event化妆,这会改变某些方面,但是embed.set_author应该仍然可以工作...
编辑:添加了导入列表,在@ client.event中添加了if语句的其余部分
答案 0 :(得分:1)
该错误首先是因为 icon
不是关键字。 “嵌入”没有定义,但是,“嵌入”是。使用 icon = Embed.Empty
执行时产生以下错误
name 'Embed' is not defined
但是,当我们使用 icon = embed.Empty
时,它会产生以下错误:set_author() got an unexpected keyword argument 'icon'
表示图标不是关键字参数。
其次,您会遇到 client.avatar_url
的问题,因为您尚未将其声明为字符串,即 str(client.avatar_url)
。 authorID
中的 embed.add_field
将给出 TypeError: can only concatenate str (not “int”) to str
,您必须为其添加 str(authorID)
[因为 authorID
的初始值是一个整数]。在 Python 中,只有类型相同的值才能连接
@client.event()
async def on_message(message):
channel = message.channel
authorID = message.author.id
if message.content.upper().startswith("T.PING"):
t1 = time.perf_counter()
await message.channel.send(channel)
t2 = time.perf_counter()
embed = discord.Embed(color=0xff9999, title="", description="")
embed.add_field(name="Ping", value=":ping_pong: | <@" + str(authorID) + "> Ponged in {}ms!".format(round((t2 - t1)*1000)), inline=True)
embed.set_author(name=client.user.name, icon_url=str(client.user.avatar_url))
await message.channel.send(channel, embed=embed)
检查上面的图像,下面的命令给了我上面的输出。不确定这是否是您要找的。一定要告诉我!
答案 1 :(得分:0)
请注意,在您的on_message
事件上方,您必须使用discord.Embed
来解析Embed
类。您需要使用
Embed
from discord import Embed
或通过Embed
包引用discord
embed.set_author(name=client.user.name, icon=discord.Embed.Empty, icon_url=client.user.avatar_url)
尽管我不确定这是否必要。我认为Empty
是默认值,因此您应该可以完全删除icon
关键字参数。
答案 2 :(得分:0)
主要问题是 Embed 没有定义。您需要添加:
embed = discord.Embed(title=title, description=description, color=color)
把它放在哪里?这里
embed = discord.Embed(title=title, description=description, color=color
embed.add_field(name="Ping", value=":ping_pong: | <@" + authorID + "> Ponged in {}ms!".format(round((t2-t1)*1000)), inline=True)
embed.set_author(name=client.user.name, icon=Embed.Empty, icon_url=client.user.avatar_url)
await client.send_message(channel, embed=embed)
祝你好运!