import discord
from discord.ext import commands
from discord.ui import View, Button
import requests
# Ustawienia bota
intents = discord.Intents.default()
intents.messages = True
intents.message_content = True
intents.guilds = True
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
# Zmienne konfiguracyjne
DOWOD_CHANNEL_ID_PISANIE = 123456789012345678 # ID kanału, gdzie można składać dowody
REQUEST_CHANNEL_ID = 123456789012345678 # ID kanału, gdzie dowody są wyświetlane
FIRST_ACCEPT_ROLE = 987654321098765432 # ID roli nadawanej po pierwszym zaakceptowanym dowodzie
SECOND_ACCEPT_ROLE = 876543210987654321 # ID roli nadawanej po drugim zaakceptowanym dowodzie
PISANIE_DOWODU_ROLES = [123456789012345678] # ID ról, które mogą składać dowody
# Słownik przechowujący informacje o dowodach
user_proofs = {}
def save_all_data():
pass
def has_accept_role(user):
return True
@bot.command
async def wdowod(ctx):
# Sprawdzenia czy komenda jest wywoływana w odpowiednim kanale
if ctx.channel.id != DOWOD_CHANNEL_ID_PISANIE:
await ctx.send("Ta komenda jest dostępna tylko na określonym kanale.")
return
if not any(role.id in PISANIE_DOWODU_ROLES for role in ctx.author.roles):
await ctx.send("Nie masz odpowiednich uprawnień do używania tej komendy.")
return
user_id = str(ctx.author.id)
# sprawdza czy chłop ma dowód
if user_id in user_proofs:
await ctx.send("Już złożyłeś dowód. Nie możesz składać więcej dowodów.")
return
def check(m):
return m.author == ctx.author and isinstance(m.channel, discord.DMChannel)
async def ask_question(prompt):
await ctx.author.send(prompt)
odpowiedz = await bot.wait_for("message", check=check)
return odpowiedz.content
try:
postac = int(await ask_question("Która postać (narazie tylko 1)?"))
if postac not in [1]:
await ctx.author.send("Proszę podać poprawną postać (1).")
return
except ValueError:
await ctx.author.send("Proszę podać numer postaci (1).")
return
imieNazwisko = await ask_question("Imię i nazwisko:")
obywatelstwo = await ask_question("Obywatelstwo:")
plec = await ask_question("Płeć:")
nickRoblox = await ask_question("Nick Roblox:")
historiaPostaci = await ask_question("Krótka historia postaci:")
nickDiscord = await ask_question("Nick Discord:")
dowod_info = {
"postac": postac,
"imieNazwisko": imieNazwisko,
"obywatelstwo": obywatelstwo,
"plec": plec,
"nickRoblox": nickRoblox,
"nickDiscord": nickDiscord,
"historiaPostaci": historiaPostaci
}
# Pobranie danych z Roblox
try:
roblox_user_response = requests.post(
"https://users.roblox.com/v1/usernames/users",
json={"usernames": [nickRoblox], "excludeBannedUsers": True}
)
roblox_data = roblox_user_response.json()
if roblox_data and 'data' in roblox_data and roblox_data['data']:
roblox_user_id = roblox_data['data'][0]['id']
else:
await ctx.author.send(f"Nie znaleziono użytkownika Roblox o podanym nicku: {nickRoblox}")
return
except Exception as e:
await ctx.author.send("Wystąpił problem podczas pobierania danych użytkownika Roblox.")
print(f"Error fetching Roblox user data: {e}")
return
try:
roblox_avatar_response = requests.get(f"https://thumbnails.roblox.com/v1/users/avatar?userIds={roblox_user_id}&size=720x720&format=Png")
avatar_data = roblox_avatar_response.json()
if avatar_data and 'data' in avatar_data and avatar_data['data']:
roblox_avatar_url = avatar_data['data'][0]['imageUrl']
else:
await ctx.author.send("Nie udało się pobrać awatara użytkownika Roblox.")
return
except Exception as e:
await ctx.author.send("Wystąpił problem podczas pobierania awatara użytkownika Roblox.")
print(f"Error fetching Roblox avatar: {e}")
return
# Tworzenie embedu
embed = discord.Embed(title="CA ID Card", color=0xFFFF00)
embed.add_field(name="👥|Postać", value=postac, inline=False)
embed.add_field(name="📧|Imie i Nazwisko", value=imieNazwisko, inline=False)
embed.add_field(name="🌎|Obywatelstwo", value=obywatelstwo, inline=False)
embed.add_field(name="💞|Płeć", value=plec, inline=False)
embed.add_field(name="🔑|Nick Roblox", value=nickRoblox, inline=False)
embed.add_field(name="🪁|Nick Discord", value=nickDiscord, inline=False)
embed.add_field(name="📋|Historia Postać", value=historiaPostaci, inline=False)
embed.set_image(url=roblox_avatar_url)
# Klasa przycisków
class DowodView(View):
def __init__(self):
super().__init__(timeout=None)
@discord.ui.button(label="Akceptuję", style=discord.ButtonStyle.green)
async def accept_button(self, interaction: discord.Interaction, button: Button):
if not has_accept_role(interaction.user):
await interaction.response.send_message("Nie masz odpowiednich ról do akceptowania dowodu.", ephemeral=True)
return
# Zapisanie dowodu i nadanie ról
user_proofs[user_id] = {"dowod_info": dowod_info, "dowod_count": 0}
save_all_data()
user_proofs[user_id]['dowod_count'] += 1
# Nadanie odpowiedniej roli
if user_proofs[user_id]['dowod_count'] == 1:
role = discord.utils.get(ctx.guild.roles, id=FIRST_ACCEPT_ROLE)
if role:
await ctx.author.add_roles(role)
await ctx.author.send(f"Gratulacje! Otrzymałeś rolę: {role.name}")
elif user_proofs[user_id]['dowod_count'] == 2:
role = discord.utils.get(ctx.guild.roles, id=SECOND_ACCEPT_ROLE)
if role:
await ctx.author.add_roles(role)
await ctx.author.send(f"Gratulacje! Otrzymałeś rolę: {role.name}")
await interaction.response.send_message("Dowód został zaakceptowany.", ephemeral=True)
self.stop()
@discord.ui.button(label="Odrzucam", style=discord.ButtonStyle.red)
async def reject_button(self, interaction: discord.Interaction, button: Button):
if not has_accept_role(interaction.user):
await interaction.response.send_message("Nie masz odpowiednich ról do odrzucania dowodu.", ephemeral=True)
return
await interaction.response.send_message("Dowód został odrzucony.", ephemeral=True)
self.stop()
# Wysyłanie embedu z przyciskami
dowod_channel = bot.get_channel(REQUEST_CHANNEL_ID)
view = DowodView()
await dowod_channel.send(embed=embed, view=view)
@bot.command()
async def udowod(ctx):
if not is_allowed_channel(ctx, DOWOD_CHANNEL_ID):
await ctx.send("Ta komenda jest dostępna tylko na określonym kanale.")
return
if not any(role.id in PISANIE_DOWODU_ROLES for role in ctx.author.roles):
await ctx.send("Nie masz odpowiednich uprawnień do używania tej komendy.")
return
user_id = str(ctx.author.id)
if user_id not in user_proofs:
await ctx.send("Nie masz żadnych zapisanych dowodów do usunięcia.")
return
del user_proofs[user_id]
save_all_data()
await ctx.send(f"Dowód użytkownika {ctx.author.mention} został usunięty.")
@bot.command()
async def pdowod(ctx, postac: int):
if not is_allowed_channel(ctx, DOWOD_CHANNEL_ID):
await ctx.send("Ta komenda jest dostępna tylko na określonym kanale.")
return
if not any(role.id in PISANIE_DOWODU_ROLES for role in ctx.author.roles):
await ctx.send("Nie masz odpowiednich uprawnień do używania tej komendy.")
return
user_id = str(ctx.author.id)
if user_id not in user_proofs or postac not in user_proofs[user_id]:
await ctx.send(f"Nie znaleziono dowodu dla postaci {postac}.")
return
dowod_info = user_proofs[user_id][postac]
nickRoblox = dowod_info["nickRoblox"]
embed = discord.Embed(title="CA ID Card", color=0xFFFF00)
embed.add_field(name="👨💼 Postać", value=postac, inline=False)
embed.add_field(name="⏰ Imie i Nazwisko", value=dowod_info["imieNazwisko"], inline=False)
embed.add_field(name="⚠️ Obywatelstwo", value=dowod_info["obywatelstwo"], inline=False)
embed.add_field(name="⚠️ Pleć", value=dowod_info["plec"], inline=False)
embed.add_field(name="🔑 Nick Roblox", value=dowod_info["nickRoblox"], inline=False)
embed.add_field(name="👨💼 Nick Discord", value=dowod_info["nickDiscord"], inline=False)
embed.add_field(name="⏰ Historia Postać", value=dowod_info["historiaPostaci"], inline=False)
await ctx.send(embed=embed)
bot.run("TOKEN")
Pełny kod jest dostępny w repozytorium projektu lub na żądanie!