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

如何根据选中图片所属数组修改Discord embed的footer实现角色扮演机器人命令

故障原因

  • 调用random.choice([nyan_cat,pikachu])得到的是整个列表对象,不是列表内存储的图片链接字符串,直接将列表传入set_image的url参数会触发类型错误,导致功能失效
  • 后续分支判断中依然把整个列表赋值给了url,没有提取列表内的有效链接值

方案优化建议

给每个角色单独设置图片数组的方案完全可行,不会过于复杂。调整为字典结构存储角色和对应图片数组,可以省略大量重复的if判断,后续新增角色只需要在字典中添加对应条目即可,不需要修改业务逻辑。

修正后可运行代码

import random
import discord
from discord.ext import commands

# 请自行替换为你的机器人命令前缀,确保已开启所需intents权限
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def roleplaying(ctx, user: discord.User):
    # 角色存储结构:key为角色名,value为对应图片链接数组
    role_images = {
        "Nyan Cat": ["https://1.bp.blogspot.com/-XBOvQhJ4e3E/YINVEJxvRyI/AAAAAAAAATo/S-PlEpwNLzs250tmpWEzkmiLt_Fbeu5UACLcBGAsYHQ/s476/Nyan%2Bcat.gif"],
        "Pikachu": ["https://c.tenor.com/-VYWaSmWx2QAAAAC/thunderbolt-pikachu.gif"]
    }
    # 先随机选择角色,再从该角色的图片数组中随机抽取一张图片
    selected_role = random.choice(list(role_images.keys()))
    selected_image = random.choice(role_images[selected_role])

    avc = discord.Embed(
        title="",
        description=f"**{ctx.message.author.name}** 邀请 **{user.name}** 查看图片 ❤️",
        colour=0x0101df
    )
    avc.set_image(url=selected_image)
    avc.set_footer(text=f"角色:{selected_role}")
    await ctx.send(embed=avc)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:30:01