带有discord.py的set_author引发NameError

时间:2018-08-19 15:49:20

标签: python discord discord.py

所以我正在用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语句的其余部分

3 个答案:

答案 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)

Output

检查上面的图像,下面的命令给了我上面的输出。不确定这是否是您要找的。一定要告诉我!

答案 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)

祝你好运!