• Как ввести мультисерверную экономику в бота?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Если немного сесть и подумать если нужно чтобы валюта была отдельная для каждого сервера, значит сервер должен где-то в модели данных фигурировать. А у вас его нет.
    6439241be37d6227319386.png
    Ответ написан
    Комментировать
  • Как заставить бота создавать роль при подключении к серверу, если ее раннее не было?

    @5465
    Для реализации такой функциональности, вам необходимо добавить обработчик событий on_guild_join, который будет вызываться каждый раз, когда ваш бот присоединяется к новому серверу. В обработчике событий вы можете проверить наличие роли с нужным именем в сервере и, если ее нет, создать новую роль.

    Вот пример кода на основе вашего скрипта, который реализует эту функциональность:

    import os
    import disnake
    from disnake.ext import commands
    from func import *
    
    token = "токен"
    
    activity = disnake.Activity(
        name="v!help",
        type=disnake.ActivityType.watching,
    )
    
    bot = commands.Bot(command_prefix="v!", help_command=None, intents=disnake.Intents.all(), activity=activity)
    
    # Функция для создания роли, если ее не существует
    async def create_role(guild):
        role_name = "Название роли"
        role = disnake.utils.get(guild.roles, name=role_name)
        if role is None:
            role = await guild.create_role(name=role_name, reason="Роль создана ботом")
        return role
    
    if not os.path.exists("guilds.json"):
      with open("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/guilds.json", "w") as file:
        file.write("{}")
        file.close()
    if not os.path.exists("mutedroles.json"):
      with open("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/mutedroles.json", "w") as file:
        file.write("{}")
        file.close()
    
    
    @bot.event
    async def on_ready():
      for guild in bot.guilds:
        with open("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/guilds.json", "r") as file:
          data = json.load(file)
          file.close()
    
        with open("C:/Users/murat/OneDrive/Рабочий стол/Ботинок ДС/jsons/guilds.json", "w") as file:
          data[str(guild.id)] = str(guild.name)
          json.dump(data, file, indent=4)
          file.close()
    
        # Вызов функции создания роли
        role = await create_role(guild)
        print(f"Роль {role.name} создана в сервере {guild.name}.")
    
      print(f"Бот {bot.user} к вашим услугам!!!")
    
    
    # Обработка ошибок
    @bot.event
    async def on_command_error(ctx, error):
      print(error)
    
      if isinstance(error, commands.MissingPermissions):
        await ctx.send(f"{ctx.author}, у вас не достаточно прав!")
      elif isinstance(error, commands.UserInputError):
        await ctx.send(embed=disnake.Embed(
          description=f"Правильное использование команды: `{ctx.prefix}{ctx.command.name}` ({ctx.command.brief})\nExample: {ctx.prefix}{ctx.command.usage}"
        ))
    
    
    @bot.slash_command()
    async def load(ctx, extension):
      if ctx.author.id == 623446417268277268:
        bot.load_extension(f"cogs.{extension}")
        await
    Ответ написан
    Комментировать