'How to have separate interactions for separate buttons | discord.py pycord

How can I have different interactions response on different buttons in pycord/discord.py.

Code:

@client.command()
async def test(ctx: commands.Context):
    button = Button(label="Click Below", custom_id="freefire",style=discord.ButtonStyle.green, emoji="<:freefire:944183849779335198>")
    button1 = Button(label="Click Below", custom_id="bgmi",style=discord.ButtonStyle.green, emoji="<:bgmi:944184219528208384>")

    async def free_fire(interaction: discord.Interaction):
        role = ctx.guild.get_role(944152201784336414)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles and interaction.custom_id== "freefire":
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
        

    button.callback = free_fire


    async def bgmi(interaction: discord.Interaction):
        role = ctx.guild.get_role(944152314200088667)
        member = ctx.guild.get_member(interaction.user.id)
        if role in interaction.user.roles and interaction.custom_id== "bgmi":
            await interaction.user.remove_roles(role)
            await interaction.response.send_message(f"{role} role has been taken from you", ephemeral=True)
        else:
            await member.add_roles(role)
            await interaction.response.send_message(f"{role} role has been given to you", ephemeral=True)
        

    button.callback = bgmi

It simply gives the role of last button when I click the first button and other buttons do not respond at all there is no error in console or anywhere.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source