Канал логирования для сервера ? установлен на лог-авто (1242792292130095) Логи будут отправляться в канал ?учет-авто (1242792263558496)

def init_db():
    conn = sqlite3.connect('cars.db')
    c = conn.cursor()
    c.execute('''
        CREATE TABLE IF NOT EXISTS cars (
            id INTEGER PRIMARY KEY,
            name TEXT NOT NULL,
            status TEXT NOT NULL,
            number INTEGER NOT NULL,
            user TEXT,
            guild_id INTEGER NOT NULL,
            channel_id INTEGER NOT NULL
        )
    ''')
    c.execute('''
        CREATE TABLE IF NOT EXISTS log_channels (
            guild_id INTEGER PRIMARY KEY,
            channel_id INTEGER NOT NULL
        )
    ''')
    conn.commit()
    conn.close()

init_db()

# Функция для получения списка машин для конкретного сервера и канала
def get_cars(guild_id, channel_id):
    conn = sqlite3.connect('cars.db')
    c = conn.cursor()
    c.execute('SELECT * FROM cars WHERE guild_id = ? AND channel_id = ?', (guild_id, channel_id))
    cars = c.fetchall()
    conn.close()
    return cars

# Функция для получения максимального номера машины в канале
def get_max_car_number(guild_id, channel_id):
    conn = sqlite3.connect('cars.db')
    c = conn.cursor()
    c.execute('SELECT MAX(number) FROM cars WHERE guild_id = ? AND channel_id = ?', (guild_id, channel_id))
    max_number = c.fetchone()[0]
    conn.close()
    return max_number if max_number else 0

# Функция для получения канала логирования для конкретного сервера
def get_log_channel(guild_id):
    conn = sqlite3.connect('cars.db')
    c = conn.cursor()
    c.execute('SELECT channel_id FROM log_channels WHERE guild_id = ?', (guild_id,))
    channel_id = c.fetchone()
    conn.close()
    return channel_id[0] if channel_id else None

class TakeCarModal(Modal):
    def __init__(self, user, guild_id, channel_id):
        super().__init__(title="Взять машину")
        self.user = user
        self.guild_id = guild_id
        self.channel_id = channel_id
        self.car_name = TextInput(label="Название или номер машины", style=discord.TextStyle.short)
        self.fuel_input = TextInput(label="Количество бензина (литры)")
        self.add_item(self.car_name)
        self.add_item(self.fuel_input)

    async def on_submit(self, interaction: discord.Interaction):
        fuel = self.fuel_input.value
        car_name = self.car_name.value

        try:
            fuel = float(fuel)
        except ValueError:
            await interaction.response.send_message("Количество бензина должно быть числом.", ephemeral=True)
            return

        conn = sqlite3.connect('cars.db')
        c = conn.cursor()
        c.execute('SELECT * FROM cars WHERE (name = ? OR number = ?) AND guild_id = ? AND channel_id = ?', (car_name, car_name, self.guild_id, self.channel_id))
        car = c.fetchone()

        if car and car[2] == "Свободно":
            c.execute('UPDATE cars SET status = ?, user = ? WHERE id = ?', ("Занято", self.user.mention, car[0]))
            conn.commit()
            await interaction.response.send_message(f"Вы взяли машину {car[1]}", ephemeral=True)
            await update_car_list(interaction.channel)

            # Отправляем сообщение в канал уведомлений
            log_channel_id = get_log_channel(self.guild_id)
            if log_channel_id:
                log_channel = bot.get_channel(log_channel_id)
                if log_channel:
                    print(f"Логи будут отправляться в канал {log_channel.name} ({log_channel.id})")  # Отладочное сообщение
                    embed = discord.Embed(
                        title="Машина взята",
                        description=f"Взял:\n {self.user.mention}\n\nМашина:\n {car[1]}\n\nБензин:\n {fuel} литров",
                        color=discord.Color.green()
                    )
                    await log_channel.send(embed=embed)
                else:
                    print(f"Не удалось найти канал для логирования с ID {log_channel_id}")
            else:
                print(f"Канал логирования для сервера {self.guild_id} не установлен")
        else:
            await interaction.response.send_message(f"Машина {car_name} не найдена или уже занята", ephemeral=True)
        conn.close()

class ReturnCarModal(Modal):
    def __init__(self, user, guild_id, channel_id):
        super().__init__(title="Вернуть машину")
        self.user = user
        self.guild_id = guild_id
        self.channel_id = channel_id
        self.car_name = TextInput(label="Название или номер машины")
        self.fuel_left = TextInput(label="Оставшееся количество бензина (литры)", style=discord.TextStyle.short)
        self.add_item(self.car_name)
        self.add_item(self.fuel_left)

    async def on_submit(self, interaction: discord.Interaction):
        car_name = self.car_name.value
        fuel_left = self.fuel_left.value

        try:
            fuel_left = float(fuel_left)
        except ValueError:
            await interaction.response.send_message("Количество бензина должно быть числом.", ephemeral=True)
            return

        conn = sqlite3.connect('cars.db')
        c = conn.cursor()
        c.execute('SELECT * FROM cars WHERE (name = ? OR number = ?) AND guild_id = ? AND channel_id = ?', (car_name, car_name, self.guild_id, self.channel_id))
        car = c.fetchone()

        if car and car[2] == "Занято":
            c.execute('UPDATE cars SET status = ?, user = ? WHERE id = ?', ("Свободно", "", car[0]))
            conn.commit()
            await interaction.response.send_message(f"Вы вернули машину {car[1]}", ephemeral=True)
            await update_car_list(interaction.channel)

            # Отправляем сообщение в канал уведомлений
            log_channel_id = get_log_channel(self.guild_id)
            if log_channel_id:
                log_channel = bot.get_channel(log_channel_id)
                if log_channel:
                    print(f"Логи будут отправляться в канал {log_channel.name} ({log_channel.id})")  # Отладочное сообщение
                    embed = discord.Embed(
                        title="Машина возвращена",
                        description=f"Вернул:\n {self.user.mention}\n\nМашина:\n {car[1]}\n\nБензин:\n {fuel_left} литров",
                        color=discord.Color.red()
                    )
                    await log_channel.send(embed=embed)
                else:
                    print(f"Не удалось найти канал для логирования с ID {log_channel_id}")
            else:
                print(f"Канал логирования для сервера {self.guild_id} не установлен")
        else:
            await interaction.response.send_message(f"Машина {car_name} не найдена или уже свободна", ephemeral=True)
        conn.close()

Ответы (0 шт):