如何根据选中图片所属数组修改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
相关产品推荐
相关产品推荐

