This commit is contained in:
2026-06-01 00:05:40 +01:00
commit 1b79da1204
4 changed files with 113 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
.env
.venv
__pycache__
+20
View File
@@ -0,0 +1,20 @@
import discord, os, views
from dotenv import load_dotenv
load_dotenv() # load all the variables from the env file
bot = discord.Bot()
@bot.event
async def on_ready():
bot.add_view(views.RoleSelectors())
print(f"{bot.user} is ready and online!")
@bot.slash_command(name="role_selector", description="create role selector")
async def species(ctx: discord.ApplicationContext):
await ctx.respond("Role selector menu", view=views.RoleSelectors())
bot.run(os.getenv('TOKEN')) # run the bot with the token
+31
View File
@@ -0,0 +1,31 @@
import discord
async def PlatformCallback(interaction: discord.Interaction, values: list):
for platform in ["PC", "Xbox", "Playstation", "Nintendo", "VR"]:
if not discord.utils.get(interaction.guild.roles, name=platform):
await interaction.guild.create_role(name=platform, color=discord.Color.random())
if platform not in values:
await interaction.user.remove_roles(discord.utils.get(interaction.guild.roles, name=platform))
for platform in values:
await interaction.user.add_roles(discord.utils.get(interaction.guild.roles, name=platform))
embed = discord.Embed(title="Platform Roles Updated")
embed.add_field(name="Selected Platforms", value=", ".join(values))
await interaction.response.send_message(embed=embed, ephemeral=True)
async def SpeciesCallback(interaction: discord.Interaction, value: str):
species_list = [species.strip().capitalize() for species in value.split(",")]
for species in species_list:
if not discord.utils.get(interaction.guild.roles, name=species):
await interaction.guild.create_role(name=species, color=discord.Color.random())
await interaction.user.add_roles(discord.utils.get(interaction.guild.roles, name=species))
embed = discord.Embed(title="Species Roles Updated")
embed.add_field(name="Selected Species", value=", ".join(species_list))
await interaction.response.send_message(embed=embed, ephemeral=True)
+59
View File
@@ -0,0 +1,59 @@
import discord, roles
# Platform Role Select View
class Platforms(discord.ui.View):
@discord.ui.select( # the decorator that lets you specify the properties of the select menu
placeholder = "Select Platforms", # the placeholder text that will be displayed if nothing is selected
min_values = 1, # the minimum number of values that must be selected by the users
max_values = 5, # the maximum number of values that can be selected by the users
options = [ # the list of options from which users can choose, a required field
discord.SelectOption(
label="PC",
description="pcmr"
),
discord.SelectOption(
label="Xbox",
description="microslop"
),
discord.SelectOption(
label="Playstation",
description="idk what to put here"
),
discord.SelectOption(
label="Nintendo",
description="who actually uses this"
),
discord.SelectOption(
label="VR",
description="vrchat"
)
]
)
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
await roles.PlatformCallback(interaction, select.values)
# Species Role View
class Species(discord.ui.Modal):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.add_item(discord.ui.InputText(label="Enter Species (comma seperated for multiple)"))
async def callback(self, interaction: discord.Interaction):
await roles.SpeciesCallback(interaction, self.children[0].value)
# Role selectors view
class RoleSelectors(discord.ui.View):
def __init__(self):
super().__init__(timeout=None)
@discord.ui.button(label="Species", custom_id="species", style=discord.ButtonStyle.primary)
async def species_button_callback(self, button, interaction):
await interaction.response.send_modal(Species(title="Choose your species"))
@discord.ui.button(label="Platform", custom_id="platform", style=discord.ButtonStyle.primary)
async def platform_button_callback(self, button, interaction):
await interaction.response.send_message("Choose your platforms", view=Platforms(), ephemeral=True)