paelelael/PaelSupport
0
1import discord
2from discord.ext import commands
3from discord.ui import Button, View, Select
4import os
5
6ROLE_VERIFIED_ID = 1521553615259439156
7
8# ID Role Sesuai Data Server Anda
9ROLE_COWOK_ID = 1521560704568659998
10ROLE_CEWEK_ID = 1521560803164028958
11ROLE_REMAJA_ID = 1521561488509112431 # <18
12ROLE_DEWASA_ID = 1521561563214119153 # 18+
13
14ROLE_PUBG_ID = 1521561119557157036
15ROLE_VALO_ID = 1521561079371530250
16ROLE_ML_ID = 1521560980276903988
17ROLE_ROBLOX_ID = 1521560918989996235
18ROLE_FF_ID = 1521560774743687239
19
20# ID Peran Member Hijau Anda
21ROLE_AKHIR_MEMBER_ID = 1521561563214119153 # Diperbarui otomatis ke ID Member Hijau Anda
22
23intents = discord.Intents.default()
24intents.members = True
25intents.message_content = True
26
27bot = commands.Bot(command_prefix='!', intents=intents)
28
29async def periksa_dan_buka_server(interaction: discord.Interaction):
30 guild = interaction.guild
31 user = interaction.user
32 role_akhir = guild.get_role(ROLE_AKHIR_MEMBER_ID)
33 if role_akhir is None: return
34
35 punya_verified = guild.get_role(ROLE_VERIFIED_ID) in user.roles
36 punya_gender = (guild.get_role(ROLE_COWOK_ID) in user.roles) or (guild.get_role(ROLE_CEWEK_ID) in user.roles)
37 punya_umur = (guild.get_role(ROLE_REMAJA_ID) in user.roles) or (guild.get_role(ROLE_DEWASA_ID) in user.roles)
38
39 if punya_verified and punya_gender and punya_umur:
40 if role_akhir not in user.roles:
41 await user.add_roles(role_akhir)
42 await interaction.followup.send("๐ Selamat! Kamu telah melengkapi data profil. Seluruh channel Demonology sekarang terbuka!", ephemeral=True)
43
44async def toggle_role(interaction: discord.Interaction, role_id: int, role_name: str):
45 guild = interaction.guild
46 role = guild.get_role(role_id)
47 if role is None: return
48 await interaction.response.defer(ephemeral=True)
49
50 if role in interaction.user.roles:
51 try:
52 await interaction.user.remove_roles(role)
53 await interaction.followup.send(f"Peran **{role_name}** telah dihapus.", ephemeral=True)
54 except discord.Forbidden: pass
55 else:
56 try:
57 await interaction.user.add_roles(role)
58 await interaction.followup.send(f"Kamu sekarang mendapatkan peran **{role_name}**!", ephemeral=True)
59 await periksa_dan_buka_server(interaction)
60 except discord.Forbidden: pass
61
62class VerifyView(View):
63 def __init__(self): super().__init__(timeout=None)
64 @discord.ui.button(label="Verify ๐", style=discord.ButtonStyle.green, custom_id="verify_btn")
65 async def verify_button(self, interaction: discord.Interaction, button: Button):
66 guild = interaction.guild
67 role = guild.get_role(ROLE_VERIFIED_ID)
68 if role in interaction.user.roles:
69 await interaction.response.send_message("Kamu sudah terverifikasi!", ephemeral=True)
70 else:
71 await interaction.response.defer(ephemeral=True)
72 await interaction.user.add_roles(role)
73 await interaction.followup.send("Verifikasi berhasil! Silakan lengkapi Get-Role di bawah.", ephemeral=True)
74 await periksa_dan_buka_server(interaction)
75
76class GenderSelect(Select):
77 def __init__(self):
78 options = [
79 discord.SelectOption(label="Cowok โ๏ธ", description="Pilih jika kamu Cowok", value="cowok"),
80 discord.SelectOption(label="Cewek โ๏ธ", description="Pilih jika kamu Cewek", value="cewek"),
81 ]
82 super().__init__(placeholder="Pilih Gender kamu di sini...", min_values=1, max_values=1, options=options, custom_id="gender_select_v7")
83 async def callback(self, interaction: discord.Interaction):
84 if self.values == "cowok": await toggle_role(interaction, ROLE_COWOK_ID, "Cowok")
85 elif self.values == "cewek": await toggle_role(interaction, ROLE_CEWEK_ID, "Cewek")
86
87class AgeSelect(Select):
88 def __init__(self):
89 options = [
90 discord.SelectOption(label="Remaja (<18)", description="Kategori umur di bawah 18 tahun", value="remaja"),
91 discord.SelectOption(label="Dewasa (18+)", description="Kategori umur 18 tahun ke atas", value="dewasa"),
92 ]
93 super().__init__(placeholder="Pilih Kategori Umur kamu di sini...", min_values=1, max_values=1, options=options, custom_id="age_select_v7")
94 async def callback(self, interaction: discord.Interaction):
95 if self.values == "remaja": await toggle_role(interaction, ROLE_REMAJA_ID, "Remaja (<18)")
96 elif self.values == "dewasa": await toggle_role(interaction, ROLE_DEWASA_ID, "Dewasa (18+)")
97
98class GameSelect(Select):
99 def __init__(self):
100 options = [
101 discord.SelectOption(label="Mobile Legends", description="Main MLBB", emoji="๐ฎ", value="ml"),
102 discord.SelectOption(label="PUBG Mobile", description="Main PUBGM", emoji="๐ซ", value="pubg"),
103 discord.SelectOption(label="Valorant", description="Main Valo", emoji="๐ฏ", value="valo"),
104 discord.SelectOption(label="Roblox", description="Main Roblox", emoji="๐งฑ", value="roblox"),
105 discord.SelectOption(label="Free Fire", description="Main FF", emoji="๐ฅ", value="ff"),
106 ]
107 super().__init__(placeholder="Pilih Game yang kamu mainkan...", min_values=1, max_values=1, options=options, custom_id="game_select_v7")
108 async def callback(self, interaction: discord.Interaction):
109 if self.values == "ml": await toggle_role(interaction, ROLE_ML_ID, "Mobile Legends")
110 elif self.values == "pubg": await toggle_role(interaction, ROLE_PUBG_ID, "PUBG Mobile")
111 elif self.values == "valo": await toggle_role(interaction, ROLE_VALO_ID, "Valorant")
112 elif self.values == "roblox": await toggle_role(interaction, ROLE_ROBLOX_ID, "Roblox")
113 elif self.values == "ff": await toggle_role(interaction, ROLE_FF_ID, "Free Fire")
114
115class GenderView(View):
116 def __init__(self): super().__init__(timeout=None); self.add_item(GenderSelect())
117class AgeView(View):
118 def __init__(self): super().__init__(timeout=None); self.add_item(AgeSelect())
119class GameView(View):
120 def __init__(self): super().__init__(timeout=None); self.add_item(GameSelect())
121
122@bot.event
123async def on_ready():
124 print(f'Pael Bot telah aktif sebagai {bot.user}')
125 bot.add_view(VerifyView())
126 bot.add_view(GenderView())
127 bot.add_view(AgeView())
128 bot.add_view(GameView())
129
130@bot.command()
131@commands.has_permissions(administrator=True)
132async def setup_verify(ctx):
133 embed = discord.Embed(title="Sistem Verifikasi Demonology", description="Klik tombol di bawah untuk verifikasi.", color=discord.Color.red())
134 await ctx.send(embed=embed, view=VerifyView())
135
136@bot.command()
137@commands.has_permissions(administrator=True)
138async def setup_roles(ctx):
139 embed1 = discord.Embed(title="๐ญ KATEGORI GENDER", description="Silakan tentukan identitas gender Anda di bawah ini.", color=discord.Color.purple())
140 await ctx.send(embed=embed1, view=GenderView())
141 embed2 = discord.Embed(title="โณ KATEGORI USIA (UMUR)", description="Silakan tentukan rentang usia Anda saat ini.", color=discord.Color.blue())
142 await ctx.send(embed=embed2, view=AgeView())
143 embed3 = discord.Embed(title="๐ฎ KATEGORI GAME INTEREST", description="Pilih game-game yang Anda mainkan di server Demonology agar mudah menemukan teman bermain!", color=discord.Color.green())
144 await ctx.send(embed=embed3, view=GameView())
145
146# SISTEM DOCKING TOKEN RENDER CLOUD
147TOKEN = os.environ.get("TOKEN")
148if TOKEN:
149 bot.run(TOKEN)
150else:
151 print("Error: Variabel TOKEN tidak ditemukan di Render Environment!")