Untitled

mail@pastecode.io avatar
unknown
python
a year ago
6.7 kB
3
Indexable
Never
import disnake
import asyncio
import discord
from disnake.ext import commands
from disnake import Button, ButtonStyle


bot = commands.Bot(command_prefix="/", intents=disnake.Intents.all())

def has_specific_role():
    async def predicate(ctx):
        required_role = disnake.utils.get(ctx.guild.roles, name="DS Manager")  # Замените на имя вашей роли
        if required_role in ctx.author.roles:
            return True
        else:
            await ctx.send("You don't have permission to run this command.", ephemeral=True)
            return False
    return commands.check(predicate)

# Слэш-команда /помощь

@bot.slash_command(
    name="помощь",  # или "help", как вам удобнее
    description="показать список доступных команд и их примеры использования",
)
async def help_command(ctx):
    help_embed = disnake.Embed(
        title="Помощь",
        description="Вот список доступных команд и примеры их использования:",
        color=disnake.Color.green()
    )

    help_embed.add_field(
        name="/айди",
        value="Получение ID пользователей, имеющих указанную роль.\nПример: `/айди имя_роли:DS manager`",
        inline=False
    )

    help_embed.add_field(
        name="/лс_1/2/3",
        value="Отправка сообщения в ЛС пользователям с указанными ID из файла.\nПример: `/лс_1/2/3 имя_файла:ID.txt текст:капт`",
        inline=False
    )

    help_embed.add_field(
        name="/реакции",
        value="Получение ID пользователей, которые оставили определенную реакциию на сообщение.\nПример: `/реакции сообщение:ID_сообщения реакция:🍪`",
        inline=False
    )

    help_embed.add_field(
        name="/список_войс",
        value="Получение ID пользователей, которые находятся в голосовом канале.\nПример: `/список_войс канал: #🐺〡Волчья нора #1`",
        inline=False
    )

    await ctx.send(embed=help_embed, ephemeral=True)  # ephemeral=True делает сообщение видимым только для пользователя

# CREATING LIST

user_data = {}

@bot.slash_command(
    name="список",
    description="Создание списка пользователей.",
    options=[
        disnake.Option("type", "Тип списка (MCL или FW)", type=disnake.OptionType.string, choices=["MCL", "FW"], required=True),
        disnake.Option("start_time", "Время начала", type=disnake.OptionType.string, required=True),
        disnake.Option("color", "Цвет", type=disnake.OptionType.string, required=True)
    ]
)
@has_specific_role()

async def список(ctx, type: str, start_time: str, color: str):

    # Преобразуем переменную time в целое число
    start_time = int(start_time)
    voice_time = start_time - 1

    # Create message for list
    message_content = (
        f"**{type} Время начала {start_time}:00 / Voice {voice_time}:00**\n"
        f"Цвет - **{color}**\n\n"
        "**MAIN**\n\n"
        "**RESERVE**\n\n"
    )

    # Create buttons
    message = await ctx.send(message_content, 
    components = [
        disnake.ui.Button(label="➕", style=disnake.ButtonStyle.grey), 
        disnake.ui.Button(label="🚑", style=disnake.ButtonStyle.green), 
        disnake.ui.Button(label="🔁", style=disnake.ButtonStyle.blurple), 
        disnake.ui.Button(label="❌", style=disnake.ButtonStyle.red), 
        ])
    
# Create buttons
    message = await ctx.send(message_content, 
    components = [
        disnake.ui.Button(label="➕", style=disnake.ButtonStyle.grey), 
        disnake.ui.Button(label="🚑", style=disnake.ButtonStyle.green), 
        disnake.ui.Button(label="🔁", style=disnake.ButtonStyle.blurple), 
        disnake.ui.Button(label="❌", style=disnake.ButtonStyle.red), 
        ])
    
    # Read and create file, which have: voice_time, start_time and color save in data

    with open('data.txt', 'r') as data_file:
        data = data_file.readlines()

    # Write file
    with open('data.txt', 'w') as data_file:
        data_file.writelines([type, start_time, color])

    # Get data from file
    with open('data.txt', 'r') as data_file:
        data = data_file.readlines()

    voice_time = data[0]
    start_time = data[1]
    color = data[2]

def save_data(data, file_path):
    with open(file_path, 'w') as f:
        f.writelines(data)


    
@bot.listen("on_button_click")
async def help_listener(inter: disnake.MessageInteraction):

    # Read and create file, which have: voice_time, start_time and color save in data

    with open('data.txt', 'r') as data_file:
        data = data_file.readlines()

    # Get data from file
    with open('data.txt', 'r') as data_file:
        data = data_file.readlines()

    voice_time = data[0]
    start_time = data[1]
    color = data[2]

    if data is None:
        await inter.response.send_message("Data not found. Please create a list first.", ephemeral=True)
        return

    voice_time, start_time, color = data

    if inter.component.custom_id not in ["➕", "🚑", "🔁", "❌"]:
        # We filter out any other button presses except
        # the components we wish to process.
        return
    
    if inter.component.custom_id == "➕":
        # Изменяем message_content для "➕"
        message_content = (
            f"**{type} Время начала {start_time}:00 / Voice {voice_time}:00**\n"
            f"Цвет - **{color}**\n\n"
            f"**MAIN**\n"
            f"**НОВЫЙ ЧЕЛ**\n\n"
            f"**RESERVE**\n"
        )
        await inter.response.send_message("You succesfly added in list!", ephemeral=True)
#        await inter.edit_original_message(content=message_content)

# Start

@bot.event
async def on_ready():
    print(f"{bot.user} online and working!")

    game = disnake.Game("Eating cookies 🍪 and /помощь")
    await bot.change_presence(status=disnake.Status.online, activity=game)

token = open('DISCORD_BOT_SECRET.env', 'r').readline()

bot.run(token)