इसलिए, मैं एक फैंसी प्रतिक्रिया भूमिका सौदा करने की कोशिश कर रहा हूं और मैं इसके लिए नई बटन सुविधा का उपयोग करना चाहता हूं। मुझे एक बुनियादी बटन काम कर रहा है। मेरा कोड:

import discord
from discord.ext import commands
from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType
Client = commands.Bot(command_prefix="?", help_command=None)

@Client.event
async def on_ready():
    DiscordComponents(Client, change_discord_methods=True)
    print(f"{Client.user} ready!")

@Client.command()
async def button(context, *, message):
    await context.send(type=InteractionType.ChannelMessageWithSource, content=message, components=[Button(style=ButtonStyle.blue, label="Default Button", custom_id="button")])

Client.run("token")

बटन दबाए जाने पर मैं भूमिका कैसे जोड़ सकता हूं?

https://i.stack.imgur.com/NZAEm.png

0
rlp81 14 अगस्त 2021, 20:16

2 जवाब

सबसे बढ़िया उत्तर

इसमें कुछ समय लगा लेकिन मैंने आखिरकार कोड बना दिया, जो कोई भी इसमें से प्रतिक्रिया भूमिका बनाना चाहता है, आप यहां जाएं।

import json
import discord
from discord.ext import commands
from discord_components import DiscordComponents, Button
import random

Client = commands.Bot(command_prefix="?", help_command=None)

@Client.command()
async def Reaction_Role(ctx, role: discord.Role, emoji, *, message):
    ID = random.randint(111,999)
    await ctx.send(f"{message}", components=[Button(label=f"{emoji} {role}", custom_id=f"{ID}")])
    with open("reaction.json", "r") as f:
        react = json.load(f)
    rr = {
        "roleid": role.id
    }
    react[ID] = {}
    react[ID] = rr
    with open("reaction.json", "w") as f:
        json.dump(react,f,indent=4)

@Client.event
async def on_button_click(interaction):
    ID = interaction.component.custom_id
    with open("reaction.json", "r") as f:
        react = json.load(f)
    rol = react[str(ID)]["roleid"]
    role = discord.utils.get(Client.get_guild(interaction.guild.id).roles, id=rol)
    member = await interaction.guild.fetch_member(interaction.user.id)
    if role in member.roles:
        await member.remove_roles(role)
        await interaction.respond(content=f"Removed role {role}")
    if not role in member.roles:
        await member.add_roles(role)
        await interaction.respond(content=f"Added role {role}")

@Client.event
async def on_ready():
    DiscordComponents(Client, change_discord_methods=True)
    print(f"{Client.user} ready!")

Client.run("token")
0
rlp81 14 अगस्त 2021, 20:22

आपको इसे स्वचालित करने के लिए भूमिका भाग को थोड़ा सा मोड़ने की आवश्यकता हो सकती है लेकिन यहाँ।

@client.command()
async def button(ctx):
    await ctx.send("Click this for role!", components=[Button(label="button")])

    interaction = await client.wait_for("button_click")
    role = discord.utils.get(ctx.guild.roles, name="Role name")
    user = ctx.message.author
    await user.add_roles(role)
    await interaction.respond(content='Done!')
0
Kroseas 14 अगस्त 2021, 20:08