You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py:为随机生成的每个Embed配置专属图片的问题

解决Discord机器人随机Embed绑定专属图片的问题

核心思路

将每个Embed的标题与对应专属图片URL绑定,可通过两种方式实现:要么预先创建好带图片的Embed实例,要么用数据结构存储配置后动态生成Embed,两种方案都能解决你的问题。

方案1:预先创建带图片的Embed列表

直接在定义items时给每个Embed调用set_image()方法绑定专属图片,原代码的随机逻辑基本无需改动:

import random
import discord
from discord.ext import commands

view = None   
randomitem = None
@bot.command()
async def testing(ctx):
    global randomitem
    # 预先创建带专属图片的Embed实例
    items = [
        discord.Embed(title="test1").set_image(url="https://example.com/image1.png"),
        discord.Embed(title="test2").set_image(url="https://example.com/image2.png"),
        discord.Embed(title="test3").set_image(url="https://example.com/image3.png"),
        discord.Embed(title="test4").set_image(url="https://example.com/image4.png"),
    ]
    
    randomitem = random.choice(items)
    global view
    view = discord.ui.View()
    button = discord.ui.Button(label="!test", custom_id="!test", style=discord.ButtonStyle.blurple)
    view.add_item(button)
    msg = await ctx.reply("Drawing a card...", embed=randomitem, view=view)
    
    async def button_callback(interaction):
        global randomitem
        try:
            await interaction.response.defer()
        except:
            pass
        next_embed = random.choice(items)
        while next_embed == randomitem:
            next_embed = random.choice(items)
        randomitem = next_embed
        await msg.reply("Drawing a card...", embed=next_embed, view=view)
    button.callback = button_callback

方案2:用配置结构存储,动态生成Embed(更易维护)

如果后续需要给Embed添加更多属性(比如描述、颜色),这种方式扩展性更强:

import random
import discord
from discord.ext import commands

view = None   
randomitem = None
@bot.command()
async def testing(ctx):
    global randomitem
    # 用字典存储每个Embed的配置项:标题+专属图片URL
    embed_configs = [
        {"title": "test1", "image_url": "https://example.com/image1.png"},
        {"title": "test2", "image_url": "https://example.com/image2.png"},
        {"title": "test3", "image_url": "https://example.com/image3.png"},
        {"title": "test4", "image_url": "https://example.com/image4.png"},
    ]
    
    # 随机选择配置并生成带图片的Embed
    selected_config = random.choice(embed_configs)
    randomitem = discord.Embed(title=selected_config["title"]).set_image(url=selected_config["image_url"])
    
    global view
    view = discord.ui.View()
    button = discord.ui.Button(label="!test", custom_id="!test", style=discord.ButtonStyle.blurple)
    view.add_item(button)
    msg = await ctx.reply("Drawing a card...", embed=randomitem, view=view)
    
    async def button_callback(interaction):
        global randomitem
        try:
            await interaction.response.defer()
        except:
            pass
        # 随机选择与当前不同的配置
        next_config = random.choice(embed_configs)
        while next_config["title"] == randomitem.title:
            next_config = random.choice(embed_configs)
        # 生成新的带图片Embed
        randomitem = discord.Embed(title=next_config["title"]).set_image(url=next_config["image_url"])
        await msg.reply("Drawing a card...", embed=randomitem, view=view)
    button.callback = button_callback

注意事项

  • 图片URL必须是Discord可直接抓取的公开链接,不能用本地文件或需要登录权限的链接
  • 若要设置Embed缩略图,替换为set_thumbnail()方法即可,用法与set_image()一致

内容的提问来源于stack exchange,提问作者Anonymouspls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:30