用 Python 编程 Discord 机器人 - 如何使嵌入具有随机颜色?

Car*_*lis 3 python discord.py

我试图做到这一点,以便每当机器人发送嵌入时,它的颜色都是随机的。这是我的代码:

colors = ['0xFFE4E1', '0x00FF7F', '0xD8BFD8', '0xDC143C', '0xFF4500', '0xDEB887', '0xADFF2F', '0x800000', '0x4682B4', '0x006400', '0x808080', '0xA0522D', '0xF08080', '0xC71585', '0xFFB6C1', '0x00CED1']

@client.command(help='Shares a meme')
async def meme(ctx):
    subreddit = reddit.subreddit("dankmemes")
    all_subs = []
    top = subreddit.top(limit = 75)

    for submission in top:
      all_subs.append(submission)
  
    random_sub = random.choice(all_subs)
    name = random_sub.title
    url = random_sub.url
    em = discord.Embed(title = name, color = random.choice(colors))

    em.set_image(url = url)
    await ctx.send(embed = em)
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:TypeError: Expected discord.Colour, int, or Embed.Empty but received str instead.

不知道如何解决这个问题,有什么建议吗?

Chr*_*ber 5

我想,一定是

colors = [0xFFE4E1, 0x00FF7F, 0xD8BFD8, 0xDC143C, 0xFF4500, 0xDEB887, 0xADFF2F, 0x800000, 0x4682B4, 0x006400, 0x808080, 0xA0522D, 0xF08080, 0xC71585, 0xFFB6C1, 0x00CED1]
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 5

正如您的错误消息所示,该类discord.Embed不接受字符串作为color关键字参数的有效输入。它必须是类的实例:discord.Color

有几种方法可以完成你的任务:

  • 将颜色作为整数传递discord.Colour(value)
  • 将颜色作为单独的 r、g、b 值传递:discord.Colour.from_rgb(r, g, b)
  • 单纯疱疹病毒:discord.Colour.from_hsv(h, s, v)
  • 或者使用内置的随机颜色函数:discord.Colour.random()

直接传递整数discord.Embed而不是创建discord.Color对象也是可以接受的,但是其他选项将不可用。

例子:

em = discord.Embed(title = name, color = discord.Colour.random())