前提・実現したいこと
下記のコードは_cntと入力するとDMとコマンドを送ったチャンネルにenbedが表示され、DMの方ではmemberを追加させるbuttonを、textchannelの方では誰が追加されたか表示させるようにする処理を目標にやっています。
①addを押して、Member Listを押し、画像をaからbに変えようとすると、
「Object of type File is not JSON serializable」というエラーがでる。
②DMに送ったほうのembedを更新するには......
①,②の両方をできるようにしたいです。
もし可能なら教えていただきたいです。
Object of type File is not JSON serializable
該当のソースコード
python
1import discord 2from discord.ext import tasks,commands 3from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType 4 5intents = discord.Intents.default() 6intents.members = True 7client = commands.Bot(command_prefix = '_',intents=intents) 8 9ddb = DiscordComponents(client) 10 11a=[Button(style=ButtonStyle.green, label="Member List")] 12b=[Button(style=ButtonStyle.grey, label="add")] 13Userid = [] 14@client.command() 15@commands.has_permissions(administrator=True) 16async def cnt(ctx): 17 NUMBER = 0 18 embed = discord.Embed(title="add",description='`None`',color=0xff0000) 19 User = client.get_user(ctx.author.id) 20 dm = await User.create_dm() 21 m = await dm.send(embed=embed,components=b, type=7) 22 now = datetime.datetime.now() 23 delta = datetime.datetime.now()+ datetime.timedelta(minutes=5) 24 25 embed = discord.Embed(title="Member List",description='`None`',color=0xff0000) 26 fname= "a.png" 27 file = discord.File(fp="a.png",filename=fname,spoiler=False) 28 embed.set_image(url=f"attachment://{fname}") 29 m = await ctx.send(file=file,embed=embed,components=a, type=7) 30 while m.created_at < delta: 31 res = await client.wait_for("button_click") 32 if res.component.label == "add": 33 Userid.append(ctx.author.id) 34 await res.respond(content="入ってます。") 35 36 embed = discord.Embed(title= 'Member List',description='`' + str(Userid[NUMBER]) + '`',color=0xff0000) 37 fname= "b.png" 38 file = discord.File(fp="b.png",filename=fname,spoiler=False) 39 embed.set_image(url=f"attachment://{fname}") 40 await res.respond(file=file,embed=embed,components=a,type=7) 41 42 embed = discord.Embed(title= 'add',description='`追加しました。`',color=0xff0000) 43 await res.respond(embed=embed,components=b,type=7) 44 45client.run('Yout Token')